Intel 8086 y 8088

De El Museo de los 8 Bits
Ir a la navegación Ir a la búsqueda
Intel 8086.
Intel 8088.

Los Intel 8086 e Intel 8088 (i8086, llamado oficialmente iAPX 86, e i8088) son dos microprocesadores de 16 bits diseñados por Intel en 1978, iniciadores de la arquitectura x86. La diferencia entre el i8086 y el i8088 es que el i8088 utiliza un bus externo de 8 bits, para poder emplear circuitos de soporte al microprocesador más económicos, en contraposición al bus de 16 bits del i8086.

Registros

Los i8086 e i8088 se basaron en el diseño del Intel 8080 y el Intel 8085, y de hecho son compatibles a nivel de ensamblador con el i8080. El conjunto de registros también es similar al del i8080, pero ampliados a 16 bits. Tanto el de 8 bits, y cuatro registros índice de 16 bits (incluyendo el puntero de pila). Los registro de datos se usan a veces de forma implícita por las instrucciones, haciendo más difícil la organización de los registros para emplearlos con valores temporales.

Registros de propósito general
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       AH      |       AL      | AX
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       BH      |       BL      | BX
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       CH      |       CL      | CX
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       DH      |       DL      | DX
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Registros índices
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               SI              | Source Index
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               DI              | Destination Index
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               BP              | Base Pointer
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               SP              | Stack Pointer
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Flags
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|- - - - O D I T S Z - A - P - C| Flags
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Registros de segmento
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               CS              | Code Segment
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               DS              | Data Segment
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               ES              | Extra Segment
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               SS              | Stack Segment
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Instruction Pointer
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               IP              | Instruction Pointer
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Registros

Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son direccionables por medio de un nombre.

Registros de Propósito General

Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del sistema. Son únicos en el sentido de que se les puede direccionar como una palabra o como un byte.

Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética.

Registro BX: El registro BX es el registro base, y es el único registro de propósito general que puede ser un índice para direccionamiento indexado. También es común emplear el BX para cálculos.

Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits. El CX también es usado para cálculos.

Registro DX: El registro DX es el registro de datos. Algunas operaciones de entrada/salida requieren su uso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y AX trabajando juntos.

Registros Índice

Los registros SI y DI están disponibles para direccionamiento indexado y para sumas y restas.

Registro SI: El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas de caracteres. El SI está asociado con el registro DS.

Registro DI: El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. El DI está asociado con el registro ES.

Registros Apuntadores

Los registros SP (apuntador de pila) y BP (apuntador base) están asociados con el registro SS y permiten al sistema accesar datos en el segmento de la pila.

Registro SP: El apuntador de pila de 16 bits está asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que está siendo procesada en la pila. El sistema maneja de manera automática este registro.

Registro BP: El apuntador base de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía la pila.

Registro de Banderas

Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la máquina y el resultado del procesamiento. Muchas instrucciones aritméticas y de comparación cambian el estado de las banderas y apoyándose de ellas determinan la acción subsecuente.

Los bits de las banderas son las siguientes:

OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de una operación aritmética de números signados (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera.

DF (dirección): Controla la selección de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres (1=decremento automático; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.

IF (interrupción): Indica que una interrupción externa sea procesada o ignorada (1=habilita la interrupción; 0=deshabilita la interrupción). El estado de la bandera IF se controla con las instrucciones STI y CLI.

TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso)

SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo).

ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero).

AF (acarreo auxiliar): Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmética especializada. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL después de una suma o resta BCD.

PF (paridad): Indica paridad par o impar en una operación de datos de ocho bits (0=paridad impar; 1=paridad par).

CF (acarreo): Contiene el acarreo de los bits de mayor orden después de una operación aritmética; también almacena el contenido del último bit en una operación de corrimiento o de rotación. editado Ian James Foord

Registros de Segmento

Un registro de segmento tiene 16 bits de longitud y facilita un área de memoria para direccionamiento conocida como el segmento actual.

Registro CS: El DOS almacena la dirección inicial del segmento de código de un programa en el registro CS. Esta dirección de segmento, más un valor de desplazamiento en el registro apuntador de instrucción (IP), indica la dirección de una instrucción que es buscada para su ejecución. Para propósitos de programación normal, no se necesita referenciar el registro CS.

Registro DS: La dirección inicial de un segmento de datos de programa es almacenada en el registro DS. Esta dirección, más un valor de desplazamiento en una instrucción, genera una referencia a la localidad de un byte específico en el segmento de datos.

Registro SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la dirección de inicio del segmento de pila de un programa en el registro SS. Esta dirección de segmento, más un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que está siendo direccionada. Para propósitos de programación normal, no se necesita referenciar el registro SS.

Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento para manejar el direccionamiento de memoria. El registro ES está asociado con el registro DI (Índice). Un programa que requiere el uso del registro ES puede inicializarlo con una dirección de segmento apropiada.

Registro Apuntador de Instrucciones

El registro IP de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP está asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se está ejecutando actualmente.

Acceso a memoria

Ambos microprocesadores tienen un rango de entrada/salida de 64 Kbytes e interrupciones vectorizadas fijas. La mayoría de las instrucciones solo pueden acceder a una posición de memoria, por lo que un operando debe ser forzosamente un registro. El resultado se almacena en uno de los operandos.

Los i8086 e i8088 presentan cuatro registros de segmento (CS, DS, ES y SS), que se pueden establecer a partir de los registros índice. Debido a que estos procesadores pueden direccionar hasta 1 MByte de memoria, para lo que son necesarios 20 bits, ya que sus registros son de 16 bits, es necesario emplear registros de segmento para acceder a toda la memoria. En lugar de suministrar los bits faltantes, como la mayoría de los procesadores segmentados, el i8086 y el i8088 desplazan un registro de segmento 4 bits hacia la izquierda y lo suman a la dirección de memoria, siendo el resultado la dirección efectiva. Esto suele ser considerado como un mal diseño, aunque puede ser aceptable, e incluso útil en el lenguaje ensamblador. Por el contrario, provoca confusión cuando se hace un uso extensivo de los punteros (como en el lenguaje C), debido a que es posible que dos punteros con diferentes valores apunten a la misma dirección de memoria. Peor aún, este esquema de registros solapados hace difícil expandir el mapa de memoria a más de 1 MByte, y de hecho, esto se cambió en el Intel 80286.

Patillaje

Pines del 8086 y del 8088. La líneas del bus de direcciones de ven en rojo, las del bus de datos en azul y las del bus de control en verde. Las líneas del bus de energía se ven en negro. Estos procesadores multiplexan en tiempo el bus de direciones, con el bus de datos y control.

En el 8086 se ven los pines del 2 al 16 y los pines 35 al 39 con doble funcionalidad, en un momento determinado transporta la dirección y en otro momento entran o salen los datos (o sale información de algunas líneas del bus de control).

En el 8088 se comparten los pines 9 al 16 entre el bus de direcciones y de datos, y los pines 35 al 38 entre el bus de direcciones y el de control.

Pines del 8086

             +--\/--+
    GND     1|      |40 Vcc (+5V)
<-> A14/D14 2|      |39 A15/D15         <->
<-> A13/D13 3|      |38 A16/S3          -->
<-> A12/D12 4|      |37 A17/S4          -->
<-> A11/D11 5|      |36 A18/S5          -->
<-> A10/D10 6|      |35 A19/S6          -->
<-> A9/D9   7|      |34 !BHE/S7         -->
<-> A8/D8   8|      |33 MN/!MX          <--
<-> A7/D7   9| Intel|32 !RD             -->
<-> A6/D6  10| 8086 |31 HOLD,  !RQ/!GTO <->
<-> A5/D5  11|      |30 HLDA,  !RQ/!GT1 <->
<-> A4/D4  12|      |29 !WR,   !LOOK    -->
<-> A3/D3  13|      |28 M/!IO, !S2      -->
<-> A2/D2  14|      |27 DT/!R, !S1      -->
<-> A1/D1  15|      |26 !DEN,  !S0      -->
<-> A0/D0  16|      |25 ALE,   QS0      -->
--> NMI    17|      |24 !INTA, QS1      -->
--> INTR   18|      |23 !TEST           <--
--> CLK    19|      |22 READY           <--
    GND    20|      |21 RESET           <--
             +------+

Pines del 8088 (además del bus externo de datos, que se reduce a 8 bits, la diferencia con el 8086 es mínima)

            +--\/--+
    GND    1|      |40 Vcc (+5V)
<-- A14    2|      |39 A15             -->
<-- A13    3|      |38 A16/S3          -->
<-- A12    4|      |37 A17/S4          -->
<-- A11    5|      |36 A18/S5          -->
<-- A10    6|      |35 A19/S6          -->
<-- A9     7|      |34 !SSO,  HIGH,    -->
<-- A8     8|      |33 MN/!MX          <--
<-> A7/D7  9| Intel|32 !RD             -->
<-> A6/D6 10| 8088 |31 HOLD,  !RQ/!GTO <->
<-> A5/D5 11|      |30 HLDA,  !RQ/!GT1 <->
<-> A4/D4 12|      |29 !WR,   !LOOK    -->
<-> A3/D3 13|      |28 M/!IO, !S2      -->
<-> A2/D2 14|      |27 DT/!R, !S1      -->
<-> A1/D1 15|      |26 !DEN,  !S0      -->
<-> A0/D0 16|      |25 ALE,   QS0      -->
--> NMI   17|      |24 !INTA, QS1      -->
--> INTR  18|      |23 !TEST           <--
--> CLK   19|      |22 READY           <--
    GND   20|      |21 RESET           <--
            +------+


Velocidad

La frecuencia del reloj del i8086 e i8088 se sitúa entre 4,77 MHz y 10 MHz.

A continuación se muestra el número de ciclos, aproximados, necesarios para hacer algunas operaciones:

  • Suma: 3 - 4 (registro), 9+EA - 25+EA (acceso a memoria)
  • Multiplicación: 70 - 118 (registro), 76+EA - 143+EA (acceso a memoria)
  • Movimiento de datos: 2 (registro), 8+EA - 14+EA (acceso a memoria)
  • Salto cercano: 11 - 15, 18+EA (acceso a memoria)
  • Salto lejano: 15, 24+EA (acceso a memoria)

EA: tiempo necesario para calcular la dirección de memoria efectiva, que va de 5 a 12 ciclos.

Coprocesador numérico

Ambos microprocesadores no tienen ninguna instrucción de coma flotante, pero se les puede añadir un coprocesador matemático para añadirles dichas instrucciones. El Intel 8087 era el coprocesador matemático más común, pero otros fabricantes como Weitek ofrecían otras alternativas con mayor rendimiento.

Microordenadores que usan el i8086 o i8088

El primer microordenador que usó el i8086 fue el Mycron 2000. También fue usado por el procesador de texto IBM Displaywriter. Por el contrario, el microordenador más importante de todos, el IBM PC, usó el Intel 8088.


Microprocesadores de Intel

4004 | 4040 | 8008 | 8080 | 8085 | 8086/8088 | iAPX 432 | 80186/80188 | 80286 | 80386 | 80486 | i860 | i960 | Pentium | Pentium Pro | Pentium II | Celeron | Pentium III | XScale | Pentium 4 | Pentium M | Pentium D | Xeon | Core | Itanium | Itanium 2

   (nota: la itálica indica los procesadores que no utilizan la arquitectura x86)

Atribución

Este artículo proviene originalmente de Wikipedia
que lo licencia simultáneamente bajo las licencias

Creative Commons Reconocimiento - CompartirIgual 3.0
y la licencia de documentación libre GNU v.1.2 y posteriores
El Museo de los 8 Bits lo integra en su wiki bajo cc-by-sa-3.0

Creative Commons License
GNU head