Practica Perifericos Von Neumann

download Practica Perifericos Von Neumann

of 12

Transcript of Practica Perifericos Von Neumann

  • Perifricos en procesador Von Neumann

    Objetivos:

    Analizar la operacin de los componentes bsicos de un CPU

    Analizar la operacin de perifricos por mapeo de memoria

    Desarrollo:

    Actividad 1: El mapa de memoria y los perifricos En esta actividad se van a conectar dos perifricos al computador terico: una pantalla de 8 filas por 15 columnas, y un teclado con dos registros internos. Para imprimir caracteres en esta pantalla, se deben escribir sobre la memoria de video de su interfaz. Para leer datos del teclado se debern leer de sus registros de control. Por tanto, antes de poder realizar programa alguno, es necesario mapear estos dispositivos en el espacio de direcciones y conectarlos al computador elemental. Realiza los pasos siguientes. Si tienes duda en alguno de ellos, puedes seguir los pasos detallados del Anexo 1:

  • Perifricos en procesador Von Neumann

    1. Configura la memoria del simulador para que tenga cuatro mdulos: uno de 32K que ocupa las primeras direcciones de memoria, otro de 16K que vaya a continuacin, otro de 8K y finalmente uno de 4K. Los 4K finales del espacio de direcciones deben quedar libres para mapear en ellos los interfaces.

    2. En la seccin de ENTRADA SALIDA del simulador, activa el men contextual y selecciona la opcin de Conectar Pantalla

    3. Conecta un interfaz de video, ponindole como nombre Pantalla y como direccin base F000h (es la direccin en que se mapeara), con esto se muestra la pantalla en una ventana de Windows.

    4. En la seccin de ENTRADA SALIDA del simulador, activa el men contextual y selecciona la opcin de Conectar teclado

    5. Configura este dispositivo ponindole como nombre Teclado, como direccin base F700h, como vector de interrupcin el 1, prioridad 0. Deja sin

  • Perifricos en procesador Von Neumann

    marcar la casilla que indica si se generan interrupciones. Con esto se muestra en una ventana el teclado.

    6. Guarda el estado del simulador en el archivo interfaces.sim

    Actividad 2. Mostrando texto en la pantalla Para ver como se escribe en la pantalla, vamos a utilizar un programa que escriba un smbolo = en la esquina superior izquierda de la pantalla del computador terico. La explicacin terica del funcionamiento del interfaz la tienes en el anexo 2.

    1. Usando el bloc de notas copia el siguiente cdigo.

    ORIGEN 500h .CODIGO ; Cargar la direccin del registro de control del teclado en R0 MOVL R0, 00h ; Cargar el valor en la parte baja en R0 MOVH R0, 11110000b; Cargar el valor en la parte alta en R0 MOVL R1, '=' ; Cargar lo necesario para imprimir un smbolo = MOVH R1, 7h ; Cdigo de color blanco sobre fondo negro bucle: MOV [R0], R1 ; Escribir smbolo = INC R0 ; Avanzar a la siguiente posicin de pantalla JMP bucle ; Volver al bucle FIN

    2. Guarda este programa con el nombre de ejer1.ens 3. Ensambla el programa y cuando hayas obtenido el archivo .eje, crgalo en

    simulador.

    Para ensamblar el programa ejer.ens utiliza el programa ensambla.exe en una sesin de DOS, con la siguiente sintaxis

    o Ensambla ejer.ens

  • Perifricos en procesador Von Neumann

    Si el cdigo no tiene errores se generara un archivo con extensin .eje (ejer.eje)

    4. Carga este programa en el simulador con la opcin Archivo Abrir

    5. Verifica que el cdigo maquina se haya cargado en la memoria, para esto haz clic en la seccin de Memoria y selecciona la opcin de Editor hexadecimal

    6. Se debe mostrar una pantalla como la siguiente, haz clic en el botn de Ir a

    direccin y en el cuadro de dialogo que se muestra captura el valor 500

    7. Se mostrara en la pantalla de Editor Hexadecimal a partir de la localidad

    de memoria Direccin = 0500 el cdigo mquina del programa, si esta correcto haz clic en el botn de aceptar.

  • Perifricos en procesador Von Neumann

    8. Teniendo el perifrico que simula la pantalla visible, ejecuta el programa instruccin a instruccin (F8), al menos 5 veces, para comprobar que aparece un smbolo =

    Nota: Para que F8, funcione, la ventana activa debe ser la del simulador y no la pantalla.

    9. Ahora ejecuta el programa en modo RUN (F9) y verifica que se muestran

    varios smbolo =, en la pantalla del monitor simulado.

    Actividad 3. Modificar el programa que muestra un smbolo =.

    1. Edita de nuevo el archivo ejer1.ens. Gurdalo con el nombre ejer2.ens, recuerda que al momento de guardar el archivo debes seleccionar la opcin de tipo = Todos los archivo (*.*)

  • Perifricos en procesador Von Neumann

    2. Modifica el programa para que el registro R1 parte alta tenga el valor 54h 3. Carga este programa en el simulador y ejectalo. Qu efecto genera en la

    pantalla? R. _______

    4. Guarda el programa con el nombre ejer3.ens, haz que el smbolo = se escriba en la segunda celda de la segunda fila, usando un color de fondo negro, que parmetros debes de cambiar, para lograr esto analiza el cdigo del programa con lo que puedes verificar que el registro R0 lleva el control de la posicin en la cual se muestra el smbolo =, debes identificar qu valor debe tener R0 para que inicie en el segundo rengln, el valor del color de fondo negro equivale a 4H, este valor se copia en R1.

    R. R0= _______, R1 = ______ 5. La direccin de memoria asociada con esa celda es F00Fh, recuerda que la

    pantalla es de 8 filas por 15 columnas.

    Actividad 4. Leyendo datos del teclado, por muestreo peridico Pooling Nuestro siguiente ejemplo permitir la programacin del teclado utilizando la tcnica de sincronizacin del muestreo peridico (pooling). Para ello debes conocer el funcionamiento del registro de control del teclado, y el concepto de mascara de bits (puedes consultarlo en el anexo 3) Este programa usa un bucle infinito en el que se estar verificando si hay una tecla pulsada. Cuando se detecte la pulsacin de una tecla, se imprimir un smbolo = en la pantalla del computador terico y se volver al bucle de espera. El listado propuesto del programa, es:

  • Perifricos en procesador Von Neumann

    ORIGEN 300h .CODIGO MOVL R0, 00h ; Cargar la direccin del registro de control del teclado en R0 MOVH R0, 11110111b; F7 MOVL R1, 01h ; Cargar la mscara en R1 MOVH R1, 00h MOVL R3, 00h ; Cargar en R3 la direccin de la primera celda MOVH R3, 11110000b ; de pantalla F0 MOVL R4, '=' ; Cargar lo necesario para imprimir un smbolo = MOVH R4, 7h ; en color blanco sobre fondo negro bucle: MOV R2, [R0] ; Leer el registro de control a R2 AND R2, R2, R1 ; Realizar operacin con la mascara BRZ bucle ; Si no se pulso tecla, volver al principio del bucle ; Si estamos aqu, se pulso tecla. Imprimir un smbolo = MOV [R3], R4 ; Escribir smbolo = INC R3 ; Avanzar a la siguiente posicin de pantalla JMP bucle ; Volver al bucle a ver si se pulsan ms teclas FIN

    1. Copia las instrucciones del programa propuesto y crea un archivo llamado pulsa.ens, guarda, ensambla y carga el programa en el simulador.

    2. Ejecuta el programa paso a paso (Tecla F8). Comprueba que todos los registros se cargan con los valores adecuados y ejecuta el bucle dos veces, sin haber pulsado ninguna tecla del teclado del computador terico, para verificar que mientras no se pulse ninguna tecla el programa funciona bien (debes oprimir la tecla F8 deja que se ejecute dos veces la instruccin MOV R2, [R0]).

    3. Cuando veas que el registro IR contiene la instruccin MOV R2, [R0] (esto indica que esta instruccin ya estar ejecutada), pulsa la tecla que representa el nmero Uno en el teclado del computador terico. Fjate que a la derecha de la ventana que representa el teclado se muestra el contenido del buffer de teclado y debe aparecer el valor ASCII de la tecla que acabas de pulsar

    4. Contina con la operacin del programa pulsando F8 hasta que aparezca el smbolo = en la pantalla

    5. Ejecuta el programa por medio de la opcin RUN (F9) y oprime diversas teclas, puedes comprobar que no todas las teclas muestran un smbolo = en el monitor terico, en especial las teclas cuyo valor ASCII es un numero par, al realizar la comparacin AND R2,R2,R1 el resultado ser CERO, por este motivo estas teclas no se muestran en el monitor

    Actividad 5. Corregir la operacin del programa de lectura de teclado

    1. Edita vez el archivo pulsa.ens y grbalo como pulsa1.ens

  • Perifricos en procesador Von Neumann

    2. Analizando las instrucciones del programa pulsa1.ens, podemos concluir lo siguiente

    a. R0 = F700h Posicin de memoria asignada al teclado b. R1 = 0001h Mascara de verificacin c. R3 = F000h Posicin de memoria asignada al monitor d. R4 = 072Ah Valor ASCII del smbolo = y parmetro de color e. R2 = Valor que se lee del teclado posicin de memoria =F700h f. AND R2,R2,R1, solo deja en R2 el bit menos significativo g. BRZ bucle, si la operacin anterior es = CERO no se oprimi

    ninguna tecla y vuelve a ejecutar el ciclo h. MOV [R3],R4 Copia en la localidad de memoria= F000h el

    carcter = y parmetro de color con que se mostrara en el monitor i. INC R3 adiciona una unidad a R3 para que en el siguiente ciclo

    se muestre el carcter en la siguiente posicin del monitor j. JMP bucle retorna al ciclo de captura por teclado

    3. Para que el programa muestre todas las teclas activadas en el teclado se debe modificar el valor de la mscara para que al realizar la comparacin del valor ASCII ledo por teclado el resultado de AND R2,R2,R1 sea un valor diferente a CERO, cual valor en R1 permitir que el programa opere en forma optima? R1 = _____

    4. Modifica el valor de la mscara en R1, ensambla el programa y ejectalo por medio de la tecla F9 (modo de ejecucin continua) y comprueba pulsando teclas del teclado del computador terico que el programa funciona ahora correctamente, es decir, solo escribe un smbolo = por cada tecla pulsada.

    Actividad 6. Mostrar tecla capturada en el monitor.

    1. Modifica el programa pulsa1.ens para que muestre en el monitor el carcter de la tecla que se activo por medio del teclado, considera que cuando se oprime una tecla el valor ASCII asociado se almacena en R2L, parte baja de R2. Debes insertar la instruccin MOV R4,R2 en el lugar adecuado y antes de mostrar el carcter en el monitor MOV R4,54h

    2. Guarda este programa como pulsa2.ens, ensmblalo y ejectalo para comprobar su operacin.

    Actividad 7. Ejercicio limpia la pantalla antes de mostrar los caracteres.

    1. Modifica el programa pulsa2.ens para que antes de iniciar el proceso de muestreo del teclado y visualizacin del carcter ASCII en el monitor, realice una limpieza de la pantalla, recuerda que:

    a. La pantalla consta de 15 columnas por 8 renglones, este valor limite puedes guardarlo en R6

    b. Puedes utilizar el carcter ASCII de espacio = 20h en R4 c. Puedes incluir un nuevo bucle donde se realice el proceso de

    limpieza del monitor al mostrar por 120 veces el carcter espacio

  • Perifricos en procesador Von Neumann

    d. Si usas R5 para controlar el proceso de limpieza del monitor, se recomienda que realices el decremento de este valor hasta llegar a CERO, la instruccin para decremento de un registro es DEC Registro, por ejemplo DEC R5

    e. La instruccin para realizar un salto si no se cumple la condicin de que R5=0, es BRNZ etiqueta, por ejemplo BRNZ limpia

    f. Antes de iniciar el proceso de lectura del teclado debes reinicializar R3=F000h

    g. A continuacin se propone la rutina de limpieza, dnde la debes colocar dentro del programa?

    MOVL R3, 00h ; Cargar en R3 la direccin de la primera celda MOVH R3, 11110000b ; de pantalla F0 MOVL R5, 78H ;78h = 120 = 8 X 15 MOVH R5,0H ; Limpiar la pantalla MOVL R4, ' ' ; Cargar lo necesario para imprimir un smbolo MOVH R4, 7h ; en color blanco sobre fondo negro LIMPIA: MOV [R3], R4 ; Escribir letra INC R3 ; Avanzar a la siguiente posicin de pantalla DEC R5 BRNZ LIMPIA ; Volver a LIMPIA

    2. Guarda este programa como pulsa3.ens, ensmblalo y ejectalo para comprobar su operacin.

  • Perifricos en procesador Von Neumann

    Anexos 1. Mapa de memria e interfaces Queremos mapear una pantalla y un teclado. Qu direccin escoger? Evidentemente, tiene que ser una direccin que pueda generar la CPU terica, es decir, una direccin que est en su espacio de direcciones. Como el bus de direcciones de la CPU terica tiene 16 lneas, cuntas direcciones distintas podr generar?

    Si la posicin mas baja es la 0000h, cul ser la ms alta? = FFFFh La pantalla necesitara 120 (8x15) de estas direcciones para mapear su memoria de video. Adems tiene un registro de control que tambin deber ser mapeado en el espacio de direcciones. Por lo tanto, el interfaz de video necesitara en total 121 direcciones. Como el CPU utiliza lenguaje binario se debe utilizar un nmero de direcciones que sea potencia de 2. Por lo tanto, el interfaz de la pantalla necesitara 128 posiciones de memoria. En condiciones de acceso a la memoria podemos escribir en cualquiera de las direcciones de memoria un dato o una instruccin. Esto debido a que todo el espacio de direcciones del computador terico est lleno de chips de memoria. Pero si tenemos que reservar algunas direcciones para la pantalla, tendremos que eliminar algn chip de memoria. Si no, cuando la CPU generase un dato para una direccin en que tuviesen asignada a la vez la pantalla y un chip de memoria, quien tomara el dato? El simulador de la CPU terica permite eliminar y adicionar chips de memoria, siempre y cuando no se sobrepase su capacidad total. Vamos a revisar como est compuesto el sistema de memoria:

    1. Abre el simulador del computador terico. 2. Pulsa con el botn izquierdo del ratn sobre el dibujo etiquetado con

    MEMORIA en la esquina inferior izquierda. 3. En el men que se muestra, escoge la opcin Configurar. Aparecer una

    pantalla que te muestra, en la parte izquierda, el espacio de direcciones del computador terico. Fjate en que el computador tiene seleccionados dos mdulos de memoria de 32Ks, que recubren el espacio de direcciones de 64Ks sin dejar ningn hueco. Vamos a eliminar un modulo de memoria para tener espacio en la memoria:

    4. Selecciona el botn de eliminar , pulsa sobre el chip situado en la parte inferior de la figura (el que cubre las direcciones desde 8000h hejera FFFFh). Este modulo desaparecer. Ahora nuestro computador solo tiene 32Ks de memoria instalados. Si intentas escribir en una posicin por encima de los primeros 32Ks (por ejemplo, la B000h), el simulador te dara un error porque en esa posicin no hay memoria!

  • Perifricos en procesador Von Neumann

    5. Hemos dejado libres 32Ks para mapear la pantalla, pero solo necesitamos 128 direcciones, as que para tener ms memoria, vamos a seleccionar un modulo de 16Ks a continuacin del de 32 Ks:

    6. Haz clic en el modulo de 16Ks dibujado en la parte derecha de la pantalla. De esta forma pasara a estar seleccionado.

    7. Haz clic ahora en el hueco que hay entre las direcciones 8000h y 9000h. Se situara un chip de 16Ks a partir de la direccin en 8000h.

    8. Con esto dejamos un hueco de 16Ks, suficiente para la pantalla. Vamos a conectarla:

    9. Cierra la ventana de Configuracin de memoria pulsando el botn Aceptar 10. Haz clic en el dibujo etiquetado con ENTRADA/SALIDA en la esquina

    inferior derecha de la ventana principal del simulador. 11. Escoge la opcin Conectar Pantalla. 12. Te aparecer una ventana en la que tendrs que introducir las

    caractersticas de la pantalla que quieres conectar. En el lugar reservado para el nombre escribe Pantalla. Como direccin base (es decir, direccin a partir de la cual se mapearn las 128 direcciones del interfaz de la pantalla) introduce la F000h. Pulsa el botn Aceptar, con esto debers visualizar una ventana que representa la pantalla que acabas de conectar.

    13. Para conectar el teclado sigue estos pasos: 14. Haz clic en el dibujo etiquetado con ENTRADA/SALIDA en la esquina

    inferior derecha de la ventana principal del simulador. 15. Escoge la opcin Conectar Teclado. 16. Te aparecer una ventana en la que tendrs que introducir las

    caractersticas del teclado que quieres conectar. En el lugar reservado para el nombre escribe Teclado. Como direccin base (es decir, la direccin a partir de la cual se mapearan los dos registros del teclado) introduce la F700h. Tendrs que rellenar tambin tres campos relativos a interrupciones aunque ahora no los necesitamos porque vamos a trabajar con entrada mediante muestreo peridico y no mediante interrupciones.

    17. Como vector de interrupcin introduce el 1, como prioridad la 0 y deja sin marcar la casilla que indica si se generan interrupciones. Con esto ya habrs equipado al computador elemental con una pantalla que estar mapeada en la direccin en F000h y un teclado cuyos registros de datos y control estn a partir de F700h. Para no tener que repetir todo este proceso en sucesivas ocasiones, guarda la configuracin actual del simulador en un archivo llamado interfaces.sim.

    Funcionamiento del interfaz de video El interfaz de la pantalla esta mapeado de tal forma que a la direccin base (F000h en nuestro caso) se le asigna la posicin de memoria de video que representa la primera celda de la primera fila, a la siguiente direccin en se le asigna la posicin de memoria de video que representa la segunda celda de la primera fila, etc. Despus de todas las posiciones de memoria de video esta mapeado el registro de control.

  • Perifricos en procesador Von Neumann

    Cada posicin de la memoria de video tiene la siguiente estructura: - - R G B R G B - - - - - - - - Fondo Letra Atributos Carcter Para representar los colores se usa el siguiente cdigo RGB (Red, Green, Blue): Cdigo Color 000 Negro 001 Azul 010 Verde 011 Cian 100 Rojo 101 Morado 110 Amarillo 111 Blanco Para escribir un smbolo = en una posicin de pantalla habr que poner el cdigo ASCII del carcter smbolo = en la parte baja de la posicin de memoria de video asociada a esa posicin. Para obtener el cdigo ASCII de un carcter en el ensamblador se pone el carcter entre comillas simples. Por ejemplo: '*'.