x86-Prozessor
x86 ist die Abkürzung einer Mikroprozessor-Architektur und der damit verbundenen Befehlssätze, welche unter anderem von den Chip-Herstellern Intel und AMD entwickelt werden.
Die x86-Befehlssatzarchitektur (englisch Instruction Set Architecture, kurz „ISA“) ist nach den Prozessoren der 8086/8088-Reihe benannt, mit der sie 1978 eingeführt wurde. Die ersten Nachfolgeprozessoren wurden später mit 80186, 80286 usw. benannt. In den 1980er-Jahren war daher von der 80x86-Architektur die Rede – später wurde die „80“ am Anfang weggelassen. Die x86-Architektur erweiterte sich seither mit jeder Prozessorgeneration und war mit dem 80386 1985 bereits eine 32-Bit-Architektur, die explizit auch als i386 bezeichnet wurde.
Während der Entwicklung des Itanium benannte Intel die x86-Architektur, die damals eine 32-Bit-Architektur war, retronym in „Intel Architecture 32-bit“ um, abgekürzt IA-32. Auch die retronyme Bezeichnung IA-16 für die 16-Bit-Architektur des 8086/80286 ist bekannt, fand aber keine breite Verwendung.[1] Hingegen wurden die alten Bezeichnungen „x86“ und „i386“ (für 32-Bit-x86) weiterhin genutzt.
Die Architektur des unabhängig entwickelten und nicht kompatiblen Itanium bezeichnete Intel IA-64, was auch deshalb zu Verwechslungen führen kann, weil AMD mit der 2003 erstmals verfügbaren 64-Bit-Befehlssatzerweiterung AMD64 die Befehlssatzarchitektur IA-32 ebenfalls zur 64-Bit-Architektur gemacht hat. Intel selbst ist mit Intel 64 2005 nachgezogen; dabei ist Intel 64 zu AMD64 kompatibel. Moderne 64-Bit-x86-Prozessoren sind somit weiterhin als zur IA-32-Architektur zugehörig zu bezeichnen, was seither jedoch uneindeutig ist. Um 32- und 64-Bit voneinander unterscheiden zu können, wurde in Anlehnung an „x86“ für den 64-Bit-Modus die Bezeichnungen „x64“ (für x86 mit 64 Bits) eingeführt.[2] Die retronyme Bezeichnung „x32“ (für x86 mit 32 Bits) ist eher selten anzutreffen und obendrein uneindeutig, da es sich entweder um einen 32-Bit-x86-Prozessor(-Modus) oder um 32-Bit-Adressierung auf einem im 64-Bit-Modus laufenden 64-Bit-Prozessor handeln kann.
Da sich Ziffernkombinationen nicht markenrechtlich schützen lassen, gingen Intel und die meisten Mitbewerber nach Einführung des 80486 dazu über, Wortmarken wie Pentium oder Celeron (Intel) bzw. Athlon oder Phenom (AMD) zu verwenden, aber das alte Nummernschema blieb als Name der ganzen Familie erhalten.
Geschichte
Die x86-Architektur wurde 1978 mit Intels erster 16-Bit-CPU, dem 8086, eingeführt, der die älteren 8-Bit-Prozessoren 8080 und 8085 ablösen sollte. Obwohl der 8086 anfangs nicht sonderlich erfolgreich war, stellte IBM 1981 einen PC vor, der eine abgespeckte Variante des 8086, den 8088, als CPU verwendete. Durch den enormen Erfolg des IBM PC und seiner zahlreichen Nachbauten, der sogenannten IBM-PC-kompatiblen Computer, wurde die x86-Architektur innerhalb weniger Jahre zu einer der erfolgreichsten CPU-Architekturen der Welt und ist es bis heute geblieben.
Außer Intel haben auch andere Hersteller über die Jahre x86-kompatible CPUs in Lizenz produziert, darunter Cyrix (heute VIA Technologies), NEC, UMC, Harris, TI, IBM, IDT und Transmeta. Der nach Intel größte Hersteller x86-kompatibler Prozessoren war und ist aber das Unternehmen AMD, das neben Intel heute zu einer treibenden Kraft bei der Weiterentwicklung des x86-Standards geworden ist.
Intel entwickelte den 8086 1978 in der Zeit der zu Ende gehenden 8-Bit-Ära. Mit dem 80386 führte Intel dann bereits 1985 die erste x86-CPU mit einer 32-Bit-Architektur ein. Heute ist diese Architektur unter dem Namen IA-32 bekannt (als 32-Bit-Architektur auch unter der Bezeichnung „i386“); sie ist sozusagen die Erweiterung der Befehlssätze von 8086 und 80286 auf 32 Bit, schließt deren Befehlssätze aber vollständig mit ein. Die 32-Bit-Ära war der bisher längste und lukrativste Abschnitt der x86-Geschichte, wobei sich IA-32 – maßgeblich unter Intels Federführung – permanent weiterentwickelte.
Die 64-Bit-Ära brach für x86 ab 1999 an, diesmal aber auf Initiative von AMD. Der 64-bittige x86-Standard erhielt die Bezeichnung x64 oder x86-64, wurde von AMD 2003 als AMD64 eingeführt und unter dem Namen Intel 64 2005 auch von Intel übernommen.
Die von Intel und HP in der Itanium-Produktlinie verwendete IA-64-Architektur hat mit IA-32 – inklusive x64 – nichts zu tun. Sie ist eine Neuentwicklung, die außer einer x86-Emulation (nur in der ältesten Itanium-Baureihe) keine Spuren der x86-Technik enthält. Dagegen ist IA-32 mit der 64-Bit-Erweiterung x64 weiterhin vollständig abwärtskompatibel zu 32- und 16-Bit-x86.
Nomenklatur
Die x86-Architektur hat sich von einer 16-Bit- zu einer 32-Bit- und schließlich zu einer 64-Bit-Architektur weiterentwickelt. Die Nomenklatur ist historisch gewachsen und die Bezeichnung x86 alleine steht daher meist für die zum jeweiligen Zeitpunkt aktuell in Verwendung stehende Variante.
Bezeichnungen | Architektur | |||
---|---|---|---|---|
x86 | x86-16 | 16-Bit-x86-Architektur des 8086. | ||
IA-32 | x86-32, i386, i686 | 32-Bit-x86-Architektur des 80386. | ||
x64 | x86-64, amd64 | 64-Bit-x86-Architektur des Opteron. |
Probleme ergeben sich im historischen Kontext. So kann „x86“ etwa auch die gesamte Architektur seit dem 8086 bezeichnen, aber nicht immer, denn es wurde auch zur Unterscheidung der 64-Bit-Erweiterung „x64“ für die 32-Bit-Erweiterung seit dem i386 genutzt. Dies findet sich beispielsweise im Betriebssystem Windows (ab Windows Vista), das in der 32-Bit-x86-Version die Bezeichnung „x86-basierter Prozessor“ nutzt, in der 64-Bit-x86-Version „x64-basierter Prozessor“.[3] Die allerersten Versionen von Windows waren DOS-basierte grafische Aufsätze und damit ebenfalls, wie PC-kompatibles DOS, 16-Bit-Versionen, die ab Windows /386 2.0x einige der Vorzüge von 80386-Prozessoren nutzen konnten.
Für Systeme ab den 2000er Jahren bezeichnet x86 alleine daher üblicherweise die 32-Bit-x86-Architektur ab dem i386. Für historische Zwecke hat sich retronym die Bezeichnung x86-16 für die 16-Bit-x86-Architektur etabliert.[4] Historische Systeme, z. B. von Anfang der 1990er Jahre, verstehen unter x86 alleine meist 16-Bit-x86, können aber teilweise auch den 32-Bit-Modus nutzen, wenn dieser vorhanden ist (z. B. Windows 3.x).
Benennung nach Befehlssatzerweiterung
Da sich der Befehlssatz ständig erweiterte, kann man nur von einem minimal erforderlichen Befehlssatz ausgehen, wenn man von einer x86-Befehlssatzarchitektur spricht – oder vom jeweils aktuellen Stand, mit allen möglichen Erweiterungen. In diesem Punkt ist die Bezeichnung „x86“ sehr uneindeutig. Bei der Benennung hat sich daher eine gewisse Konvention herausgebildet, die durch die geschichtliche Entwicklung begründet ist.
Jahr | erste Benennung | Alternative Benennungen | Befehlssatz | Betriebsmodi |
---|---|---|---|---|
1972 | – | IA-8 | „Intel Architecture 8-Bit“ – inoffizielle, retronyme Bezeichnung des 8-Bit-8080, dem Vorgängermodell des 8086. Diese Befehlssatzarchitektur ist nicht x86-kompatibel. | |
1978 | 8086 | 80x86, x86 | Prozessoren und Befehlssatzarchitekturen, die mit dem Intel 8086 und 8088 kompatibel sind. | Real Mode |
1982 | 80286 | i286 | Prozessoren und Befehlssatzarchitekturen, die mit dem 80286 kompatibel sind. | zusätzlich 16-Bit-Protected-Mode |
IA-16 | x86, x86-16 | „Intel Architecture 16-Bit“ – wenig verwendete retronyme Bezeichnung von 16-Bit-x86 durch Intel, also dem Befehlssatz des 8086 (Real Mode) und des 80286 (16-Bit-Protected Mode). Die Bezeichnung x86 beinhaltet in jedem Fall auch den 16-Bit-Prozessor-Modus Real Mode und ist gebräuchlicher als IA-16, zur eindeutigen Unterscheidung findet sich retronym teils x86-16. | ||
1985 | i386 | IA-32, x86-32 | 32-Bit-Befehlssatzerweiterung und -Adressierung, die mit dem 80386 eingeführt wurde. | zusätzlich 32-Bit-Protected Mode, Virtual 8086 Mode |
1989 | i486 | – | Prozessoren und Befehlssatzarchitekturen, die mit dem 80486, inklusive des mathematischen Koprozessors (i486DX), kompatibel sind. | |
x87 | 8087, 80x87 | Die Gleitkommaeinheit (FPU) als separater mathematischer Koprozessor für den 8086/8088 (8087), den 80286 (80287) und den i386 (80387 bzw. i387). Ab dem i486DX ist die Gleitkommaeinheit Teil des Prozessors, mit Ausnahme des i486SX (80487 bzw. i487, die letzte separate FPU). | ||
1993 | i586 | – | Prozessoren und Befehlssatzarchitekturen, die mit dem Pentium kompatibel sind. | wie i386 und i486, neue (optionale) SIMD-Funktionen |
1995 | i686 | P6 | Prozessoren und Befehlssatzarchitekturen, die mit dem Pentium Pro (1995) oder Pentium II (1997) kompatibel sind. Der Pentium II unterstützt bereits die MMX-Erweiterung, weshalb i686 oft zusätzlich die Vektorbeschleunigungsbefehle nutzt, wenn diese vorhanden sind. | |
IA-32 | (x32), x86-32 | „Intel Architecture 32-Bit“ – retronyme Bezeichnung von 32-Bit-x86, also dem Befehlssatz des 80386 (32-Bit-Protected Mode). „x32“ ist eine retronyme Bezeichnung für 32-Bit-x86 (abgeleitet von „x64“ für 64-Bit-x86), ist jedoch nicht weit verbreitet und außerdem uneindeutig, da es auch eine 32-Bit-Adressierung innerhalb des x64-Modus gibt (wie das x32-ABI unter Linux). „x86-32“ wird manchmal zur Bezeichnung eines 32-Bit-Prozessors verwendet (in Anlehnung an „x86-64“ für 64-Bit-x86-Prozessoren „x64“, die ebenfalls zu IA-32 zählen). | ||
2003 | amd64 | x86-64 | Prozessoren und Befehlssatzarchitekturen, die mit dem 64-Bit-Befehlssatz AMD64 des Opteron und Athlon 64 kompatibel sind. Diese beinhalten zumindest die Befehlssatzerweiterungen MMX, SSE und SSE2 sowie x87 und das NX-Bit. Im 32-Bit-Modus des Long Mode fehlt der Virtual 8086 Mode. | Legacy Mode: wie i386; Long Mode: 64-Bit Mode und (32-Bit) Compatibility Mode; SIMD-Erweiterungen |
x64 | x86-64, amd64 | x64 wurde von Microsoft und Sun zur Unterscheidung von reinem 32-Bit-x86 zu 64-Bit-x86, also IA-32 mit AMD64 oder Intel 64, eingeführt.
Die Abkürzung „x32“ steht auch für die 32-Bit-Adressierung innerhalb des 64-Bit-Long-Mode und ist dabei Teil von x64 (64-Bit-x86). | ||
Während die Befehlssatzarchitektur x86 die ungenaueste Bezeichnung darstellt, zeichnen die gelisteten genaueren Benennungen jedoch immer noch nicht präzise die vorhandenen (von einer Software benötigten) Maschinenbefehle bzw. den genauen integrierten Befehlssatz im Prozessor aus. Unter Linux hatte sich etwa die Angabe „i686-pae“ für den Pentium‑II-Befehlssatz mit PAE durchgesetzt. So gab es beispielsweise von GParted je ein 32-Bit-ISO-Abbild für „i486“ und für „i686-pae“ – hat ein Prozessor kein PAE-Flag (wie z. B. der erste Pentium M), musste man auf die i486-Variante zurückgreifen. Auch unter Windows ist nicht klar, ob die 64-Bit-Variante auch tatsächlich auf einem älteren 64-Bit-x86-Prozessor (mit AMD64- oder Intel-64-Erweiterung) läuft, da ab Windows 8.1 zusätzlich zur x64-Befehlssatzerweiterung die Funktionen CMPXCHG16b
, PrefetchW
und LAHF/SAHF
vorhanden sein müssen.[5]
Design
Die x86-Architektur verwendet einen CISC-Befehlssatz mit variabler Instruktionslänge. Speicherzugriffe in Wortgröße sind auch auf nicht Wort-ausgerichtete Speicheradressen erlaubt. Wörter werden in Little-Endian-Richtung gespeichert. Leichte Portierbarkeit von Intel-8085-Assemblercode war eine treibende Kraft der Architekturentwicklung. Dies bedingte einige nicht optimale und im Nachhinein problematische Designentscheidungen.
Heutige x86-Prozessoren sind hybride CISC/RISC-Prozessoren, denn sie übersetzen den x86-Befehlssatz zunächst in RISC-Mikro-Instruktionen konstanter Länge, auf die moderne mikro-architektonische Optimierungen angewendet werden können. Die Übergabe erfolgt zunächst an sogenannte Reservierungsstationen, das heißt an kleine Puffer, die den verschiedenen Rechenwerken vorgeschaltet sind. Der erste hybride x86-Prozessor war der Pentium Pro.
Real Mode
Die Intel 8086 und 8088 hatten 14 16-Bit-Register. Vier von ihnen (AX
, BX
, CX
, DX
) waren Mehrzweck-Register. Zusätzlich hatte jedes noch eine Sonderfunktion:
AX
(engl. accumulator register) diente als bevorzugtes Ziel für RechenoperationenBX
(engl. base register) diente zur Adressierung der Anfangsadresse einer DatenstrukturCX
(engl. count register) diente als Zähler für Schleifen (loop-Instruktion) und VerschiebeoperationenDX
(engl. data register) diente als Datenregister für den zweiten Operanden.
Auf jedes Register konnte mittels zwei separater Bytes zugegriffen werden (das hohe Byte in BX
unter dem Namen BH
, das niederwertige Byte als BL
). Von den zwei Zeigerregistern zeigt SP
(„StackPointer“) auf das oberste Element des Stacks und BP
(„BasePointer“) kann auf einen anderen Platz im Stack oder Speicher zeigen (häufig wird BP
als Zeiger auf einen Funktionsrahmen verwendet). Die beiden Index-Register SI
(„SourceIndex“) und DI
(„DestinationIndex“) können für Blockoperationen oder zusammen mit SP
oder BP
als Index in einem Array benutzt werden. Zusätzlich gibt es die vier Segmentregister CS
(„Codesegment“), DS
(„DataSegment“), SS
(„StackSegment“) und ES
(„ExtraSegment“), mit denen jeweils die Basisadresse für ein 64 kB großes Speichersegment festgelegt wird. Außerdem gibt es das Flag-Register, das Flags wie carry, overflow, zero usw. enthalten kann, und den Instruction Pointer (IP
), der auf die gegenwärtige Instruktion zeigt.
Im Real Mode ist der Speicherzugriff „segmentiert“. Dies geschieht, indem die Segmentadresse um 4 Bit nach links geschoben wird und ein Offset addiert wird, so dass eine 20-Bit-Adresse entsteht. Der gesamte Adressraum im Real Mode ist also 220 Byte (1 Megabyte), was 1978 sehr viel war. Es gibt zwei Adressierungs-Modi: near und far (engl. für nah und fern). Im Far Mode werden sowohl das Segment als auch der Offset angegeben. Im Near Mode wird nur der Offset angegeben, und das Segment wird einem Register entnommen. Für Daten ist dies DS
, für Code CS
und für den Stack SS
. Wenn DS
zum Beispiel A000h und SI
5677h ist, zeigt DS:SI
auf die absolute Adresse DS
× 16 + SI
= A5677h.
In diesem Schema können unterschiedliche Segment/Offset-Paare auf dieselbe absolute Adresse zeigen. Wenn DS
A111h und SI
4567h ist, zeigt DS:SI
ebenfalls auf die obige Adresse A5677h. Das Schema sollte die Portierbarkeit von Intel-8085-Code erleichtern, doch erschwerte es letztlich die Arbeit der Programmierer.
Zusätzlich hatte der i8086 64 kB von 8-Bit-I/O-Adressraum (alternativ auch 32 kB mit 16 Bit) sowie einen hardwareunterstützten Stack von ebenfalls 64 kB. Nur Wörter (2 Byte) können auf dem Stack abgelegt werden. Der Stack wächst zu niedrigeren Adressen hin und SS:SP
zeigt auf das zuletzt auf den Stack gelegte Wort (die niedrigste Adresse). Es gibt 256 Interrupts, die sowohl von Hardware als auch Software ausgelöst werden können. Die Interrupts können kaskadieren und benutzen den Stack, um die Rücksprungadresse zu speichern.
Protected und Enhanced Mode
Der Intel-80286-Prozessor kannte einen weiteren Arbeitsmodus, den „Protected Mode“. Durch Integration einer MMU (engl. “Memory Management Unit” für Speicherverwaltungseinheit) auf dem Chip konnten im Protected Mode bis zu 16 MB Speicher adressiert werden. Ein spezielles MMU-Register zeigt dabei auf eine Segmenttabelle im Hauptspeicher, in der die 24-Bit-Basisadressen der Segmente festgelegt wurden. Die Segmentregister dienten dann lediglich als Index in diese Segment-Tabelle. Zusätzlich konnte jedem Segment einer von vier Privilegien-Levels zugeordnet werden („Ringe“ genannt). Insgesamt bedeuteten diese Neuerungen eine Verbesserung. Allerdings war Software für den Protected Mode inkompatibel mit dem Real Mode des 8086-Prozessors.
Der Intel 80386 brachte den wahrscheinlich größten Sprung für die x86-Architektur. Mit Ausnahme des „Intel i386SX“, der nur 24-Bit-Adressierung unterstützte und einen 16-Bit-Datenbus hatte, waren alle i386-Prozessoren vollständig 32-Bit-fähig – Register, Instruktionen, E/A-Raum und Speicher. Bis zu 4 GB Speicher konnten angesprochen werden. Dazu wurde der Protected Mode zum „32-Bit-Enhanced-Mode“ erweitert. Wie auf dem 80286 wurden auch im Enhanced Mode die Segmentregister als Index in einer Segmenttabelle verwendet, die die Aufteilung des Speichers beschrieb. Allerdings konnten in jedem Segment 32-Bit-Offsets verwendet werden. Dies führte zum sogenannten „Flat Memory Model“, bei dem jedem Prozess nur noch ein 4-GB-Datensegment und ein 4-GB-Codesegment zur Verfügung gestellt wird. Beide Segmente beginnen ab der Adresse 0
und sind 4 GB groß. Die eigentliche Speicherverwaltung wird dann nur noch durch das ebenfalls mit dem 80386er eingeführte Paging durchgeführt, einem Mechanismus, der den gesamten Speicher in gleich große Teile (engl. Pages, also Speicherseiten) einteilt und pro Prozess eine beliebige Abbildung zwischen logischen und physischen Adressen ermöglicht, was die Realisierung von virtuellem Speicher stark vereinfacht hat. Es wurden keine neuen Mehrzweck-Register hinzugefügt. Allerdings wurden bis auf die Segmentregister alle Register auf 32 Bit verbreitert. Das erweiterte Register AX
hieß fortan EAX
, aus SI
wurde ESI
usw. Zwei neue Segmentregister namens FS
und GS
kamen noch hinzu.
Die grundlegende Architektur des i386-Prozessors wurde zur Basis aller weiteren Entwicklungen in der x86-Architektur und retronym IA-32 bezeichnet. Alle späteren 32-Bit-x86-Prozessoren funktionieren nach dem Prinzip des Intel 80386.
Der bis dato separate mathematische Coprozessor 80387 wurde ab der nächsten CPU, dem „Intel 80486“, direkt in den Prozessor integriert (mit Ausnahme des 486SX, welcher keinen Coprozessor besitzt). Mit diesem Coprozessor konnten Gleitkommaberechnungen in Hardware durchgeführt werden. Ohne ihn mussten diese auf Berechnungen mit ganzen Zahlen abgebildet werden (Emulation). Nicht nur werden so recht viele Befehle pro Gleitkommaoperation benötigt, auch treten dabei häufig Schleifen und Verzweigungen auf, sodass Gleitkommaoperationen ohne den Coprozessor vergleichsweise sehr langsam ausgeführt wurden.
Register
- AX/EAX/RAX: Akkumulator
- BX/EBX/RBX: Basis
- CX/ECX/RCX: Zähler
- DX/EDX/RDX: Daten/Allzweck
- SI/ESI/RSI: Quellindex (Zeichenketten)
- DI/EDI/RDI: Zielindex (Zeichenketten)
- SP/ESP/RSP: Stapelzeiger
- BP/EBP/RBP: Stapelsegment (Anfangsadresse)
- IP/EIP/RIP: Befehlszeiger
MMX und 3DNow!
1996 führte Intel die MMX-Technik ein (englisch Matrix Math Extensions, besonders vom Marketing aber auch häufig Multi-Media Extensions tituliert). MMX definierte 8 neue SIMD-Register von 64 Bit Breite, die allerdings denselben Speicherplatz wie die Register der Floating Point Unit (FPU) benutzten. Dies verbesserte zwar die Kompatibilität zu bestehenden Betriebssystemen, die beim Umschalten zwischen verschiedenen Anwendungen weiterhin nur die altbekannten FPU-Register sichern mussten. Aber zwischen MMX und FPU musste aufwendig umgeschaltet werden. Dazu kam, dass MMX auf Integer-Operationen beschränkt war und lange Zeit von den Compilern nicht richtig unterstützt wurde. Insbesondere Microsoft tat sich schwer, den hauseigenen Compiler wenigstens mit Unterstützung für MMX-Intrinsics auszustatten. MMX wurde daher nur relativ selten verwendet, am ehesten noch für 2D-Videobearbeitung, Bildbearbeitung, Videowiedergabe usw.
1997 erweiterte AMD den MMX-Befehlssatz um Gleitkomma-Operationen für Gleitkommazahlen einfacher Genauigkeit und nannte die so entstandene Technik 3DNow. Dies löste zwar nicht die Compiler-Probleme, aber 3DNow! ließ sich im Unterschied zu MMX für 3D-Spiele verwenden, die auf schnelle Gleitkomma-Operationen angewiesen sind. Spieleentwickler und Hersteller von 3D-Grafikprogrammen verwendeten 3DNow!, um die Anwendungsperformance auf AMDs K6- und Athlon-Prozessoren zu verbessern.
Streaming SIMD Extensions
Befehlssatz | Instruktionen | |
---|---|---|
Anzahl | Summe | |
x86 (Basis) | 80 | 80 |
MMX | 57 | 140 |
SSE | 70 | 200 |
SSE2 | 144 | 350 |
SSE3 | 13 | 360 |
SSSE3 | 16 | 380 |
SSE4 | 54 | 430 |
SSE5 | 47 | 480 |
1999 brachte Intel mit dem Pentium-III-Prozessor den SSE-Befehlssatz. Wie AMD fügte Intel hauptsächlich Gleitkomma-SIMD-Befehle hinzu. Des Weiteren schuf man für SSE eine separate Funktionseinheit auf dem Prozessor mit 8 neuen 128-Bit-Registern (XMM0 bis XMM7), die sich nicht mehr mit den Gleitkommaregistern überlagerten. Da diese neuen Register aber auch bei einem Kontextwechsel vom Betriebssystem gesichert werden müssen, wurde eine Sperre in der CPU implementiert, die erst von SSE-fähigen Betriebssystemen freigeschaltet werden muss, um die SSE-Register in Anwendungsprogrammen verfügbar zu machen.
AMD-Prozessoren unterstützten anfänglich nur die 64-Bit-Befehle der Erweiterung, welche in der MMX-Funktionseinheit arbeiten, da die separate Funktionseinheit komplett fehlte. Ein Großteil dieser Befehle arbeitet nur mit Daten vom Typ Integer, deshalb existiert auch die Bezeichnung ISSE, wobei I für Integer steht. Ab dem Athlon-XP-Prozessor wird SSE komplett unterstützt.
SSE2, von Intel 2001 mit dem Pentium 4 eingeführt, fügte erstens weitere Ganzzahlbefehle für die SSE-Register hinzu und zweitens 64-Bit-SIMD-Gleitkomma-Befehle. Erstere machten MMX fast obsolet, und letztere erlaubten auch konventionellen Compilern, SIMD-Instruktionen zu verwenden. Daher wählte AMD mit der Einführung der 64-Bit-Erweiterung SSE2 als integralen Bestandteil der AMD64-Architektur aus, sodass alle 64-Bit-x86-Prozessoren diese Erweiterung unterstützen (AMD-Prozessoren ab Athlon64).
Mit der Prescott-Revision des Pentium 4 lieferte Intel ab 2004 SSE3 aus, das hauptsächlich Speicher- und Threadmanagement-Instruktionen liefert, um die Leistung von Intels Hyper-Threading-Technik zu steigern.
AMD beherrscht seit den Athlon-64-Prozessoren mit den Kernen Venice und San-Diego ebenfalls den Befehlssatz SSE3.
64 Bit
Um das Jahr 2002 erreichte der Speicherausbau moderner x86-Rechner die durch die 32-Bit-Adressengröße bedingte Adressierungsgrenze der x86-Befehlssatzarchitektur von 4 GB. Zwar hatte Intel mit PAE bereits mit dem Pentium Pro eine Möglichkeit eingeführt, mehr als 4 GB Arbeitsspeicher zu adressieren, allerdings war dessen Nutzung programmtechnisch aufwendig und der pro Prozess nutzbare Speicher blieb auch so nach wie vor auf maximal 4 GB beschränkt.
Intel wollte ursprünglich den Sprung auf 64 Bit mit einer neuen Prozessorarchitektur namens Itanium vollziehen und bezeichnete diese daher als „Intel Architecture 64-Bit“ (IA-64). Die Itanium-Architektur konnte sich allerdings nur als Nischenprodukt im Marktsegment der Server und Workstations etablieren. AMD hingegen erweiterte ab 1999 die bestehende 32-Bit-x86-Prozessorarchitektur „Intel Architecture 32-Bit“ – IA-32 bzw. 32-Bit-x86 ab dem i386 – auf 64 Bit und nannte diese Erweiterung während der Entwicklung „x86-64“, bei der Veröffentlichung 2003 schließlich AMD64. Intel übernahm große Teile dieser Erweiterung unter der Bezeichnung Intel 64 (ab 2005). 64-Bit-x86-Prozessoren beruhen daher auf AMD64, Intel 64 ist dazu weitestgehend kompatibel. Als allgemeine Bezeichnung dafür hat sich x64 durchgesetzt, teilweise auch der ursprüngliche Entwicklungsname x86-64.
Virtualisierung
Obwohl die Virtualisierung eines x86-Prozessors aufgrund der umfassenden Architektur aufwendig ist, gibt es mehrere Produkte, die einen virtuellen x86-Prozessor zur Verfügung stellen, darunter VMware und Hyper-V oder auch Open-Source-Software wie Xen oder VirtualBox. Hardwareseitige Virtualisierung gibt es auch als Erweiterung, sie wird bei Intel „Intel VT“ (für Virtualization Technology), bei AMD „AMD Virtualization“ genannt.
AVX – Advanced Vector Extensions
Im Jahr 2008 sollten die SIMD-Erweiterungen nach MMX, SSE 1-4 wieder erweitert werden und Intel schlug „AVX“ vor. AVX wurde erstmals 2011 in der SandyBridge-Mikroarchitektur realisiert. Gegenüber SSE wurde die Wortbreite für Daten und Register auf 256 Bit verdoppelt. Es kamen viele neue Befehle hinzu, die als 256-Bit-Erweiterungen der SSE-Befehle verwendet werden können. Mit der nächsten Überarbeitung der Mikroarchitektur, der Haswell-Mikroarchitektur, wurde AVX wieder um neue Befehle erweitert, fortan AVX-2 genannt, und kann fast alle SSE-Befehle in einer 256-Bit-Erweiterung bieten.
Da im High-Performance-Computing mittlerweile die Energieeffizienz immer wichtiger wird und das SIMD-Konzept Fortschritte ermöglicht, wurde für die Intel Xeon Phi genannten Rechenbeschleunigerkarten (ebenfalls 2013) AVX nochmals komplett überarbeitet, die Daten- und Registerbreite auf 512 Bit verdoppelt und die Anzahl der Register auf 32 verdoppelt. Diese Erweiterung nennt Intel AVX-512. Sie besteht aus mehreren spezifizierten Gruppen von neuen Befehlen, die nicht alle gleich realisiert werden. Die zweite Xeon Phi-Generation („Knights Corner“) erhielt die „Foundation“-, die dritte Generation („Knights Landing“) 2016 zusätzlich „CD“-, „ER“- und „PF“-Erweiterungen.
Für die für 2017 angekündigte Skylake-Xeon-Server-Generation EP/EX wurde AVX-512 ebenfalls angekündigt.
Übersicht der x86er-Generationen
Prominente CPU-Typen (Endnutzerbereich) | Erstmals eingeführt |
Linearer / physischer Adressraum |
Bedeutende neue Eigenschaften |
---|---|---|---|
Intel 8086, Intel 8088 | 1978 | 16-bit / 20-bit (segmentiert) | erster x86 Mikroprozessor |
Intel 80186, Intel 80188, NEC V20/V30 | 1982 | schnellere Speicheradress-Auflösung, MUL/DIV-Anweisung | |
Intel 80286 | 16-bit (30-bit virtuell) / 24-bit (segmentiert) | MMU, für den Protected Mode und einen größeren Adressraum | |
Intel 80386, AMD Am386 | 1985 | 32-bit (46-bit virtuell) / 32-bit | 32-bit Befehlssatz, MMU mit paging |
Intel 486, AMD Am486 | 1989 | RISC-ähnliches pipelining, integrierte FPU, on-chip Cache | |
Pentium, Pentium MMX, Rise mP6 | 1993 | Superskalarität, 64-bit breiter Datenbus, schnellere FPU (Pipeline), SIMD für Integerdaten mit MMX | |
Cyrix 6x86, Cyrix MII, Cyrix III Joshua (2000) | 1996 | Register Renaming, Spekulative Befehlsausführung | |
Pentium Pro, AMD K5, Nx586 (1994) | 1995 | 32-bit / 32-bit physisch (36-bit mit PAE) | µ-Instruktionsumsetzung, PAE (Pentium Pro), integrierter L2-Cache (Pentium Pro), conditional move instructions (CMOV etc.) |
AMD K6/-2/3, Pentium II/III, IDT/Centaur-C6 | 1997 | L3-cache Unterstützung, SIMD für Gleitkommadaten: AMD 3DNow, Intel SSE | |
Athlon, Athlon XP | 1999 | superskalare FPU, drei parallele Integer-Pipelines (bis zu drei x86 instr./clock) | |
Pentium 4 | 2000 | lange Pipelines, optimiert für sehr hohe Taktfrequenzen, SSE2, Hyper-Threading | |
Pentium M, VIA C7 (2005), Intel Core (2006) | 2003 | optimiert für eine geringe Verlustleistung | |
Athlon 64, Opteron | 2003 | 64-bit / 40-bit physisch in den ersten AMD-Implementierungen. | AMD64, on-die memory controller, HyperTransport |
Pentium 4 Prescott 2M/Cedar Mill | 2004 | sehr lange Pipelines, ausgelegt für sehr hohe Taktfrequenzen, SSE3, 64-bit (nur für Sockel LGA 775) | |
Intel Core 2 | 2006 | energieeffizient, multicore, mittellange Pipeline, ausgelegt für geringere Taktfrequenzen als der P4, SSE4 (Penryn) | |
AMD Phenom | 2007 | 64-bit / 48-bit physisch im AMD Phenom | monolithischer Vierkerner, 128 bit FPUs, SSE4a, HyperTransport 3 oder QuickPath, integrierter Speicherkontroller, on-die L3 cache, SMT (nur bei i7), modulares Design |
Intel Core i3, Intel Core i5, Intel Core i7 | 2008 | ||
Intel Atom | In-order Befehlsausführung, pipelined, sehr energieeffizient | ||
VIA Nano | Out-of-order-Befehlsausführung, superskalar, hardware encryption, sehr energieeffizient, adaptives Power Management | ||
AMD Bobcat | 2011 | ||
Intel Sandy Bridge | 2010 | 64-bit | Advanced Vector Extensions, AES-NI (Hardware-beschleunigte Verschlüsselung), SMT (nur bei i7), sehr modulares Design, CMT (Nur bei Bulldozer basierten Prozessoren), FMA (nur bei Bulldozer-Prozessoren) |
AMD Bulldozer | 2011 | ||
AMD Jaguar | 2013 | 64-bit / 40-bit physisch | AVX, AES, SSEx, sehr niedrige Leistungsaufnahme, erste HSA Features |
Intel Haswell | 2013 | 64-bit | AVX2, FMA3, Iris Pro Grafik |
AMD Steamroller | 2014 | verbessertes CMT, doppelt so viele Decoder wie Bulldozer | |
Intel Skylake-X | 2015 | AVX-512 (nicht in allen Modellen) | |
AMD Excavator | 2015 | AVX2, deutlich besseres CMT, 1,5 mal so viele Decoder wie Steamroller | |
Hersteller
x86-kompatible Prozessoren wurden von vielen Firmen entwickelt und hergestellt, darunter:
- AMD
- Centaur Technology
- Chips & Technologies
- Cyrix
- DMP Electronics
- Harris Semiconductor
- IBM
- Intel
- KME (U80601)
- National Semiconductor
- NEC Corporation
- NexGen
- Rise Technology
- Shanghai Zhaoxin Semiconductor[6]
- SGS-Thomson
- Siemens
- SiS
- Texas Instruments
- Transmeta
- UMC
- VIA Technologies
Siehe auch
- Liste der Mikroprozessoren von AMD
- Liste der Mikroprozessoren von Intel
- Liste der x86er-Koprozessoren
- ALU
- 16-Bit-Architektur (ab Intel 8086)
- 32-Bit-Architektur (ab Intel 80386)
- 64-Bit-Architektur (ab AMD Opteron)
- Ring CPU
Weblinks
- Großes INTEL CPU Archiv – Viele Bilder und Infos
- sandpile.org – Umfangreiches Archiv für x86-bezogene Dokumentation
- cpu-collection.de – Umfangreiche Prozessor-Sammlung
- Assembler x86-Befehlslisten/OpCode und Beschreibungen
- i8086.de 8086/88 Assembler Befehlsreferenz
- Der x86-Prozessor wird 30 – wie Intel dank IBM alle Gipfel stürmte
Einzelnachweise
- Rask Ingemann Lambertsen: Re: New back end ia16: 16-bit Intel x86. In: gcc-patches@gcc.gnu.org mailing list. 1. August 2007, abgerufen am 20. November 2016 (englisch): „It is also clear from the search results that outside of Intel, IA16 or IA-16 means the 16-bit x86 family members i8086-i80286 and IA32 or IA-32 means x86 family members starting with the i80386.“
- Christof Windeck: 64-Bit-Namen. In: Heise online. 28. April 2008. Abgerufen am 19. November 2016.; Zitat: „In Bezug auf x86-Prozessoren mit 64-Bit-Erweiterung meinen x86-64, AMD64, EM64T, Intel 64 und x64 praktisch dasselbe.“.
- Tim Aschermann: Unterschied zwischen x64 und x86. In: Chip. 10. Januar 2017, abgerufen am 14. Mai 2021: „Ob Sie ein x64- oder x86-Prozessor verbaut haben, können Sie in der Systemsteuerung unter dem Menüpunkt „System und Sicherheit“ und anschließend unter dem Punkt „System“ herausfinden.“
- Questions tagged [x86-16]. Online-Community. In: Stack Overflow. Abgerufen am 14. Mai 2021 (englisch): „For programming and/or microarchitecture questions about the 16-bit x86 Intel CPUs, including the 8088, 8086, and later chips running in 16-bit mode.“
- Windows 8 Systemanforderungen. Microsoft, abgerufen am 20. November 2016.
- Martin Fischer: Ohne Meltdown-Lücke: Chinesische x86-Prozessoren KX-5000 vorgestellt, Angriff auf AMDs ZEN 2 mit KX-7000 geplant. In: heise-online.de. 23. Januar 2018, abgerufen am 23. Januar 2018.