# Intel 8087

El Intel 8087, anunciado en 1980, fue el primer coprocesador de coma flotante para la línea de microprocesadores Intel 8086 y 8088.
El objetivo del 8087 era acelerar los cálculos de aritmética de punto flotante, como la adición, sustracción, multiplicación, división y raíz cuadrada. También calculaba las funciones trascendentales como las exponenciales y logarítmicas o trigonométricas. Las mejoras de rendimiento eran de aproximadamente 20% a más del 500%, dependiendo de la aplicación específica. El 8087 podía realizar cerca de 50.000 FLOPS usando alrededor de 2,4 vatios. Sólo las operaciones aritméticas se beneficiaban de la instalación de un 8087, computadores que usados sólo en aplicaciones tales como procesamiento de textos, por ejemplo, no se beneficiarían de los gastos adicionales (alrededor de $150) y el consumo de energía de un 8087.
Las ventas del 8087 recibieron un gran impulso cuando IBM incluyó un zócalo de coprocesador en la tarjeta madre del IBM PC. El desarrollo del 8087 condujo al estándar IEEE 754-1985 para aritmética de coma flotante. Los procesadores de Intel posteriores (introducidos después del 486DX) no usaron un coprocesador de coma flotante por separado.

## Diseño y desarrollo

Intel había fabricado previamente la unidad de procesamiento aritmético 8231, y el procesador de coma flotante 8232, que fueron diseñados para su uso con el 8080 o procesadores similares y usaban un bus de datos de 8 bits. Estos fueron conectados a un sistema host a través de E/S programada o un controlador DMA.
El 8087, anunciado en el año 1980. Tenía 45.000 transistores. Fue fabricado con circuito HMOS depletion load de 3 μm. En comparación, el microprocesador 8086 tenía 29.000 transistores. La producción del 8087 fue hecha en Malasia.
Este coprocesador introdujo alrededor de 60 nuevas instrucciones, todos sus mnemónicos en ensamblador comenzaban con "F", para diferenciarlos de las instrucciones de enteros del 8086/88. Por ejemplo, como complemento al ADD/MUL/CMP, el 8087 proporcionaba el FADD/FMUL/FCOM. Las codificaciones binarias para todas las nuevas instrucciones comenzaban con el patrón de bits 11011, (27 en decimal), el mismo que el carácter ASCII ESC Prefijos de instrucción similares a veces también se refieren como códigos de escape.
El uso del coprocesador no era transparente a los programas de aplicación, que tenían que ser escritos para hacer uso de instrucciones especiales de coma flotante. En tiempo de ejecución, el software puede detectar el coprocesador y usarlo para operaciones en coma flotante, de lo contrario la función del coprocesador era emulada en software.

## Registros

El 8087, y de hecho, toda la familia x87, no utiliza un conjunto de registros directamente direccionables como los registros principales de los procesadores 8086/8088 e 80286 (AX, BX, CX, y DX, etc); en su lugar, los registros x87 forman una estructura de stack de 8 niveles de profundidad que van desde el ST0 hasta el ST7, donde ST0 es el tope del stack. Las instrucciones x87 operan apilando (push), calculando y desapilando (pop) los valores en el stack. Sin embargo, las operaciones diádicas como FADD, FMUL FCOM, etc, pueden utilizar implícitamente los registros del tope ST0 y ST1, o pueden usar ST0 junto con un operando explícito en memoria o registro; por lo tanto, el registro ST0 puede ser usado como un acumulador (es decir, como un destino y operando izquierdo combinados) y también puede ser intercambiado con cualquiera de los ocho registros del stack usando una instrucción llamada FXCH stX (códigos D9C8..D9CFh). Esto hace que el stack del x87 se puede usar como siete registros libremente direccionables más un acumulador. Esto es especialmente aplicable en procesadores x86 superescalares (el Pentium de 1993 y posteriores); en las instrucciones de intercambio son optimizadas hasta un ciclo de reloj de cero.

## Estándar de coma flotante IEEE

Cuando Intel diseñó el 8087, su objetivo era hacer un formato estándar de coma flotante para futuros diseños. Desde una perspectiva histórica, un importante aspecto del 8087 fue que se convirtió en la base del estándar de coma flotante IEEE 754. El 8087 no implementó el eventual estándar IEEE 754 en todos sus detalles, puesto que el estándar no se terminó hasta 1985, varios años después de la introducción del 8087, pero el 80387 sí lo hizo.
El 8087 proporciona dos tipos de datos básicos de coma flotante, de 32 y 64 bits (simple y doble precisión), y un adicional formato interno extendido de 80 bits, que también podía ser almacenado en la memoria, para mejorar la precisión en los cálculos de grandes y complejos. Aparte de esto, el 8087 ofrecía un formato de código binario decimal (BCD) empaquetado de 18 dígitos, codificados en 80 bits, como también, los formatos de tipos de datos enteros de 16, 32 y 64 bits.

## Interface del coprocesador

El 8087 difería de subsecuentes coprocesadores de Intel en que se estaba directamente conectado a los buses de direcciones y datos. El 8088/86 veía las instrucciones que comenzaban con la secuencia '11011' y cedía el control al coprocesador. El coprocesador retornaba el control una vez que terminaba la secuencia de instrucciones del coprocesador. Había un problema de bloqueo potencial si la instrucción del coprocesador fallaba en descodificarse a una de las que el coprocesador entendía. Los coprocesadores posteriores de Intel no se conectaban con los buses de la misma manera, sino que las instrucciones eran manejadas por el procesador principal. Esto dio lugar a una penalización de tiempo de ejecución, pero el problema del bloqueo potencial fue evitado porque el procesador principal ignoraría la instrucción si el coprocesador se negaba a aceptarla. El 8087 fue capaz de detectar si estaba conectado a un 8088 o a un 8086 monitoreando el bus de datos durante el ciclo de reset.

## Modelos y segundas fuentes

Los coprocesadores Intel 8087 fueron fabricadas en dos variantes, una con un DIP de soldadura lateral de cerámica (CerDIP) y una en un DIP hermético (PDIP), y fueron diseñados para operar en los siguientes rangos de temperatura:
* Prefijos C, D, QC y QD: 0 °C - 70 °C (uso comercial)
* Prefijos LC, LD, TC y TD: -40 a 85 °C (uso industrial)
* Prefijos MC y MD: -55 °C - 125 °C (uso militar)
Todos los modelos del 8087 tenía un paquete DIP de 40 pines y operaba en 5 voltios, consumiendo alrededor de 2,4 vatios. A diferencia de los posteriores coprocesadores Intel, el 8087 tuvo que correr a la misma velocidad de reloj que el procesador principal. Sufijos en el número de parte identifican la velocidad de reloj:
Velocidades de reloj del 8087 :
| Número de modelo | Frecuencia |
| Intel 8087 | 5 MHz |
| Intel 8087-1 | 10 MHz |
| Intel 8087-2 | 8 MHz |
| Intel 8087-3 | 4 MHz |
| Intel 8087-6 | 6 MHz |
* El Intel C8087 de 5 MHz original
* El Intel D8087 de 5 MHz original
* Un Intel D8087-2 de 8 MHz
* Un Intel C8087-3 de 5 MHz
De esta parte hubo una segunda fuente por AMD y Cyrix.
En la Unión Soviética fue producido un clon del 8087.

## Sucesores

Los siguientes coprocesadores Intel x87 fueron el 80287 (para el 80286), 80387 DX y SX (para el 80386 y 80386SX) y el 80187 (para el 80186). El 80487 era en realidad un chip i486DX completo con un pin adicional. El 80486DX, Pentium y posteriores procesadores incluyen la funcionalidad de coma flotante incorporada en el núcleo del CPU.