CURSO DE ASSEMBLER DEL MICROPROCESADOR 8086/8088
1.- Características fundamentales del 8086/8088
A diferencia de sus predecesores (8080, 8085) de 8 bits pueden manejar la información de 16 bits. o sea, cuenta con registros y bus de datos de 16 bits.
Al respecto existe una diferencia
entre el 8088 y el 8086.
- 8088
Bus de datos
interna 16 bits
Registro de
trabajo 16 bits
Bus de datos
externo 8 bits
- 8086
Bus de datos
interna 16 bits
Registro de
trabajo 16 bits
Bus de datos
externo 16 bits
El bus de datos externo del 8088
es de 8 bits, en cambio el bus de datos externo de 8086 es de 16 bits. Poder manipular datos e
instrucciones en 16 bits.
Permite:- Mayor precisión
- Mayor velocidad de procesamiento
- Multiplicación
- División
Puede acceder a una mayor
cantidad de memoria, su bus de direcciones de de 20 bits, con lo que puede
direccionar 1 Megabyte de memoria. Parte de la dirección y todo el
bus de datos están multiplexados en 16 terminales. Los 4 bits de dirección
restantes se corresponden con los 4 terminales de dirección adicionales. El 8088 tiene una estructura de
interrupciones muy potente, realiza las operaciones de E/S en un espacio
físicamente separada de la memoria llamado espacio de E/S de hasta 64 kbytes de
longitud.
Estos microprocesadores de propósito general pueden trabajar
en un a configuración de múltiples procesadores, tanto en procesamiento
paralelo como multiproceso, con otros procesadores especializados como con:
- 8087 Procesador matemático
- 8089 Procesador de E/S
- Modo mínimo: trabajo de manera independiente
- Modo máximo: trabaja con otros integrados, 8288 controlador de bus, 8087 coprocesador matemático y otros.
El 8088 y el 8086 son microprocesadores de 16 bits de
propósito general de intel. Estos microprocesadores son una extensión lógica
del popular 8080. Internamente son iguales, excepto por el tamaño del bus de
datos externo, el 8088 esta diseñado para trabajar con bus de datos externo.
El 8088 esta diseñado para trabajar con bus de 8 bits,
siendo de esta manera compatible con la
mayoría de los buses del mismo tamaño. El 8086 por el contrario, se
conecta a un bus de 16 bits.
El 6 de 86 indica el bus de 16
bits; el 8 del 88 significa que el bus en este caso es de 8 bits, ambos números
se refieren a la anchura del bus de datos. Internamente, ambos poseen el mismo
juego de instrucciones y el mismo tamaño de datos.
Intel trata esta igualdad interna y desigualdad externa,
dividiendo cada procesador 8086 y 8088 en dos sub-procesadores. O sea, cada uno
consta de una:
Unidad de Ejecución (EU Execution Unit) y una
Unidad Interfaz de Bus (BIU Bus Interface Unit) .
Tal como se muestra el siguiente esquema del 8088.
FIGURA 1.-
Arquitectura del Microprocesador 8088
Los microprocesadores 8088/8086
constan de una Unidad de ejecución EU y una Unidad de Interfaz de Bus BIU.
La Unidad de ejecución:
esta encargada de realizar todas las operaciones .
La unidad de interfaz de bus:
Esta encargada de acceder a datos e instrucciones del mundo exterior.
Las unidades de ejecución son
idénticas en ambos procesadores, pero las unidades de interfaz son diferentes
en varias cuestiones que se verán mas adelante. Esta aproximación es un ejemplo
claro de diseño modular. Esto es, todo el procesador se divide en partes, dos
subprocesadores, y cada una esta encargada de ciertas tareas especificas. Entonces una de las principales
características del 8088/8086 es un proceso interno dual, que permite realizar
al mismo tiempo las principales funciones de transferencias de datos y búsqueda
de instrucciones.
Una unidad, la BIU esta encargada de localizar las instrucciones y de transferir todos los datos entre los registros y el mundo exterior. La otra unidad la EU esta encargada de decodificar y ejecutar todas las instrucciones. Además la BIU que es la encargada de buscar las instrucciones, utiliza el método llamado de estructura tabular o por colas para almacenar nuevas instrucciones hasta que se necesiten. La BIU del 8088 es más compleja, ya que debe transferir datos entre el bus de datos interno de 16 bits y el bus de datos externo de 8 bits.
Una unidad, la BIU esta encargada de localizar las instrucciones y de transferir todos los datos entre los registros y el mundo exterior. La otra unidad la EU esta encargada de decodificar y ejecutar todas las instrucciones. Además la BIU que es la encargada de buscar las instrucciones, utiliza el método llamado de estructura tabular o por colas para almacenar nuevas instrucciones hasta que se necesiten. La BIU del 8088 es más compleja, ya que debe transferir datos entre el bus de datos interno de 16 bits y el bus de datos externo de 8 bits.
Una cola es una línea de espera,
el 8088/8086 utilizan tales lineas de espera para almacenar sus instrucciones.
Dicho de otra manera, las instrucciones que han de ejecutarse llegan al
procesador antes de lo necesario y esperan en una cola de instrucciones.
Este sistema posee la ventaja de
que cada instrucción puede extraerse de memoria mientras otras se esta
ejecutando, reduciendo en consecuencia el tiempo de proceso. Las colas son
normalmente cortas, de 4 a 6 octetos, la del 8086 es de 6 y la del 8088 es de 4
bytes.
4.- Espacio de E/S
El 8088/8086 tiene otra especie
de memoria separada, llamada espacio de E/S, que puede considerarse como una
memoria extra para direccionar los lugares donde se encuentren los dispositivos
de E/S (direcciones cableadas). El espacio de E/S de 8088/8086 usa un
direccionamiento de 16 bits (permite direccionar hasta 64 bits). Tanto la
memoria principal como el espacio de E/S usan el mismo juego de direcciones y
líneas de datos. Solo el uso de señales de control separa la memoria y el
espacio de E/S.
5.- Juego de registros
El juego de registro del 8088 y
del 8086 son exactamente iguales, con 14 registro internos de 16 bits. Cada
registro tiene su propia personalidad, cada uno con un objetivo especial.
Algunos pertenecen a la EU y otros a la BIU.
Cuatro son registro de trabajo que se usan temporalmente por los programas para almacenar resultados intermedios y los operandos que se necesitan las operaciones aritméticas y lógicas.
Cuatro son registro de trabajo que se usan temporalmente por los programas para almacenar resultados intermedios y los operandos que se necesitan las operaciones aritméticas y lógicas.
Cuatro registro de segmento que
almacenan las direcciones de comienzo de ciertos segmentos de la memoria.
Cinco registro relativos que
almacenan las direcciones relativas que se emplean con las direcciones de
segmento para indicar donde están situados los datos en la memoria.
Finalmente hay un registro de estado,
formado por nueve bits que se emplean para registrar las información del esta
do del 8088/8086 y de las operaciones
del control.
Cuándo él ordenador esta
procesando datos, gran parte del tiempo el microprocesador lo ocupa en la
transferencia de sus datos con la memoria. Este tiempo de acceso se puede
reducir substancialmente en muchas ocasiones, guardando en el interior del 8088
oprerandos mas usados y los resultados obtenidos.
Los cuatro registro de 16 bits
llamados normalmente de trabajo, o de datos, se emplean con este propósito.
Estos son: AX, BX, CX, DX. Cada
uno de ellos se puede subdividir y direccionarse de forma separada, como si
fueran dos medios registros de 8 bits. Los medios registro de mayor orden se
conocen como AH, BH, CH, DH y los de
orden bajo se conocen como AL, BL, CL, DL. La utilización de los registro
completos, o medios, pueden ser manipulados libremente como el programador lo
desee en función de sus necesidades.
Estos se emplean la mayor parte de las veces como áreas temporales de trabajo, en particular para realizar operaciones aritméticas. Aunque estos registros se encuentran disponible para realizar cualquier tipo de trabajo, cada uno tiene asignado algunos usos especiales como:
Estos se emplean la mayor parte de las veces como áreas temporales de trabajo, en particular para realizar operaciones aritméticas. Aunque estos registros se encuentran disponible para realizar cualquier tipo de trabajo, cada uno tiene asignado algunos usos especiales como:
El registro AX (es un
acumulador), y es el registro principal para realizar las operaciones
aritméticas.
El registro BX (registro base)
se utiliza a menudo para apuntar el comienzo de una tabla en memoria. Se puede
usar también para almacenar la parte relativa de una dirección segmentada.
El registro CX (contador)
se utiliza como un contador de repetición para control de bucles. Por ejemplo,
la instrucción LOOP utiliza para almacenar el contador que indica el numero de
iteraciones del bucle. Ninguno de los otros registro puede realizar esta
función.
El registro DX (datos)
se utiliza para almacenar datos de 16 bits con propósitos generales.
Aunque los registro de trabajo se
utilicen para el almacenamiento temporal de datos y operando, o para las tareas
especificas ya mencionadas, la naturaleza de zona de trabajo les posibilita
también para otros usos. Por ejemplo los cuatro se usan a menudo para albergar
las direcciones relativas de datos que pasan como parámetros de un programa a otro.
En el método de segmentación que
es la que utiliza el 8088/8086, la dirección completa de una posición de
memoria consiste en la dirección de un segmento y el desplazamiento en el
segmento. Los cuatro registro, llamados CS, DS, SS y ES se utilizan para
identificar cuatro segmentos específicos de memoria, de los cuatro registro,
tres son de propósitos especiales.
El registro CS
(Segmento de código) localiza el segmento de código, es decir la
dirección a partir de la cual empieza el programa que esta siendo ejecutado.
El registro DS
(Segmento de Datos) localiza el segmento de datos, que es la dirección
donde empieza el área de memoria que almacena los datos que se están
utilizando.
El registro SS
(Segmento de Pila) localiza el segmento de pila, que es la dirección
donde empieza el área de memoria de trabajo temporal que almacena parámetros y
direcciones que utiliza el programa que esta activo.
El registro ES
(Segmento extra) localiza el segmento extra, que se utiliza normalmente
como suplemento del segmento de datos, con objeto de que se pueda usar mas de
64 k de memoria para almacenamiento.
También se utiliza para transferir datos entre segmentos. Sin embargo este segmento se usa, casi siempre, para calcular la dirección del destino en cualquier operación de cadenas.
Es común que los cuatro registro
se solapen o sean idénticos; también es común que solo se utilice sola una
parte del segmento de 64 k; por ejemplo, un programa puede necesitar tan solo
16k de un segmento de 64k.
9.- Registro de estado o de indicadores (Flags).
Es un registro de 16 bits de los cuales 9 son utilizados para indicar diversas situaciones durante la ejecución de un programa. Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condición, que reflejan los resultados de operaciones del programa; los bits del 8 al 10 son indicadores de control y el resto no se utilizan.
Estos indicadores pueden ser comprobados por las instrucciones de salto condicional, lo que permite variar el flujo secuencial del programa según el resultado de las operaciones.
8.- Los registros relativos
Se utilizan los cinco registro relativos para localizar un byte en concreto dentro de un segmento especifico de 64k. El registro llamado puntero de instrucción (IP), indica cual es la dirección donde se encuentra situada la instrucción dentro del segmento de código que se va a ejecutar.
Registros de pila, están íntimamente ligados a la pila, que no es mas que una zona de la memoria donde el 8088 guarda información de direcciones y de datos, que necesita recuerden para su utilización posterior. Dos registros que quedan se denomina registros de índice y se utilizan para señalar la situación de los operandos que se van a utilizar dentro del segmento de datos.
El puntero de instrucción (IP) también llamado contador de programa (PC), proporciona la dirección relativa en el segmento de código donde se encuentra localizada la instrucción del programa que se va a ejecutar. Se utiliza junto con los registro CS. Los programa no tienen acceso directo al registro IP, pero hay un conjunto de instrucciones, tales como JMP y CALL que cambian el contenido a/o desde la pila.
Los registros de pila, denominados puntero de pila (SP) y puntero de base (BP), proporcionan direcciones relativas dentro del segmento de pila. SP proporciona la situación de la cabecera de la pila y es análogo al registro IP. El registro BP se utiliza para indicar partiendo de la posición inicial de la pila , donde se encuentra determinada información.
Los registros de pila, denominados puntero de pila (SP) y puntero de base (BP), proporcionan direcciones relativas dentro del segmento de pila. SP proporciona la situación de la cabecera de la pila y es análogo al registro IP. El registro BP se utiliza para indicar partiendo de la posición inicial de la pila , donde se encuentra determinada información.
Los registros índice, denominados el índice de fuente (SI) y el índice de destino (DI), se utilizan normalmente con otro registro (AX, BX, CX, DX) o con ciertas instrucciones que proporcionan la dirección relativa del lugar inicial de un campo de datos.
Se utilizan muy a menudo cuando se transfieren grandes listas de datos.
Se utilizan muy a menudo cuando se transfieren grandes listas de datos.
Es un registro de 16 bits de los cuales 9 son utilizados para indicar diversas situaciones durante la ejecución de un programa. Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condición, que reflejan los resultados de operaciones del programa; los bits del 8 al 10 son indicadores de control y el resto no se utilizan.
Estos indicadores pueden ser comprobados por las instrucciones de salto condicional, lo que permite variar el flujo secuencial del programa según el resultado de las operaciones.
- CF (Carry Flag): Indicador de acarreo. Su valor más habitual es lo que nos llevamos en una suma o resta.
- OF (Overflow Flag): Indicador de desbordamiento. Indica que el resultado de una operación no cabe en el tamaño del operando destino.
- ZF (Zero Flag): Indicador de resultado 0 o comparación igual.
- SF (Sign Flag): Indicador de resultado o comparación negativa.
- PF (Parity Flag): Indicador de paridad. Se activa tras algunas operaciones aritmético-lógicas para indicar que el número de bits a uno resultante es par.
- AF (Auxiliary Flag): Para ajuste en operaciones BCD.
- DF (Direction Flag): Indicador de dirección. Manipulando bloques de memoria, indica el sentido de avance (ascendente/descendente).
- IF (Interrupt Flag): Indicador de interrupciones: puesto a 1 están permitidas.
- TF (Trap Flag): Indicador de atrape (ejecución paso a paso).
No hay comentarios:
Publicar un comentario