<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=X87</id>
	<title>X87 - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=X87"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=X87&amp;action=history"/>
	<updated>2026-05-30T07:54:24Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=X87&amp;diff=1838597&amp;oldid=prev</id>
		<title>imported&gt;Invisigoth67: typo, form</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=X87&amp;diff=1838597&amp;oldid=prev"/>
		<updated>2026-03-31T05:51:43Z</updated>

		<summary type="html">&lt;p&gt;typo, form&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{SEITENTITEL:x87}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;x87&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;numeric processor extension&amp;#039;&amp;#039;&amp;lt;ref name=&amp;quot;NPX&amp;quot;&amp;gt;{{Internetquelle |url=http://datasheets.chipdb.org/Intel/x86/808x/datashts/8087/205835-007.pdf |titel=8087 Math Coprocessor |hrsg=Intel |datum=Oktober 1989 |seiten=3 |zugriff=2018-10-04 |format=PDF |sprache=en}}&amp;lt;/ref&amp;gt;, NPX) bezeichnet eine Untermenge des [[Befehlssatz]]es der [[x86-Architektur]] für [[Gleitkommazahl|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 wesentlich (10× bis 30×) schneller erledigt werden.&lt;br /&gt;
&lt;br /&gt;
Bis zum [[Intel 80386]] bzw. i486SX wurden die x87-Befehle durch einen separaten [[Koprozessor]] implementiert. Dieser Koprozessor musste gesondert erworben und in den dafür vorgesehenen Sockel auf der [[Hauptplatine]] eingesetzt werden. Wenn der Koprozessor fehlte, mussten [[Compiler]] oder Programmierer langsame Software-Bibliotheksprozeduren aufrufen, um derartige Gleitkommaoperationen durchzuführen. Gegenüber der Emulation durch Software war die Gleitkommarechnung auf einer 80x87-FPU 75- bis 100-mal schneller.&amp;lt;ref&amp;gt;{{Literatur |Autor=STEVE FARRER |Hrsg=Intel Corporation |Titel=High Speed Numerics with the 80186/80188 and 8087 |Band=APPLICATION NOTE 258 |Datum=1986 |Online=http://www.intel.com/design/intarch/applnots/23159001.pdf | Format=PDF | KBytes=270}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In späteren [[x86-Prozessor]][[x86-Prozessor#Generationen|generationen]], aber schon ab dem (teureren) [[Intel 80486|i486DX]] war der FPU-Teil meist schon im Hauptprozessor integriert. Der Begriff &amp;#039;&amp;#039;x87&amp;#039;&amp;#039; wird aber immer noch verwendet, um die Untermenge des Befehlssatzes zu bezeichnen, die ursprünglich in den x87-Koprozessoren verarbeitet wurde. Seit der Einführung von [[Streaming SIMD Extensions 2|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.&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
Die x87-Familie verwendet keine direkt adressierbaren [[Register (Prozessor)|Register]] wie die Hauptregister der x86-Prozessoren; stattdessen bilden die x87-Register einen acht Stufen tiefen [[Stapelspeicher|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, FSUB, FSUBR, FMUL, FDIV, FDIVR, FCOM, ... nutzen ST0 und ein anderes Register ST0...ST7 (Zählung relativ zur Stackspitze ST0) bzw. einen Speicheroperanden, führen die Operation aus und schreiben das Ergebnis nach ST0. Bei Registeroperationen ist als Ziel auch der zweite Operand möglich:&lt;br /&gt;
 FADD  ST0, f32[mem]    Notation:&lt;br /&gt;
 FADD  ST0, f64[mem]    f32,f64:Gleitkommazahl&lt;br /&gt;
 FADD  ST0, i16[mem]    i16, i32: Ganzahl&lt;br /&gt;
 FADD  ST0, i32[mem]      &amp;#039;&amp;#039;(mit Anzahl der Bits)&amp;#039;&amp;#039;&lt;br /&gt;
 FADD  ST0, STn         [men]: Speicheradresse&lt;br /&gt;
 FADD  STn, ST0         STn: n-tes Register im Stack&lt;br /&gt;
 FADDP STn, ST0&lt;br /&gt;
Für die nicht kommutativen Operationen FSUB und FDIV kann mit FSUBR und FDIVR auch die Reihenfolge der Operanden vertauscht werden.&lt;br /&gt;
&lt;br /&gt;
ST0 kann daher als [[Akkumulator (Computer)|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(&amp;#039;&amp;#039;x&amp;#039;&amp;#039;) getauscht werden. Der x87-Stack kann also als sieben frei adressierbare Register und als ein Akkumulator verwendet werden. Das ist besonders auf [[Superskalarität|superskalaren]] x86-Prozessoren (wie den [[Intel Pentium|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 fxch-Befehl nicht die FPU, welche die folgenden Gleitkommaoperationen behandelt, sondern ein anderes [[Rechenwerk]] benutzt. &amp;lt;!-- Das braucht eine Quelle: Allerdings empfanden es manche Compiler-Autoren als schwierig, Code-Generatoren zu konstruieren, die x87-Instruktionen in einer performanten Reihenfolge anordnen.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die im [[Pentium MMX]] eingeführte Erweiterung der [[x86-Architektur]] namens [[Multi Media Extension|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.&lt;br /&gt;
&lt;br /&gt;
== IEEE-Kompatibilität ==&lt;br /&gt;
Die x87-Befehle sind kompatibel mit der Norm [[IEEE 754]]. Der Gleitkommaprozessor kann [[Gleitkommazahl]]en mit einfacher Genauigkeit (32 Bit, &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;real&amp;lt;/code&amp;gt; in den meisten Sprachen) doppelter Genauigkeit (64 Bit, &amp;lt;code&amp;gt;double&amp;lt;/code&amp;gt;) oder vollen 80 Bit (&amp;lt;code&amp;gt;long double&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;extended&amp;lt;/code&amp;gt;) 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 &amp;#039;&amp;#039;Rundungsmodus&amp;#039;&amp;#039; über ein Statusregister eingestellt ist. Eine Folge von arithmetischen Operationen kann sich daher leicht abweichend von strengen IEEE-754-Formaten verhalten.&amp;lt;ref&amp;gt;David Monniaux, &amp;#039;&amp;#039;[http://hal.archives-ouvertes.fr/hal-00128124/en The pitfalls of verifying floating-point computations]&amp;#039;&amp;#039;, to appear in ACM TOPLAS&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unterschiede im Ergebnis einer Berechnungskette können sich auch allein durch die Aktivierung der Optimierung beim Kompilieren ergeben.&amp;lt;ref&amp;gt;http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323&amp;lt;/ref&amp;gt; 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 [[Debugger|Debuggen]] verwendet wird.&lt;br /&gt;
&lt;br /&gt;
== x87-Koprozessoren von Intel ==&lt;br /&gt;
{{Siehe auch|Liste der x86er-Koprozessoren}}&lt;br /&gt;
&lt;br /&gt;
=== 8087 ===&lt;br /&gt;
{{Hauptartikel|Intel 8087}}&lt;br /&gt;
Der &amp;#039;&amp;#039;8087&amp;#039;&amp;#039; war der erste mathematische Koprozessor für 16-Bit-Prozessoren von Intel (der [[Intel 8231|8231]] war älter, aber für den 8-Bit-[[Intel 8080|8080]] entworfen); er wurde gebaut, um mit dem [[Intel 8088|8088]] und dem [[Intel 8086|8086]] zusammen verwendet zu werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Intel 80287 early die.JPG|mini|hochkant=1.3|Prozessorkern (Die) eines früheren Intel 80287]]&lt;br /&gt;
&lt;br /&gt;
=== 80287 ===&lt;br /&gt;
Der &amp;#039;&amp;#039;80287&amp;#039;&amp;#039; &amp;#039;&amp;#039;(i287)&amp;#039;&amp;#039; war der mathematische Koprozessor für die [[Intel 80286|Intel-80286]]-Serie. Intel und seine Konkurrenten führten später den 80287XL ein, der eigentlich ein 80387SX mit einer zum 80287 kompatiblen Pinbelegung war. Der 80287XL enthielt einen 3:2-Taktmultiplizierer, damit [[Hauptplatine]]n, die den Koprozessor mit nur zwei Drittel des CPU-Takts betrieben, die Gleitkommaeinheit mit voller (= der gleichen wie die CPU) Geschwindigkeit betreiben konnten.&lt;br /&gt;
&lt;br /&gt;
Der 80287 und 80287XL funktionierten auch mit dem [[Intel 80386|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.&lt;br /&gt;
&lt;br /&gt;
Folgende Modelle des 80287 wurden hergestellt:&lt;br /&gt;
* &amp;#039;&amp;#039;i80287-3&amp;#039;&amp;#039; (6&amp;amp;nbsp;MHz)&lt;br /&gt;
* &amp;#039;&amp;#039;i80287-6&amp;#039;&amp;#039; (6&amp;amp;nbsp;MHz)&lt;br /&gt;
* &amp;#039;&amp;#039;i80287-8&amp;#039;&amp;#039; (8&amp;amp;nbsp;MHz)&lt;br /&gt;
* &amp;#039;&amp;#039;i80287-10&amp;#039;&amp;#039; (10&amp;amp;nbsp;MHz)&lt;br /&gt;
* &amp;#039;&amp;#039;i80287-12&amp;#039;&amp;#039; (12,5&amp;amp;nbsp;MHz)&lt;br /&gt;
* &amp;#039;&amp;#039;i80287XL&amp;#039;&amp;#039; (12,5&amp;amp;nbsp;MHz, 387SX-Kern)&lt;br /&gt;
* &amp;#039;&amp;#039;i80287XLT&amp;#039;&amp;#039; (12,5&amp;amp;nbsp;MHz, Laptop-Version)&lt;br /&gt;
&lt;br /&gt;
[[Datei:Intel 80387 die.JPG|mini|hochkant=1.3|Prozessorkern (Die) eines Intel 80387DX 16-33]]&lt;br /&gt;
&lt;br /&gt;
=== 80387 ===&lt;br /&gt;
Der &amp;#039;&amp;#039;80387&amp;#039;&amp;#039; (&amp;#039;&amp;#039;387&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;i387&amp;#039;&amp;#039;) 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. Funktionsumfang (&amp;lt;code&amp;gt;FSIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FCOS&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;FSINCOS&amp;lt;/code&amp;gt; kamen hinzu) sowie erlaubter Wertebereich (&amp;lt;code&amp;gt;FPATAN&amp;lt;/code&amp;gt;: beliebige Argumente für [[Arkustangens und Arkuskotangens|arctan]](&amp;#039;&amp;#039;a&amp;#039;&amp;#039;/&amp;#039;&amp;#039;b&amp;#039;&amp;#039;) statt |&amp;#039;&amp;#039;a&amp;#039;&amp;#039;|&amp;amp;#8239;≤&amp;amp;#8239;|&amp;#039;&amp;#039;b&amp;#039;&amp;#039;|, &amp;lt;code&amp;gt;FPTAN&amp;lt;/code&amp;gt;: beliebige Argumente statt |&amp;#039;&amp;#039;x&amp;#039;&amp;#039;|&amp;amp;#8239;≤&amp;amp;#8239;π/4) wurden erweitert.&lt;br /&gt;
&lt;br /&gt;
Der i387 wurde mit [[Complementary metal-oxide-semiconductor|CMOS]]-III-Technologie in 1,5&amp;amp;nbsp;µm gefertigt, seine [[Die (Halbleitertechnik)|Die-Größe]] betrug 7&amp;amp;nbsp;mm&amp;amp;nbsp;×&amp;amp;nbsp;7,5&amp;amp;nbsp;mm.&lt;br /&gt;
&lt;br /&gt;
==== Versionen ====&lt;br /&gt;
[[Datei:Intel 387 arch.svg|mini|hochkant=2.6|i387-Mikroarchitektur mit 16-bit-[[Barrel-Shifter]] und [[CORDIC]]-Einheit]]&lt;br /&gt;
Vom i387 wurden später drei weitere Versionen hergestellt:&lt;br /&gt;
;i387DX&lt;br /&gt;
Der i387DX wurde 1989 eingeführt und war nur mit dem 386DX-Prozessor kompatibel. Er wurde mit [[CHMOS]]-IV-Technologie in 1,0&amp;amp;nbsp;µm produziert, seine Die-Größe betrug 5,5&amp;amp;nbsp;mm&amp;amp;nbsp;×&amp;amp;nbsp;5,5&amp;amp;nbsp;mm.&lt;br /&gt;
;i387SX&lt;br /&gt;
Der i387 war nur mit dem Standard-80386, der einen 32-Bit-[[Bus (Datenverarbeitung)|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 eine eigene Variante des Koprozessors, den i387SX, der mit dem schmaleren Bus des SX kompatibel war.&lt;br /&gt;
&lt;br /&gt;
Wie der i387DX wurde auch der i387SX mit CHMOS-IV-Technologie in 1,0&amp;amp;nbsp;µm gefertigt.&lt;br /&gt;
&lt;br /&gt;
;i387SL Mobile&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Der i387DX und der i387SX konnten mit einem zum Systemtakt asynchronen Takt (×0,8 bis ×1,25) betrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== 80487 ===&lt;br /&gt;
Der &amp;#039;&amp;#039;i487&amp;#039;&amp;#039; ist ein [[Gleitkommaeinheit|FPU]]-Koprozessor für den [[Intel i486|i486]]&amp;lt;nowiki /&amp;gt;SX. 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;220px&amp;quot; heights=&amp;quot;220px&amp;quot;&amp;gt;&lt;br /&gt;
 Intel 8087.jpg|8087-Koprozessor&lt;br /&gt;
 KL Intel C80287.jpg|Variante des 80287-Koprozessor&lt;br /&gt;
 KL Intel 80387.jpg|i387-Koprozessor&lt;br /&gt;
 KL Intel i487SX.jpg|487SX-Koprozessor, der letzte seiner Art&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Liste der x86er-Koprozessoren]]&lt;br /&gt;
* [[Multi Media Extension|MMX]]&lt;br /&gt;
* [[Streaming SIMD Extensions|SSE]]&lt;br /&gt;
* [[Weitek]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* [[Intel|Intel Corporation]]: [http://www.cosy.sbg.ac.at/~rkutil/dsp04/ia32sdm.pdf &amp;#039;&amp;#039;IA-32 Intel Architecture Software Developer&amp;#039;s Manual Volume 1: Basic Architecture&amp;#039;&amp;#039;], order number 253665-017.&lt;br /&gt;
* Intel Corporation: [http://www.cosy.sbg.ac.at/~rkutil/dsp04/ia32refa-m.pdf &amp;#039;&amp;#039;IA-32 Intel Architecture Software Developer&amp;#039;s Manual Volume 2A: Instruction Set Reference A–M&amp;#039;&amp;#039;] (PDF; 2,3&amp;amp;nbsp;MB), order number 253666-017.&lt;br /&gt;
* Intel Corporation: [http://www.cosy.sbg.ac.at/~rkutil/dsp04/ia32refn-z.pdf &amp;#039;&amp;#039;IA-32 Intel Architecture Software Developer&amp;#039;s Manual Volume 2B: Instruction Set Reference N-Z&amp;#039;&amp;#039;] (PDF; 1,9&amp;amp;nbsp;MB), order number 253667-017.&lt;br /&gt;
* Christian Reinsch: &amp;#039;&amp;#039;Der Arithmetik-Prozessor INTEL 8087: eine komplette Implementierung des vorgeschlagenen IEEE-Standards für Gleitpunktarithmetik&amp;#039;&amp;#039;, „Elektronische Rechenanlagen“, 23 (1981), Heft 4, S.&amp;amp;nbsp;173–178 ([[doi:10.1524/itit.1981.23.16.173]]).&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Commonscat|X87 Coprocessors|X87-Koprozessoren}}&lt;br /&gt;
* [http://www.coprocessor.info/ Coprocessor.info : x86 Coprocessor development &amp;amp; history knowledge]&lt;br /&gt;
* [https://web.archive.org/web/20180104181527/http://wiretap.area.com/Gopher/Library/Techdoc/Cpu/coproc.txt Everything you always wanted to know about math coprocessors]&lt;br /&gt;
* [https://books.google.de/books?id=YxFTezF9-sMC&amp;amp;lpg=PA1&amp;amp;hl=de&amp;amp;pg=PT308#v=onepage&amp;amp;q&amp;amp;f=false Math Coprocessors Fact or Fantasy by Winn L. Rosch, PC Mag 12 Februar 1991 S. 301 (englisch)]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Intel-Prozessor]]&lt;br /&gt;
[[Kategorie:Prozessorarchitektur nach Befehlssatz]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Invisigoth67</name></author>
	</entry>
</feed>