Uso de Memoria y Per..

Anuncio
USO DE MEMORIA Y
PERIFÉRICOS CON
EMU8086
Kervin Sánchez Herrera.
Estructura del Computador
MEMORIA
Uso de Memoria
• La memoria ROM ya está escrita y contiene el programa
BOOT de inicio, este programa se ubica entre las
direcciones de memoria 80000h:800E9h y no se puede
modificar.
• La
memoria RAM se ubica entre las direcciones
00000h:00FFFh se divide en datos y programa a ejecutar.
• El programa empieza en 00400h y el tamaño del mismo
depende del programador.
• El programador debe tener cuidado de no guardar datos en
la dirección del programa para no causar problemas de
ejecución.
Mapa de Memoria
Programa
• Las variables se definen usando DW y DB los cuales definen
variables de tamaño Palabra o Byte correspondientemente.
• Cuando se relacionan variables con registros, las variables de
tamaño Byte se deben usar con registros cortos como AL, y las
variables de tamaño Palabra con registros largos como AX.
Código del Programa
• El compilador traduce el programa a lenguaje binario.
• Por el estilo de programación las variables son puestas
en el mismo bloque del programa.
Direccionamiento de Variables
• Cuando se crean variables en el programa con DB o DW,
y luego se llaman las variables en el programa (como el
ejemplo) se utiliza un modo de direccionamiento llamado
direccionamiento especial o Directo, en el cual no se
usan registros para el desplazamiento, solo se usa un
desplazamiento dado en la instrucción y el Segmento de
Datos.
Direccionamiento de Variables (2)
• El desplazamiento se brinda en el mismo código de la
instrucción.
• La parte alta de la dirección de la variable se llena con el
DS.
• Qué pasa si el DS=CS? Qué pasa si el DS=0000H?
Direccionamiento de Variables (3)
• Si el DS es igual al CS, la variable se almacena en la
parte más baja de el código del programa, en la misma
dirección donde se inicializaron las variables.
• Si el DS es igual al inicio de la memoria RAM, las
variables se almacenarán en esa parte de la RAM
respetando los desplazamientos de dirección dados en el
Programa.
• Cual método Elegir?
Método Direccionamiento de Variables
• Cualquiera de los dos métodos es valido siempre y
cuando se tengan las siguientes consideraciones.
• Si el DS=CS:
• Se debe tener cuidado al hacer arreglos de Datos, ya que al estar
tan cerca del programa se puede borrar los mismos!!!
• La inicialización de los vectores de interrupciones debe hacerse
manualmente.
• Si el DS=0000h:
• Se puede trabajar libremente con arreglos sin preocuparse de que
el programa este cercano.
• Se facilita el inicializar los vectores de interrupción.
• Se pierden los datos inicializados en el programa ya que estos
fueron copiados en la RAM del programa!!!
VECTORES DE
INTERRUPCIÓN
Inicialización de Vectores de Interrupción
• Se pueden inicializar con variables o directamente.
• Su tamaño siempre es de 4 bytes!!!
• En la dirección se escribe:
• Desplazamiento Bajo.
• Desplazamiento Alto.
• Segmento Bajo.
• Segmento Alto.
• En ese preciso orden específico!!!
Inicialización de Vectores por Variables
• Se
debe hacer concordar las
variables con el espacio para los
vectores en 00000H.
• El DS debe ser 0000H.
• Cada Variable debe ser de 4 bytes.
(2 palabras).
• Dado el método de programación, la
dirección del segmento siempre es
igual al CS (0040H).
• Para que sirve la variable muerta?
• Porque no hay Vector0?
Inicialización de Vectores Directamente
• De igual forma se escribe en forma
•
•
•
•
de palabra.
Se debe tener cuidado que el DS
este en 0000H.
De igual forma la dirección del
segmento siempre es igual al CS
(0040H).
Estos vectores son los mismos que
para el método de inicialización por
Variables.
Porque ahora si hay Vector0?
Inicialización de Vectores
Vectores de Interrupciones
PUERTO UART
Puerto UART
• El puerto UART al igual que el resto de puertos, no
necesita inicialización.
• Es un puerto de escritura y de lectura.
• Su tamaño es de un byte.
• Genera interrupciones de envío y recibido! (si no se
desea trabajar con interrupciones, se debe usar la
instrucción CLI, al inicio del código).
• Se ubica en el puerto 00h.
Escritura y Lectura en el UART
• Siempre se usa el registro AL o AX para leer o escribir de
puertos.
• Se usa AL, dado que el tamaño del puerto es de 1 byte.
CONTADOR
Unidad Contador
• La unidad contador es de solo escritura, no se puede leer
desde ella.
• Tiene un tamaño de 1 byte.
• Responde mediante la patilla de TEST, la cual se prueba
mediante la instrucción WAIT (traducción a PUSHA,
POP). Este puerto no genera interrupciones!!!.
• Realiza Cuentas en unidades de ms.
• Se ubica en el puerto 01H
Escritura en el contador
• Se usa el registro AL, dado que el tamaño del puerto es
de 1 byte.
• Se usa PUSHA o POPA para esperar la cuenta.
• En este caso se realiza una cuenta de 32H = 50 ms.
REGISTRO LEDS
Registro de LEDS
• Es solo de escritura, no se pueden leer datos de él.
• Tiene un tamaño de escritura de 1 byte.
• No genera interrupciones.
• Se muestra en 8 LEDS externos del sistema.
• Se ubica en el puerto 02H
Escritura en Registro LEDS
• Se usa el registro AL, para escribir los datos.
• En este caso se escribe AAH = 10101010 B.
PUERTO MOUSE
Puerto Mouse
• De este puerto se obtienen 5 bytes de información.
• Los primeros 2 corresponden a la posición del mouse
•
•
•
•
•
horizontal. Se ubica en el puerto 03H.
Los 2 siguientes corresponden a la posición del mouse
vertical. Se ubica en el puerto 05H.
El ultimo corresponde al estado de los botones. Se ubica
en el puerto 07H.
El estado de los botones genera una interrupción (no la
posición, solo los botones).
Las posiciones son de tamaño Palabra, mientras que el
estado de los botones es de tamaño Byte.
Todos son puertos de solo Lectura!, no se pueden
escribir.
Lectura del Puerto Mouse
• Se usa AX para las posiciones ya que son de tamaño
Palabra.
• Se usa AL, para el estado de los botones ya que su
tamaño es 1 bite.
Mapa de Puertos
MEMORIA DE VIDEO
Memoria de Video
• La memoria de video se ubica en 01000H:010FFH.
• Es una memoria de solo escritura, no puede ser leída.
• Contiene
32 elementos imprimibles en forma de
rectángulos, cada uno de ellos necesita de 8 bytes (4
palabras) para su definición.
• Los elementos están organizados de forma ascendente.
• Dado que no puede ser leída, es una buena practica
guardar los parámetros en otra parte de la memoria RAM.
Organización de la Memoria de Video
Métodos para escribir en la Memoria de
Video
• Dado que no se puede leer en la memoria de Video, la
mejor practica es guardar los datos en alguna parte de la
memoria RAM y copiar estos a la memoria de Video
cuando sea necesario.
• La memoria de Video puede ser escrita mediante el
método directo, el cual utiliza el segmento de código DS o
mediante el método Indirecto el cual utiliza el segmento
de código ES, mediante uso de strings.
• Lo mas importante es mantener el orden en que se
copian los datos para poder obtener una imagen clara en
la pantalla.
Método directo
• Consiste en copiar los elementos desde una parte de la
memoria hacia la memoria de video un elemento a la vez.
• Se puede implementar mediante ciclos usando CMP o
LOOPs.
• Se deben mantener las variables originales en la parte de
la memoria designada para ello.
Método Directo (2)
Método Indirecto
• Se requiere que las variables estén definidas en alguna
parte de la Memoria RAM.
• Consiste en realizar el copiado mediante movimiento de
strings.
• Se usa la instrucción MOVS y REP, las cuales son muy
similares a MOV y LOOP.
• Se debe definir el ES.
Instrucción MOVS
• La instrucción MOVS, se usa definiendo el tamaño de
byte o palabra, mediante las formas: MOVSB y MOVSW.
• Esta
instrucción mueve el dato cuya dirección es
DSx10h+SI a la dirección ESx10h+DI.
• Mueve datos desde el Segmento de Datos hasta el
segmento Extra.
• Utiliza los índices DI y SI como índices de destino y
origen.
• MOVSB, mueve un byte, mientras que MOVSW mueve
una palabra.
Instrucción REP
• Esta instrucción se usa como prefijo solamente para
instrucciones de strings. Como MOVS, CMPS, SCAS,
LODS y STOS.
• Cumple la misma función que LOOP, disminuye el
registro CX y termina cuando la cuenta es 0.
• Además cumple la función de disminuir o aumentar los
registros índices según sea la bandera D.
• El uso de esta junto con MOVS reduce el código de
copiado.
Método Indirecto (2)
Recomendaciones Finales
• Nunca se debe perder de vista la dirección donde se esta
escribiendo o leyendo, no solo del desplazamiento sino
también del segmento!
• Las banderas son necesarias en muchos procesos,
siempre deben ser tomadas en consideración.
• Nunca se debe escribir o leer donde no esta permitido ya
que esto provoca errores!
• Se debe definir bien lo que se desea hacer antes de
sentarse a programar!
Referencias:
• Intel Corporation. iAPX 86/88, 186/188 User´s Manual.
1ra Ed., Intel Literature Sales, USA, 1986.
• Brey, Barry B. Microprocesadores Intel. 7ma Ed.,
Pearson Pretice Hill, Mexico, 2006.
• Intel Corporation. 8088 8-bit HMOS microprocessor
data sheet. 1990.
Descargar