Intel 8086 y 8088

De El Museo de los 8 bits
Revisión a fecha de 02:22 19 jul 2006; Museo8bits (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

             +--\/--+
    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)

Enlaes a Wikipedia