x87

x87

x87 bezeichnet eine Untermenge des Befehlssatzes der x86-Architektur für Gleitkommaberechnungen. Es ist die älteste Befehlssatzerweiterung für diese Architektur. Ihre Befehle sind nicht notwendig, um funktionierende Programme zu erzeugen, aber sie bieten Hardwareimplementierungen für häufige numerische Aufgaben, die damit wesentlicher schneller erledigt werden. Beispielsweise enthält der x87-Befehlssatz Befehle, die den Sinus und Kosinus eines Wertes berechnen. Bevor die x87-Befehle von den Prozessoren verarbeitet werden konnten, mussten Compiler oder Programmierer langsame Software-Bibliotheksprozeduren aufrufen, um derartige Gleitkommaoperationen durchzuführen. Diese Vorgehensweise ist in vielen preiswerten eingebetteten Systemen noch immer häufig notwendig. Alternativ wird in Systemen, die keine Gleitkommaeinheit aufweisen, Festkommaarithmetik eingesetzt, da diese in Integer-Recheneinheiten effizient implementiert werden kann.

Bis einschließlich des Intel 80486 wurden die x87-Befehle durch einen separaten Koprozessor, nach dem 80486 meist im Hauptprozessor implementiert. Der Koprozessor musste gesondert erworben werden und konnte in den dafür vorgesehenen Sockel auf der Hauptplatine eingesetzt werden. Gegenüber der Emulation durch Software war die Fließkommarechnung auf einer 80x87-FPU 75- bis 100-mal schneller.[1]

Der Begriff x87 wird immer noch verwendet, um die Untermenge des Befehlssatzes zu bezeichnen, die ursprünglich in den x87-Koprozessoren verarbeitet wurde. Seit der Einführung von SSE2 haben x87-Einheiten viel von ihrer früheren Bedeutung verloren. Für Berechnungen, die eine Mantisse von 64 Bit erfordern, wie sie mit den 80 Bit breiten x87-Registern möglich ist, sind sie aber weiterhin wichtig.

Inhaltsverzeichnis

Implementierung

Die x87-Familie verwendet keine direkt adressierbaren Register wie die Hauptregister der x86-Prozessoren; stattdessen bilden die x87-Register einen acht Stufen tiefen Stack, der von st0 bis st7 läuft. Die x87-Befehle arbeiten, indem sie Werte auf den Stack legen, dort für Berechnungen verwenden und sie wieder herunternehmen. Der x87-Koprozessor funktioniert daher ähnlich wie Taschenrechner, die für umgekehrte polnische Notation ausgelegt sind. Zweistellige Operationen wie FADD, FMUL, FCOM und so weiter können jedoch entweder st0 oder st1 implizit adressieren, oder alternativ st0 zusammen mit einem anderen Register oder einem Speicheroperanden verwenden. st0 kann daher als Akkumulator (ein Register, das sowohl Zielregister ist, als auch einen Operanden enthält) verwendet werden und es kann auch mit einem anderen Stackregister mit Hilfe des Befehls fxch st(x) getauscht werden. Der x87-Stack kann also als sieben frei adressierbare Register und als ein Akkumulator verwendet werden. Das ist besonders auf superskalaren x86-Prozessoren (wie den Pentiums ab 1993) nützlich, wo diese Exchange-Befehle so optimiert sind, dass sie nachfolgende FPU-Instruktionen nicht verzögern. Dazu wird für jeden exch-Befehl nicht die FPU, welche die folgenden Gleitkommaoperationen behandelt, sondern ein anderes Rechenwerk benutzt.

Die im Pentium MMX eingeführte Erweiterung der X86-Architektur namens MMX verwendet die gleichen physischen Register wie die Gleitkommaeinheit. Dies vereinfachte die Markteinführung von MMX, da bei einem Taskwechsel keine zusätzlichen Register gesichert werden müssen und somit keine Anpassungen im Betriebssystem für MMX notwendig sind. Es ist Aufgabe des Anwendungsprogrammes, den Prozessor vom x87- in den MMX-Modus und wieder zurück zu schalten. Allerdings sind diese Moduswechsel vergleichsweise langsam, so dass Intel und AMD bei den späteren Befehlserweiterungen (SSE und Nachfolger) einen anderen Weg gingen.

IEEE-Kompatibilität

Die x87-Befehle sind kompatibel mit der Norm IEEE 754. Der Gleitkommaprozessor kann Gleitkommazahlen mit einfacher Genauigkeit (32 Bit, float oder real in den meisten Sprachen) doppelter Genauigkeit (64 Bit, double) oder vollen 80 Bit (long double oder extended) verarbeiten. Da die Prozessoren intern die vollen 80 Bit verwenden (um den Erhalt von Genauigkeit über viele Berechnungen zu ermöglichen), werden Rundungen jedoch nicht genau so durchgeführt, wie die strikten 32- und 64-Bit-Formate des IEEE 754 es verlangen, sofern nicht ein spezieller Rundungsmodus über ein Statusregister eingestellt ist. Eine Folge von arithmetischen Operationen kann sich daher leicht abweichend von strengen IEEE-754-Formaten verhalten.[2]

Unterschiede im Ergebnis einer Berechnungskette können sich auch allein durch die Aktivierung der Optimierung beim Kompilieren ergeben.[3] Eine optimierte Version eines Programms wird also ein (in der Regel geringfügig) anderes Ergebnis liefern als eine nicht optimierte Version, wie sie oft zum Debuggen verwendet wird.

x87-Koprozessoren von Intel

8087

Ein 8087-Koprozessor
Hauptartikel: Intel 8087

Der 8087 war der erste mathematische Koprozessor für 16-Bit-Prozessoren von Intel (der I8231 war älter, aber für den 8-Bit-8080 entworfen); er wurde gebaut, um mit dem 8088 und dem 8086 zusammen verwendet zu werden.

80287

Eine Variante des 80287

Der 80287 (i287) war der mathematische Koprozessor für die Intel-80286-Serie. Intel und seine Konkurrenten führten später den 80287XL ein, der eigentlich ein 80387XS mit einer zum 80287 kompatiblen Pinbelegung war. Der 80287XL enthielt einen 3/2-Multiplizierer, damit Hauptplatinen, die den Koprozessor mit zwei Drittel der CPU-Geschwindigkeit betrieben, stattdessen die Gleitkommaeinheit mit der gleichen Geschwindigkeit wie die CPU betreiben konnten.

Der 80287 und 80287XL funktionierten auch mit dem 80386 und waren bis zur Einführung des 80387 1987 die einzigen für den 80386 erhältlichen Koprozessoren. Außerdem konnten sie auch mit dem Cyrix Cx486SLC eingesetzt werden. Jedoch wurde für beide Prozessoren aus Performancegründen und wegen der besseren Möglichkeiten des Befehlssatzes der 80387 bevorzugt.

Folgende Modelle des 80287 wurden hergestellt:

  • i80287-3 (6 MHz)
  • i80287-6 (6 MHz)
  • i80287-8 (8 MHz)
  • i80287-10 (10 MHz)
  • i80287-12 (12,5 MHz)
  • i80287XL (12,5 MHz, 387SX-Kern)
  • i80287XLT (12,5 MHz, Laptop-Version)

80387

Ein i387

Der 80387 (387 oder i387) war der erste Intel-Koprozessor, der vollständig mit der IEEE-754-Norm kompatibel war. Bei seiner Einführung 1987, volle zwei Jahre nach dem 80386, war der i387 wesentlich schneller als der 80287 und enthielt deutlich verbesserte trigonometrische Funktionen. (Der 80827 hatte für sie nur Argumente zwischen −45 und +45 Grad erlaubt.)

Der i387 wurde mit CMOS-III-Technologie in 1,5 µm gefertigt. Sein Die war 7 mm × 7,5 mm groß.

Versionen

i387-Mikroarchitektur mit 16-bit-Barrel-Shifter und CORDIC-Einheit

Vom i387 wurden später drei weitere Versionen hergestellt:

i387DX

Der i387DX wurde 1989 eingeführt und war nur mit dem 386DX-Prozessor kompatibel. Er wurde mit CHMOS-IV-Technologie in 1,0 µm produziert. Der Die des 387DX war 5,5 mm × 5,5 mm groß.

i387SX

Der i387 war nur mit dem Standard-80386, der einen 32-Bit-Prozessorbus hatte, kompatibel. Der spätere, kostenreduzierte i386SX mit einem schmaleren 16-Bit-Datenbus konnte nicht mit dem 32-Bit-Bus des i387 zusammengeführt werden. Der i386SX erforderte daher einen eigene Variante des Koprozessors, nämlich den i387SX, der mit dem schmaleren Bus des SX kompatibel war.

Wie der i387DX wurde auch der i387SX mit CHMOS-IV-Technologie in 1,0 µm gefertigt.

i387SL Mobile

Diese speziell für i386SL-Prozessoren gedachte und ebenfalls mit CHMOS-IV-Technologie produzierte Variante wurde 1992 auf den Markt gebracht und verfügt wie der i386SL über ein integriertes Power-Management.

Der i387DX und der i387SX konnten in einem zum Systemtakt asynchronen Takt (*0,8 bis *1,25) betrieben werden.

80487

Ein 487SX

Der i487 ist ein FPU-Koprozessor für den i486SX. Er war grundsätzlich ein vollständiger i486DX-Chip. Wurde er in einem i486SX-System eingebaut, schaltete der i487 den Hauptprozessor aus und übernahm sämtliche CPU-Operationen. Theoretisch konnte ein solcher Computer auch dann arbeiten, wenn der eigentliche i486SX-Prozessor entfernt worden wäre. In der Praxis verhinderte ein Pin auf dem i487 jedoch die Benutzung als vollwertigen i486.

Siehe auch

Literatur

  • Intel Corporation: IA-32 Intel Architecture Software Developer's Manual Volume 1: Basic Architecture, order number 253665-017
  • Intel Corporation: IA-32 Intel Architecture Software Developer's Manual Volume 2a: Instruction Set Reference A-M, order number 253666-017

Weblinks

 Commons: X87-Koprozessoren – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

  1. STEVE FARRER; Intel Corporation (Hrsg.): High Speed Numerics with the 80186/80188 and 8087. APPLICATION NOTE 258, 1986 (PDF, 270 kb).
  2. David Monniaux, The pitfalls of verifying floating-point computations, to appear in ACM TOPLAS
  3. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323

Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • X87 — is a math related instruction subset of the x86 architecture of processors. It is so called because initially such instructions were processed by an external coprocessor chip with a number ending in 87. Like other extensions to the basic… …   Wikipedia

  • X87 — x87  это специальный набор инструкций для работы с математическими вычислениями, являющийся подмножеством архитектуры процессоров x86. Такое название он получил, потому что первоначальные отдельные математические сопроцессорные чипы имели… …   Википедия

  • X87 — Saltar a navegación, búsqueda x87 es un subconjunto de instrucciones relacionadas con las matemáticas de la familia de procesadores x86 de Intel. Se le llama así porque inicialmente dichas instrucciones eran procesadas por un chip externo cuyo… …   Wikipedia Español

  • x87 — es un subconjunto de instrucciones relacionadas con las matemáticas de la familia de procesadores x86 de Intel. Se le llama así porque inicialmente dichas instrucciones eran procesadas por un chip externo cuyo nombre acababa en 87. Como otras… …   Wikipedia Español

  • X87 — Tabelle von Koprozessoren für die x86 CPUs: AMD Typ für CPU Eingeführt Taktfrequenzen Gehäuse Technologie Beschreibung Am80C287 …   Deutsch Wikipedia

  • x86 — This article is about Intel microprocessor architecture in general. For the 32 bit generation of this architecture which is also called x86 , see IA 32. x86 Designer Intel, AMD Bits 16 bit, 32 bit, and/or 64 bit Introduced 1978 Design …   Wikipedia

  • Математический сопроцессор — 80x287 в колодке на базовой плате персонального компьютера …   Википедия

  • 3DNow! — is the trade name of a multimedia extension created by AMD for its processors, starting with the K6 2 in 1998. It is an addition of SIMD instructions to the traditional x86 instruction set, designed to improve a CPU s ability to perform the… …   Wikipedia

  • X86-64 — is a superset of the x86 instruction set architecture. x86 64 processors can run existing 32 bit or 16 bit x86 programs at full speed, but also support new programs written with a 64 bit address space and other additional capabilities.The x86 64… …   Wikipedia

  • Control register — A control register is a processor register which changes or controls the general behavior of a CPU or other digital device. Common tasks performed by control registers include interrupt control, switching the addressing mode, paging control, and… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”