next up previous contents
Next: El manejo de excepciones Up: La familia INTEL 80x86 Previous: La familia INTEL 80x86

El microprocesador 8086/8088

La arquitectura de estos dos procesadores es similar, la únicas diferencias entre ambos es que el diseño del 8088 tiene un bus de 8 bits para los datos, mientras que el 8086 puede transferir 16 bits a la vez en el mismo bus. Y la cola de instrucciones del 8088 es de 4 bytes y la del 8086 es de 6 bytes. Sus características que destacan son el bus de direcciones de 20 bits, con lo que pueden direccionar hasta 1 Megabyte de memoria RAM, y hacer el manejo de memoria en forma segmentada en bloques de 64K bytes. Para esto cuenta con 4 registros de segmento de 16 bits cada uno (CS, SS, DS y ES) y con registros de 16 bits como offset (IP, SP, DI y SI principalmente).

Estos microprocesadores tiene 2 procesadores conectados internamente, como se puede apreciar en la figura 2.1, estos procesadores son:

EU
Unidad de ejecución (Execution Unit).
BIU
Unidad de interfaz con el Bus (Bus Interface Unit).

  
Figure 2.1: Diagrama de bloque del 8086/8088
\begin{figure}
\epsfxsize=250pt
\hspace{.42in}
\epsffile{diag8086.eps}
\end{figure}

La unidad de ejecución (EU) se encarga de realizar las operaciones aritméticas y lógicas, además de proporcionar las direcciones lógicas al BIU --una dirección lógica está formada de dos direcciones, la primera indica el segmento en el cual se está trabajando y la otra indica el offset, o desplazamiento, de este segmento; esto es segment:offset--.

La EU tiene una unidad aritmética lógica (ALU) de 16 bits, un registro de banderas y un conjunto de registros de propósito general. El registro de banderas contiene 6 banderas de estado (que la EU manipula para indicar el estado del resultado de una operación lógica o aritmética) y 3 banderas de control que se pueden manipular por los programas para alterar las operaciones del procesador (figura 2.2).

  
Figure 2.2: Registro de Banderas del 8086.
\begin{figure}
\epsfxsize=200pt
\hspace{.86in}
\epsffile{flags8086.eps}
\end{figure}

Todos los registros y buses de datos en la EU tienen 16 bits de longitud para obtener mayor rapidez en la transferencia interna. La EU cuenta con 8 registros de 16 bits que se pueden utilizar para realizar computaciones. Cuatro de estos registros componen el grupo de datos, estos son los registros acumulador (AX), base (BX), contador (CX) y dato (DX). Además estos cuatro registros se pueden trabajar como dos registros de 8 bits cada uno. Así, los registros de datos se pueden trabajar con su parte alta (AH, BH, CH y DH) o con su parte baja (AL, BL, CL y DL). Los siguientes dos registros generales, el apuntador de pila (SP)2.1 y la base de la pila (BP)2.2 constituyen el grupo de apuntadores y se encargan de manipular la pila. Los dos últimos registros generales, el índice fuente (SI)2.3 y el índice destino (DI)2.4 forman el grupo de registros de índice y se utilizan para operaciones de cadenas. Las direcciones que maneja el EU son de 16 bits de longitud. La BIU se encarga de relocalizar estas direcciones para que la EU pueda accesar completamente el megabyte del espacio de direcciones.

La unidad de interfaz con el Bus (BIU) es la responsables de la comunicación externa del procesador. Esta unidad de proceso se encarga de traducir las direcciones lógicas a direcciones físicas de la memoria con ayuda de los registros de segmento DS, SS, ES, CS e IP. Para convertir una dirección lógica en una dirección física el BIU corre el valor del registro de segmento 4 posiciones a la izquierda (que es equivalente a multiplicar por 16h) y suma el valor del offset para obtener un valor de 20 bits necesarios, como se muestra en la figura 2.3.

  
Figure 2.3: Generación de direcciones físicas
\begin{figure}
\epsfxsize=230pt
\hspace{.5in}
\epsffile{addr8086.eps}
\end{figure}

Los segmentos en la memoria pueden estar translapados, contiguos o disjuntos. El 8086 trabaja con un modelo de memoria circular, esto es, cuando la operación de translado de memoria lógica a memoria física sobrepasa el megabyte de memoria, entonces se direcciona la parte inicial de la memoria física.

La dirección de la siguiente instrucción que se ejecutará es CS:IP (Code Segment: Instruction Pointer). Para incrementar la eficiencia, en períodos donde la EU está ocupada ejecutando instrucciones, el BIU se adelanta a una petición de intrucción del EU y busca más instrucciones de la memoria. Las instrucciones se almacenan en una cola de instrucciones de 4 bytes para el 8088 y 6 bytes para el 8086. Bajo muchas circunstancias las colas contienen al menos 1 byte instrucción y el EU no tiene que esperar a que se busquen nuevas instrucciones. Las instrucciones almacenadas en la cola son adyacentes en la memoria, así, cuando se ejecuta una instrucción que transfiere el control a otra localidad el BIU limpia la cola y busca las nuevas instrucciones desde la nueva dirección.

El 8088/8086 tienen un sistema de interrupciones simple y versátil , estos procesadores pueden manejar hasta 256 interrupciones diferentes. Las entradas de las interrupciones se encuentran almacenadas el vector de interrupciones en la parte baja de la memoria. A cada interrupción se le asocia una doble palabra. Cada palabra doble corresponde al CS:IP de la subrutina que la interrupción invoca. Las primeras cinco interrupciones se utilizan para los siguientes errores: división por cero, paso sencillo (trap), interrupción no enmascarable, punto de ruptura y sobreflujo. El 8088/8086 no distingue entre las interrupciones generadas por hardware y por las interrupciones generadas por la instrucción INT.


next up previous contents
Next: El manejo de excepciones Up: La familia INTEL 80x86 Previous: La familia INTEL 80x86
Amilcar Meneses
2002-10-03