# Intel 8087

L'Intel 8087, anunciat el 1980, va ser el primer coprocessador de coma flotant per a la línia 8086 de microprocessadors. El propòsit del xip era accelerar les operacions aritmètiques de coma flotant, com ara la suma, la resta, la multiplicació, la divisió i l'arrel quadrada. També calcula funcions transcendentals com ara càlculs exponencials, logarítmics o trigonomètrics. Les millores de rendiment van ser d'aproximadament un 20% a més del 500%, depenent de l'aplicació específica. El 8087 podria fer uns 50.000 FLOPS utilitzant uns 2,4 watts.
El 8087 era un circuit integrat avançat, empenyent els límits de la tecnologia de fabricació de l'època. Les operacions bàsiques del 8087, com ara la suma i la resta, poden trigar més de 100 cicles de màquina a executar-se i algunes instruccions superen els 1000 cicles. El xip no té un multiplicador de maquinari i implementa càlculs mitjançant l'algorisme CORDIC. Les vendes del 8087 van rebre un augment significatiu quan es va incloure un sòcol de coprocessador a la placa base d'IBM PC de 1981. El desenvolupament del 8087 va donar lloc a l'estàndard IEEE 754-1985 per a l'aritmètica de coma flotant. Més tard hi va haver coprocessadors x87 per als processadors 80186, 80286, 80386 i 80386SX. A partir del 80486, els posteriors processadors Intel x86 no utilitzaven un coprocessador de coma flotant separat; Les funcions de coma flotant es van integrar amb el processador.

## Disseny i desenvolupament

Intel havia fabricat anteriorment la unitat de processament aritmètica 8231 i el processador de coma flotant 8232. Aquests van ser dissenyats per utilitzar-los amb processadors 8080 o similars i utilitzaven un bus de dades de 8 bits. Estaven connectats a un sistema host mitjançant E/S programada o un controlador DMA.
El 8087 va ser concebut inicialment per Bill Pohlman, el gerent d'enginyeria d'Intel que va supervisar el desenvolupament del xip 8086. Bill va prendre mesures per assegurar-se que el xip 8086 podria suportar un xip matemàtic que encara no s'ha desenvolupat.
Els codis d'operació del coprocessador es codifiquen en 6 bits a través de 2 bytes, començant per la seqüència d'escapada:
│ 1101 1xxx.. │ mmxx xrrr....│
Els tres primers bits "x" són els tres primers bits del codi operatiu de coma flotant. A continuació, dos "m" bits, després la darrera meitat tres bits del codi d'operació de coma flotant, seguit de tres bits "r". Els bits "m" i "r" especifiquen la informació del mode d'adreçament.
Els programes d'aplicació s'havien d'escriure per fer ús de les instruccions especials de coma flotant. En temps d'execució, el programari podria detectar el coprocessador i utilitzar-lo per a operacions de coma flotant. Quan no es detectava, s'havien de calcular funcions similars de coma flotant al programari, o es podia emular tot el coprocessador al programari per a una compatibilitat numèrica més precisa.

## Registres

La família x87 no utilitza un conjunt de registres directament adreçable com els registres principals dels processadors x86; en canvi, els registres x87 formen una estructura de pila profunda de vuit nivells que va de st0 a st7, on st0 és la part superior. Les instruccions x87 funcionen pressionant, calculant i mostrant valors en aquesta pila. Tanmateix, les operacions diàdiques com FADD, FMUL, FCMP, etc. poden utilitzar implícitament els st0 i st1 més alts o poden utilitzar st0 juntament amb un operand o registre de memòria explícit ; Així, el registre st0 es pot utilitzar com a acumulador (és a dir, com a destinació combinada i operand esquerre) i també es pot intercanviar amb qualsevol dels vuit registres de pila utilitzant una instrucció anomenada FXCH st X (codis D9C8–D9CF$_h$). Això fa que la pila x87 es pugui utilitzar com a set registres adreçables lliurement més un acumulador. Això és especialment aplicable als processadors x86 superescalars (Pentium de 1993 i posteriors), on aquestes instruccions d'intercanvi s'optimitzen fins a una penalització de rellotge zero.

## Referències

* 1 2 «8087» (en anglès). Coprocessor Dot Info. Arxivat de l'original el 30 setembre 2011. [Consulta: 1r desembre 2011].
* 1 2 «Intel FPU» (en anglès). cpu-collection.de. [Consulta: 1r desembre 2011].
* ↑ Shirriff, Ken. «Extracting ROM constants from the 8087 math coprocessor's die» (en anglès). righto.com. Self-published by Ken Shirriff, 01-05-2020. [Consulta: 3 setembre 2020].
* ↑ Lemone, Karen A. Assembly Language and Systems Programming for the IBM PC and Compatibles (en anglès). Little Brown, 1985, p. 302. ISBN 978-0-316-52069-0.
* ↑ Shvets, Gennadiy. «Intel 8087 family» (en anglès). CPU World, 08-10-2011. [Consulta: 1r desembre 2011].