Intel 8087
Intel 8087 | |
---|---|
Desenvolupador | Intel (mul) |
Fabricant | Intel (mul) |
Característiques de CPUs | |
Conjunt d'instruccions | x87 (coprocessor extension of x86-16) |
L'Intel 8087, anunciat el 1980, va ser el primer coprocessador de coma flotant per a la línia 8086 de microprocessadors.[1][2] 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 [1] utilitzant uns 2,4 watts.[2]
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.[3] 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
[modifica]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.[4]
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
[modifica]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 [5] 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–D9CFh). 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
[modifica]- ↑ 1,0 1,1 «8087» (en anglès). Coprocessor Dot Info. Arxivat de l'original el 30 setembre 2011. [Consulta: 1r desembre 2011].
- ↑ 2,0 2,1 «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].