13 oct 2012

CAPITULO IV: MICROPROCESADOR DE PROPÓSITO GENERAL 8086/8088


CURSO DE ASSEMBLER DEL MICROPROCESADOR 8086/8088
Cap 4.- Microprocesador de proposito general 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
Su configuración Hardware incluye instrucciones que no contienen sus antecesores (8080,8085) como:
  • Multiplicación 
  • División
Su set de instrucciones consta de 92 instrucciones básicas. Incluye sofisticadas estructura de interrupciones, lo que permite mayor eficiencia de los dispositivos de E/S. Incluye mecanismos eficientes de detección y recuperación de errores, (p.e en la instrucción DIV, prevé una interrupción para división por cero).
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
Estos chips no son obligatorios para las funciones usuales, pero esta disponible en caso de que se los quiera utilizar. Para esto, este microprocesador tiene una configuración tal que puede trabajar en dos modos diferentes:
  • Modo mínimo: trabajo de manera independiente
  • Modo máximo: trabaja con otros integrados, 8288 controlador de bus, 8087 coprocesador matemático y otros.
2.- Estructura de los microprocesadores de propósito general 8088/8086

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.

3.- Colas de instrucciones
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 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.

6.- Los registros de trabajo
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:
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.

7.- Los registros de segmento
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.

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 í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.

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.
  • 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: