Intel 8087
Intel 8087 >> | |
---|---|
Intel 8087 | |
Produktion: | 1980 bis 1990er |
Produzenten: | |
Prozessortakt: | 5 MHz bis 10 MHz |
Befehlssatz: | 16 Bit x86 |
Sockel: | 40-pin DIP |
Der Intel 8087 ist eine in NMOS-Technologie (HMOS III, 3 µm)[1] gefertigte Gleitkommaeinheit (englisch floating point unit, kurz FPU). Intel entwickelte den 8087 im Jahr 1980 als x87-Koprozessor für die 8086-, 8088-, 80186- und 80188-Prozessoren.
Eigenschaften und Verwendung
Der 8087 ist die erste von Intel entworfene Gleitkommaeinheit für 16-Bit-Prozessoren. Er entlastet den Hauptprozessor bei Gleitkommazahlen-Berechnungen. Ohne Koprozessor lösen diese Gleitkommabefehle eine CPU-Exception aus, die für hauptprozessorbasierte Software-Emulation des Koprozessors durch Programme oder durch das Betriebssystem genutzt werden können. Rechnungen mit Einsatz des 8087 sind 75- bis 100-mal schneller als bei emuliertem Koprozessor.[2] Der 8087 enthält 45.000 Transistoren, hat 68 Befehle und es gibt ihn für Taktfrequenzen bis 5 (8087), 8 (8087-2) oder 10 MHz (8087-1).[1]
Alle Modelle des 8087 wurden mit einem 40-poligen Dual in-line package (DIP) ausgeliefert und arbeiten bei einer Betriebsspannung von 5 V, die maximale Leistungsaufnahme betrug etwa 2,38 W (475 mA, bei 10 MHz)[3] und lag damit über den max. 1,84 W des Intel 8086 (bei 8 MHz). Im Gegensatz zu späteren Koprozessoren, wie dem 80287, musste der 8087 mit der gleichen Frequenz wie die CPU getaktet werden. Die folgende Tabelle listet die, ebenfalls von späteren FPUs abweichende, Produktbezeichnung und deren maximale Taktfrequenzen auf:
Modell[1] | max. Takt |
---|---|
Intel 8087 | 5 MHz |
Intel 8087-1 | 10 MHz |
Intel 8087-2 | 8 MHz |
Intel 8087-3 | 4 MHz |
Intel 8087-6 | 6 MHz |
Foto des Dies eines Intel D8087
Auf dem Motherboard des IBM-PC befindet sich ein freier IC-Sockel, in den ein 8087 zur Aufrüstung gesteckt werden kann.
Der 8087 konnte auch in den Bridgeboards für den Amiga verwendet werden. Der 8087 wurde zu einem Zeitpunkt entwickelt, in dem der IEEE 754-Standard zur Darstellung festgelegt wurde. Dabei fanden Intel-Entwickler geschickte Lösungen für einige Probleme des Standards und konnte bestimmte Teile des Standards zu ihren Gunsten beeinflussen.
Nachfolgemodelle des 8087 sind der 80287, i387 und i487. Seit dem i486DX haben Intel-Prozessoren eine integrierte Gleitkommaeinheit.
Gleitkomma-Operationen in Programmen
Zu Zeiten des 8086 kam ein Großteil der Programme ohne Gleitkomma-Operationen aus, für einen weiteren Teil spielten Gleitkomma-Operationen nur eine geringe Rolle, die Anwesenheit einer FPU wurde meist nicht beachtet. Betriebssysteme wie MS-DOS nutzten nur Ganzzahlarithmetik und stellten keine Emulation zur Verfügung. Es gab allerdings auch FPU-Emulatoren, die als Gerätetreiber oder TSR-Programm geladen werden konnten und dann allen Anwendungsprogrammen zur Verfügung standen.
Für die Einbindung von Programmen mit signifikanten Gleitkommaanteilen (CAD-Programme, selbst geschriebene Rechenprogramme) gab es mehrere Möglichkeiten:
- Die Programme setzten eine FPU voraus, ohne FPU waren sie nicht lauffähig. Für Prozessoren ab dem 80286 gab es FPU-Software-Simulatoren, die vorher als TSR-Programme zu installieren waren und die solche Programme lauffähig machten, natürlich bei teilweise drastisch reduzierter Performance.[4]
- Gleitkommabefehle wurden als Funktionsaufrufe einkodiert. Eine eventuell vorhandene FPU wurde zumindest in diesem Compilat nicht berücksichtigt. Ohne FPU war die Performance allerdings deutlich besser als die aller FPU-emulierenden Versionen, da die Laufzeitinterpretation einer Emulation einen erheblichen Aufwand verursachte, der sich bei Installationen von Speichermanagern wie HIMEM.sys oder EMM386.sys noch mal deutlich erhöhte.
- Die Programme wurden mit FPU-Code kompiliert. Eine fehlende FPU erzeugte Exceptions, die vom Programm selbst abgefangen und emuliert wurden (ab 80286).
- Die Programme reservierten 11 IRQs und bauten anstelle von FPU-Code IRQ-Code ein. Während der Laufzeit wurde der Code je nach FPU (keine, 8087, 80287+) entweder als IRQ belassen, in 8087-kompatiblen Code mit notwendigen FWAITs umgepatcht oder in 80287-kompatiblen Code ohne FWAIT umgepatcht.
Opcodes Compilat Emulation 8087 80287+ Gleitkommabefehl D8 xx ...
CD 34 xx ...
CD 34 xx ...
9B D8 xx ...
(FWAIT
+ Opcode)90 D8 xx ...
(NOP
+ Opcode)Gleitkommabefehl D9 xx ...
CD 35 xx ...
CD 35 xx ...
9B D9 xx ...
(FWAIT
+ Opcode)90 D9 xx ...
(NOP
+ Opcode)Gleitkommabefehl DA xx ...
CD 36 xx ...
CD 36 xx ...
9B DA xx ...
(FWAIT
+ Opcode)90 DA xx ...
(NOP
+ Opcode)Gleitkommabefehl DB xx ...
CD 37 xx ...
CD 37 xx ...
9B DB xx ...
(FWAIT
+ Opcode)90 DB xx ...
(NOP
+ Opcode)Gleitkommabefehl DC xx ...
CD 38 xx ...
CD 38 xx ...
9B DC xx ...
(FWAIT
+ Opcode)90 DC xx ...
(NOP
+ Opcode)Gleitkommabefehl DD xx ...
CD 39 xx ...
CD 39 xx ...
9B DD xx ...
(FWAIT
+ Opcode)90 DD xx ...
(NOP
+ Opcode)Gleitkommabefehl DE xx ...
CD 3A xx ...
CD 3A xx ...
9B DE xx ...
(FWAIT
+ Opcode)90 DE xx ...
(NOP
+ Opcode)Gleitkommabefehl DF xx ...
CD 3B xx ...
CD 3B xx ...
9B DF xx ...
(FWAIT
+ Opcode)90 DF xx ...
(NOP
+ Opcode)Segment Override 36
,2E
,26
:SS:
,CS:
,ES:
, gefolgt von weiterem OpcodeCD 3C pp
,CD 3y ...
CD 3C pp
,CD 3y ...
90 90 9B
,pp Dy ...
(2×NOP
+FWAIT
, Prefix + nächster Opcode)[5]90 90 90
,pp Dy ...
(2×NOP
+NOP
, Prefix + nächster Opcode)[6]Synchronisation CPU wartet auf FPU: 9B
FWAIT
CD 3D
90 90
(2×NOP
)90 9B
(NOP
+FWAIT
)90 9B
(NOP
+FWAIT
)Spezialbefehle von Borland für sin, cos, exp, log, ...[7] CD 3E ss xx
CD 3E ss xx
?? ??
Literatur und Datenblätter
- Christian Reinsch: Der Arithmetik-Prozessor INTEL 8087: eine komplette Implementierung des vorgeschlagenen IEEE-Standards für Gleitpunktarithmetik, „Elektronische Rechenanlagen“, 23 (1981), Heft 4, S. 173–178 (doi:10.1524/itit.1981.23.16.173).
- Datenblatt: 8087 Math Coprozessor, Intel Corporation, Oktober 1989.
Weblinks
Einzelnachweise
- ↑ a b c Intel 8087 – Sammler-Webseite mit vielen Bildern
- ↑ Steve Farber: High Speed Numerics with the 80186/80188 and 8087. Hrsg.: Intel Corporation. APPLICATION NOTE 258, 1986 (PDF, 270 kB).
- ↑ https://www.cpu-world.com/CPUs/8087/Intel-D8087-1.html
- ↑ Beim 8086 war diese nicht möglich, dieser blieb bei Abarbeitung eines WAIT/FWAIT hängen und Gleitkommabefehle konnten bei Fehlen eines Koprozessores keine Exception auslösen. Dieses Feature kam erst bei 80286 dazu, dort musste dafür im MSW Bit 2 gesetzt werden (EMulation) und Bit 1 (Math Present) zurückgesetzt werden. Man findet diesen Hinweis auch in der Dokumentation von Software-Simulatoren, z. B. hier in der Doku zum EM87-Emulator
EM87 V1.46/9/90
=========
This program fully emulates the 8087 math coprocessor on 80286
and 80386 based computers. This is useful to run software that requires
the 8087/80287/80287. This program does not emulate the 80287/80387
extensions to the 8087 instruction set, but most software I have seen
only uses the 8087 instructions to be PC/XT compatible. Please note that
floating point emulation is MUCH slower than the real thing (but also
much cheaper!).
Unfortunately, this method of emulation does not work on the 8088
and 8086 based computers because these processors do not have emulation
support built in. - ↑ Segment Overrides werden vor den nächsten Gleitkomma-Maschinenbefehl verschoben, das direkt davor stehende
FWAIT
kommt an das Ende dieses Befehls. - ↑ Segment Overrides werden vor den nächsten Gleitkomma-Maschinenbefehl verschoben, das direkt davor stehende
NOP
kommt an das Ende dieses Befehls. - ↑ http://fd.lod.bz/rbil/interrup/runtime/3e.html