x86 - x86

x86
Designer Intel , AMD
Bits 16-Bit , 32-Bit und 64-Bit
Eingeführt 1978 (16-Bit), 1985 (32-Bit), 2003 (64-Bit)
Entwurf CISC
Typ Registrieren–Speicher
Codierung Variabel (1 bis 15 Byte)
Verzweigung Bedingungscode
Endianität Wenig
Seitengröße 8086i286 : Keine
i386 , i486 : 4 KB Seiten
P5 Pentium : 4 MB Seiten hinzugefügt
(Legacy PAE : 4 KB → 2 MB)
x86-64 : 1 GB Seiten hinzugefügt
Erweiterungen x87 , IA-32 , x86-64 , MMX , 3DNow! , SSE , MCA , ACPI , SSE2 , NX - Bit , SSE3 , SSSE3 , SSE4 , SSE4.2 , AES-NI , CLMUL , RDRAND , SHA , MPX , SME , SGX , XOP , F16C , ADX , BMI , FMA , AVX , AVX2 , AVX512 , VT-x , VT-d , AMD-V , AMD-Vi , TSX , ASF , TXT
Offen Teilweise. Für einige erweiterte Funktionen erfordert x86 möglicherweise eine Lizenz von Intel; x86-64 erfordert möglicherweise eine zusätzliche Lizenz von AMD. Der Prozessor 80486 ist seit mehr als 30 Jahren auf dem Markt und kann daher nicht Gegenstand von Patentansprüchen sein. Die Teilmenge der x86-Architektur vor 586 ist daher vollständig offen.
Register
Allgemeiner Zweck
  • 16-Bit: 6 semi-dedizierte Register, BP und SP sind nicht universell einsetzbar
  • 32-Bit: 8 GPRs, einschließlich EBP und ESP
  • 64-Bit: 16 GPRs, einschließlich RBP und RSP
Gleitkomma
  • 16-Bit: optional separate x87- FPU
  • 32-Bit: optional separate oder integrierte x87- FPU, integrierte SSE- Einheiten in späteren Prozessoren
  • 64-Bit: integrierte x87- und SSE2- Einheiten, spätere Implementierungen erweitert auf AVX2 und AVX512
Die x86-Architekturen basierten auf dem Intel 8086-Mikroprozessorchip, der erstmals 1978 veröffentlicht wurde.
Intel Core 2 Duo, ein Beispiel für einen x86-kompatiblen 64-Bit-Multicore-Prozessor
AMD Athlon (frühe Version), eine technisch andere, aber vollständig kompatible x86-Implementierung

x86 ist eine Familie von Befehlssatzarchitekturen, die ursprünglich von Intel auf der Grundlage des Intel 8086- Mikroprozessors und seiner 8088- Variante entwickelt wurde. Der 8086 wurde 1978 als vollständige 16-Bit- Erweiterung des 8-Bit- 8080- Mikroprozessors von Intel eingeführt , mit Speichersegmentierung als Lösung, um mehr Speicher zu adressieren, als von einer einfachen 16-Bit-Adresse abgedeckt werden kann. Der Begriff "x86" entstand, weil die Namen mehrerer Nachfolger von Intels 8086-Prozessor auf "86" enden, darunter die Prozessoren 80186 , 80286 , 80386 und 80486 .

Im Laufe der Jahre wurden dem x86-Befehlssatz viele Ergänzungen und Erweiterungen hinzugefügt, fast durchgehend mit vollständiger Abwärtskompatibilität . Die Architektur wurde in Prozessoren von Intel, Cyrix , AMD , VIA Technologies und vielen anderen Firmen implementiert ; es gibt auch offene Implementierungen, wie die Zet SoC- Plattform (derzeit inaktiv). Von diesen besitzen jedoch nur Intel, AMD, VIA Technologies und DM&P Electronics x86-Architekturlizenzen, und von diesen produzieren nur die ersten beiden aktiv moderne 64-Bit-Designs.

Der Begriff ist nicht gleichbedeutend mit IBM PC-Kompatibilität , da dies eine Vielzahl anderer Computerhardware impliziert ; eingebettete Systeme und Allzweckcomputer verwendeten x86-Chips, bevor der PC-kompatible Markt begann , einige davon vor dem Debüt von IBM PC (1981).

Ab 2021 basieren die meisten verkauften PCs , Laptops und Spielekonsolen auf der x86-Architektur, während mobile Kategorien wie Smartphones oder Tablets von ARM dominiert werden ; am oberen Ende dominiert x86 weiterhin die rechenintensiven Workstation- und Cloud-Computing- Segmente, während der schnellste Supercomputer ARM-basiert ist und die Top 4 nicht mehr x86-basiert sind.

Überblick

In den 1980er und frühen 1990er Jahren, als 8088 und 80286 noch gebräuchlich waren, stand der Begriff x86 normalerweise für jede 8086-kompatible CPU. Heute impliziert x86 jedoch meist eine Binärkompatibilität auch mit dem 32-Bit- Befehlssatz des 80386. Dies liegt daran, dass dieser Befehlssatz für viele moderne Betriebssysteme so etwas wie der kleinste gemeinsame Nenner geworden ist und wahrscheinlich auch daran, dass die Begriff wurde nach der Einführung des 80386 im Jahr 1985 gebräuchlich .

Einige Jahre nach der Einführung der 8086 und 8088 hat Intel sein Namensschema und seine Terminologie etwas komplexer gemacht, da der "iAPX" des ehrgeizigen, aber unglücklichen Intel iAPX 432- Prozessors auf der erfolgreicheren 8086 -Chipfamilie ausprobiert wurde als eine Art Präfix auf Systemebene. Ein 8086- System mit Coprozessoren wie 8087 und 8089 und einfacheren Intel-spezifischen Systemchips wurde dabei als iAPX 86- System bezeichnet . Es gab auch die Begriffe iRMX (für Betriebssysteme), iSBC (für Einplatinencomputer) und iSBX (für Multimodulplatinen basierend auf der 8086-Architektur), alle zusammen unter der Überschrift Microsystem 80 . Dieses Namensschema war jedoch ziemlich vorübergehend und dauerte in den frühen 1980er Jahren einige Jahre.

Obwohl der 8086 hauptsächlich für eingebettete Systeme und kleine Mehrbenutzer- oder Einzelbenutzer-Computer entwickelt wurde, hauptsächlich als Reaktion auf den erfolgreichen 8080-kompatiblen Zilog Z80 , wuchs die x86-Linie bald in Bezug auf Funktionen und Verarbeitungsleistung. Heute ist x86 sowohl in stationären als auch tragbaren PCs allgegenwärtig und wird auch in Midrange-Computern , Workstations , Servern und den meisten neuen Supercomputer- Clustern der TOP500- Liste verwendet. Eine große Menge an Software , einschließlich einer großen Liste von x86-Betriebssystemen, verwenden x86-basierte Hardware.

Modernes x86 ist jedoch in eingebetteten Systemen relativ selten , und kleine Anwendungen mit geringem Stromverbrauch (mit winzigen Batterien) und Märkte für kostengünstige Mikroprozessoren, wie Haushaltsgeräte und Spielzeug, haben keine nennenswerte x86-Präsenz. Einfache 8- und 16-Bit - basierten Architekturen sind häufig hier, obwohl die x86-kompatiblen VIA C7 , VIA Nano , AMD ‚s Geode , Athlon Neo und Intel Atom sind Beispiele für 32- und 64-Bit - Designs in einigen verwendet relativ niedrigem Strom- und Low-Cost-Segmente.

Es gab mehrere Versuche, auch von Intel, die Marktdominanz der "unleganten" x86-Architektur zu beenden, die direkt aus den ersten einfachen 8-Bit-Mikroprozessoren entwickelt wurde. Beispiele hierfür sind der iAPX 432 (ein Projekt, das ursprünglich als Intel 8800 bezeichnet wurde ), das Intel 960 , das Intel 860 und die Intel/Hewlett-Packard Itanium- Architektur. Die kontinuierliche Weiterentwicklung von x86- Mikroarchitekturen , Schaltungen und Halbleiterfertigung würde es jedoch in vielen Segmenten schwierig machen, x86 zu ersetzen. AMDs 64-Bit-Erweiterung von x86 (auf die Intel schließlich mit einem kompatiblen Design reagierte) und die Skalierbarkeit von x86-Chips in Form moderner Multi-Core-CPUs unterstreichen x86 als Beispiel dafür, wie die kontinuierliche Weiterentwicklung etablierter Industriestandards widerstehen kann die Konkurrenz durch völlig neue Architekturen.

Chronologie

Die folgende Tabelle listet Prozessormodelle und Modellreihen, die Variationen des x86- Befehlssatzes implementieren , in chronologischer Reihenfolge auf. Jeder Artikel zeichnet sich durch deutlich verbesserte oder kommerziell erfolgreiche Prozessor- Mikroarchitektur- Designs aus.

Chronologie der x86-Prozessoren
Generation Einführung Prominente CPU-Modelle Adressraum Bemerkenswerte Funktionen
Linear Virtuell Physisch
x86 1 1978 Intel 8086 , Intel 8088 (1979) 16-Bit N / A 20-Bit 16-Bit- ISA , IBM-PC (8088), IBM-PC/XT (8088)
1982 Intel 80186 , Intel 80188
NEC V20 /V30 (1983)
8086-2 ISA, eingebettet (80186/80188)
2. Intel 80286 und Klone 30-Bit 24-Bit geschützter Modus , IBM PC/XT 286 , IBM PC/AT
3. ( IA-32 ) 1985 Intel 80386 , AMD Am386 (1991) 32-Bit 46-Bit 32-Bit 32-Bit- ISA , Paging, IBM PS/2
4. (Pipeline, Cache) 1989 Intel 80486
Cyrix Cx486S , DLC (1992)
AMD Am486 (1993), Am5x86 (1995)
Pipelining , On-Die- x87- FPU (486DX), On-Die- Cache
5.
( Superskalar )
1993 Intel Pentium , Pentium MMX (1996) Superskalar , 64-Bit- Datenbus , schnellere FPU, MMX (Pentium MMX), APIC , SMP
1994 NexGen Nx586
AMD 5k86 / K5 (1996)
Diskrete Mikroarchitektur (µ-op-Übersetzung)
1995 Cyrix Cx5x86
Cyrix 6x86 /MX (1997)/ MII (1998)
dynamische Ausführung
6.
( PAE , µ-op-Übersetzung)
1995 Intel Pentium Pro 36-Bit ( PAE ) µ-Op-Übersetzung, bedingte Bewegungsanweisungen, dynamische Ausführung , spekulative Ausführung , 3-Wege-x86-Superskalar, superskalare FPU, PAE , L2-Cache auf dem Chip
1997 Intel Pentium II , Pentium III (1999)
Celeron (1998), Xeon (1998)
On-Package (Pentium II) oder On-Die (Celeron) L2-Cache, SSE (Pentium III), SLOT 1 , Sockel 370 oder SLOT 2 (Xeon)
1997 AMD K6 / K6-2 (1998)/ K6-III (1999) 32-Bit 3DNJetzt! , 3-Level-Cache-System (K6-III)
Verbesserte Plattform 1999 AMD Athlon
Athlon XP / MP (2001)
Duron (2000)
Sempron (2004)
36-Bit MMX+, 3DNow!+, Double-Pumped-Bus, Slot A oder Socket A
2000 Transmeta Crusoe 32-Bit CMS- betriebener x86-Plattformprozessor, VLIW -128 Core, On-Die-Speichercontroller, On-Die-PCI-Bridge-Logik
Intel Pentium 4 36-Bit SSE2 , HTT (Northwood), NetBurst, Quad-Pumped-Bus, Trace-Cache, Sockel 478
2003 Intel Pentium M
Intel Core (2006)
Pentium Dual-Core (2007)
µ-op-Fusion , XD-Bit (Dothan) (Intel Core "Yonah")
Transmeta Efficeon CMS 6.0.4, VLIW -256, NX-Bit , HT
IA-64 64-Bit-Übergang
1999-2005
2001 Intel Itanium (2001-2017) 52-Bit 64-Bit- EPIC- Architektur, 128-Bit-VLIW-Befehlspaket, On-Die-Hardware IA-32 H/W für x86-Betriebssysteme und x86-Anwendungen (frühe Generationen), Software IA-32 EL für x86-Anwendungen (Itanium 2), Itanium-Registerdateien werden auf x86-Register neu abgebildet
x86-64 64-bit Extended
seit 2001
x86-64 ist die erweiterte 64-Bit-Architektur von x86, sein Legacy-Modus bewahrt die gesamte und unveränderte x86-Architektur. Die native Architektur von x86-64-Prozessoren: im 64-Bit-Modus, fehlender Zugriffsmodus bei der Segmentierung, präsentiert 64-Bit-Architektur mit linearem Adressraum; eine angepasste IA-32-Architektur, die sich neben dem 64-Bit-Modus im Kompatibilitätsmodus befindet, wird bereitgestellt, um die meisten x86-Anwendungen zu unterstützen
2003 Athlon 64 / FX / X2 (2005), Opteron
Sempron (2004)/ X2 (2008)
Turion 64 (2005)/ X2 (2006)
40-Bit AMD64 (außer einige als reine x86-Prozessoren dargestellte Sempron-Prozessoren), On-Die-Speichercontroller, HyperTransport , On-Die-Dual-Core (X2), AMD-V (Athlon 64 Orleans), Sockel 754 / 939 / 940 oder AM2
2004 Pentium 4 (Prescott)
Celeron D , Pentium D (2005)
36-Bit EM64T (aktiviert bei ausgewählten Modellen von Pentium 4 und Celeron D), SSE3 , 2. NetBurst-Pipelining, Dual-Core (On-Die: Pentium D 8xx, On-Chip: Pentium D 9xx), Intel VT (Pentium 4 6x2), Sockel LGA 775
2006 Intel Core 2
Pentium Dual-Core (2007)
Celeron Dual-Core (2008)
Intel 64 (<<== EM64T), SSSE3 (65 nm), Wide Dynamic Execution, µ-Op-Fusion, Macro-Op-Fusion im 16-Bit- und 32-Bit-Modus, Quad-Core auf dem Chip (Core 2 Quad) , Smart Shared L2-Cache (Intel Core 2 "Merom")
2007 AMD-Phänomen / II (2008)
Athlon II (2009)
Turion II (2009)
48-Bit Monolithischer Quad-Core (X4)/Triple-Core (X3), SSE4a , Rapid Virtualization Indexing (RVI), HyperTransport 3, AM2+ oder AM3
2008 Intel-Core 2 (45 nm) 40-Bit SSE4.1
Intel Atom Netbook- oder stromsparender Smart-Device-Prozessor, P54C-Kern wiederverwendet
Intel Core i7
Core i5 (2009)
Core i3 (2010)
QuickPath, On-Chip-GMCH ( Clarkdale ), SSE4.2 , Extended Page Tables (EPT) für Virtualisierung, Makro-Op-Fusion im 64-Bit-Modus, (Intel Xeon "Bloomfield" mit Nehalem-Mikroarchitektur)
VIA Nano hardwarebasierte Verschlüsselung ; adaptives Energiemanagement
2010 AMD FX 48-Bit Octa-Core, CMT (Clustered Multi-Thread), FMA, OpenCL, AM3+
2011 AMD APU A- und E-Serie ( Llano ) 40-Bit On-Die-GPGPU, PCI Express 2.0, Sockel FM1
AMD APU C-, E- und Z-Serie ( Bobcat ) 36-Bit APU für intelligente Geräte mit geringem Stromverbrauch
Intel Core i3 , Core i5 und Core i7
( Sandy Bridge / Ivy Bridge )
Interne Ringverbindung, dekodierter µ-Op-Cache, LGA 1155- Sockel
2012 AMD APU A-Serie ( Bulldozer, Trinity und höher) 48-Bit AVX , Bulldozer-basierte APU, Sockel FM2 oder Sockel FM2+
Intel Xeon Phi (Ritterecke) PCI-E-Zusatzkarten-Coprozessor für XEON-basiertes System, Manycore-Chip, In-Order P54C , sehr breite VPU (512-Bit SSE), LRBni-Befehle (8× 64-Bit)
2013 AMD Jaguar
(Athlon, Sempron)
SoC , Spielekonsole und stromsparender Smart-Device-Prozessor
Intel Silvermont
(Atom, Celeron, Pentium)
36-Bit SoC , Prozessor für intelligente Geräte mit geringem/Ultra-Low-Power-Prozessor
Intel Core i3 , Core i5 und Core i7 ( Haswell / Broadwell ) 39-Bit AVX2 , FMA3 , TSX , BMI1 und BMI2 Anweisungen, LGA 1150 Sockel
2015 Intel Broadwell-U
( Intel Core i3 , Core i5 , Core i7 , Core M , Pentium , Celeron )
SoC, On-Chip Broadwell-U PCH-LP (Multi-Chip-Modul)
2015-2020 Intel Skylake / Kaby Lake / Cannon Lake / Coffee Lake / Rocket Lake
(Intel Pentium/Celeron Gold, Core i3 , Core i5 , Core i7 , Core i9 )
46-Bit AVX-512 (beschränkt auf Cannon Lake-U und Workstation/Server-Varianten von Skylake)
2016 Intel Xeon Phi (Ritterlandung) 48-Bit Manycore-CPU und Coprozessor für Xeon-Systeme, Airmont (Atom)-basierter Kern
2016 AMD Bristol Ridge
(AMD (Pro) A6/A8/A10/A12)
Integrierter FCH auf Die, SoC, AM4-Sockel
2017 AMD Ryzen-Serie/AMD Epyc-Serie AMDs Implementierung von SMT, On-Chip-Mehrfachchips
2017 Zhaoxin WuDaoKou (KX-5000, KH-20000) Zhaoxins erste brandneue x86-64-Architektur
2018-2021 Intel Sunny Cove (Ice Lake-U und Y), Cypress Cove (Rocket Lake) 57-Bit Intels erste Implementierung von AVX-512 für das Consumer-Segment. Hinzufügen von Vektor-Neural-Netzwerk-Befehlen (VNNI)
2020 Intel Willow Cove (Tiger Lake-Y/U/H) Dual-Ring-Interconnect-Architektur, aktualisierter Gaussian Neural Accelerator (GNA2), neue AVX-512 Vector Intersection-Befehle, zusätzliche Control-Flow Enforcement Technology (CET)
Epoche Veröffentlichung CPU-Modelle Physischer Adressraum Neue Eigenschaften

Geschichte

Andere Hersteller

Am386 , veröffentlicht von AMD im Jahr 1991

Zu verschiedenen Zeiten begannen Unternehmen wie IBM , VIA , NEC , AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMC und DM&P mit der Entwicklung oder Herstellung von x86- Prozessoren (CPUs) für private Zwecke Computer und eingebettete Systeme. Solche x86-Implementierungen sind selten einfache Kopien, verwenden jedoch oft unterschiedliche interne Mikroarchitekturen und unterschiedliche Lösungen auf elektronischer und physischer Ebene. Natürlich waren die frühen kompatiblen Mikroprozessoren 16-Bit, während 32-Bit-Designs viel später entwickelt wurden. Für den PC- Markt begannen um 1990 echte Mengen mit i386- und i486- kompatiblen Prozessoren zu erscheinen, die oft ähnlich wie Intels Originalchips benannt wurden. Andere Unternehmen, die x86- oder x87- Prozessoren entwickelt oder hergestellt haben , sind ITT Corporation , National Semiconductor , ULSI System Technology und Weitek .

Nach dem vollständig Pipeline- i486 führte Intel den Markennamen Pentium (der im Gegensatz zu Zahlen markenrechtlich geschützt sein könnte ) für seine neuen superskalaren x86-Designs ein. Da das x86-Namensschema nun rechtlich freigegeben ist, mussten andere x86-Anbieter andere Namen für ihre x86-kompatiblen Produkte wählen, und zunächst entschieden sich einige, mit Variationen des Nummerierungsschemas fortzufahren: IBM arbeitete mit Cyrix zusammen , um das 5x86 und dann das sehr effiziente 6x86 (M1) und 6x86 MX ( MII ) von Cyrix-Designs, die die ersten x86-Mikroprozessoren waren, die eine Registerumbenennung implementierten , um eine spekulative Ausführung zu ermöglichen . AMD hat inzwischen das fortschrittliche, aber verzögerte 5k86 ( K5 ) entwickelt und hergestellt , das intern eng an AMDs früherem 29K RISC- Design angelehnt ist ; ähnlich wie NexGen ‚s Nx586 , verwendete es eine Strategie , so dass spezielle Pipeline - Stufe x86 - Befehle in einheitlichen und leicht zu handhaben dekodieren Mikrooperationen , ein Verfahren , das die Grundlage für die meist x86 - Design bis heute geblieben ist.

Einige frühe Versionen dieser Mikroprozessoren hatten Probleme mit der Wärmeableitung. Auch der 6x86 war von einigen kleineren Kompatibilitätsproblemen betroffen, dem Nx586 fehlte eine Gleitkommaeinheit (FPU) und (die damals entscheidende) Pin-Kompatibilität, während der K5 bei seiner (endlich) Einführung etwas enttäuschende Leistung zeigte. Auch die Unkenntnis der Kunden über Alternativen zur Pentium-Serie trug dazu bei, dass diese Designs vergleichsweise erfolglos waren, obwohl der K5 eine sehr gute Pentium-Kompatibilität aufwies und der 6x86 bei Integer-Code deutlich schneller war als der Pentium. AMD schaffte es später, sich mit dem K6- Prozessorsatz zu einem ernsthaften Konkurrenten zu entwickeln , der dem sehr erfolgreichen Athlon und Opteron wich . Es gab auch andere Konkurrenten wie Centaur Technology (ehemals IDT ), Rise Technology und Transmeta . Die energieeffizienten C3- und C7- Prozessoren von VIA Technologies , die von der Firma Centaur entwickelt wurden, werden seit vielen Jahren verkauft. Centaurs neuestes Design, der VIA Nano , ist der erste Prozessor mit superskalarer und spekulativer Ausführung . Er wurde etwa zeitgleich mit Intels erstem "in-order"-Prozessor seit dem P5 Pentium , dem Intel Atom, vorgestellt .

Erweiterungen der Wortgröße

Die Befehlssatzarchitektur wurde zweimal auf eine größere Wortgröße erweitert. 1985 veröffentlichte Intel den 32-Bit 80386 (später bekannt als i386), der in den folgenden Jahren nach und nach die früheren 16-Bit-Chips in Computern (obwohl normalerweise nicht in eingebetteten Systemen ) ersetzte ; Dieses erweiterte Programmiermodell wurde ursprünglich als i386-Architektur bezeichnet (wie seine erste Implementierung), aber Intel nannte es später IA-32, als es seine (nicht verwandte) IA-64- Architektur einführte .

In den Jahren 1999-2003 erweiterte AMD diese 32-Bit-Architektur auf 64 Bit und bezeichnete sie in frühen Dokumenten als x86-64 und später als AMD64 . Intel übernahm bald die Architekturerweiterungen von AMD unter dem Namen IA-32e, später unter dem Namen EM64T und schließlich unter Verwendung von Intel 64. Microsoft und Sun Microsystems / Oracle verwenden auch den Begriff "x64", während viele Linux-Distributionen und die BSDs auch den Begriff "amd64" verwenden " Begriff. Microsoft Windows beispielsweise bezeichnet seine 32-Bit-Versionen als "x86" und 64-Bit-Versionen als "x64", während Installationsdateien von 64-Bit-Windows-Versionen in einem Verzeichnis namens "AMD64" abgelegt werden müssen.

Grundeigenschaften der Architektur

Die x86-Architektur ist eine variable Befehlslänge, hauptsächlich " CISC "-Design mit Schwerpunkt auf Abwärtskompatibilität . Der Befehlssatz ist jedoch kein typischer CISC, sondern im Grunde eine erweiterte Version der einfachen Acht-Bit- Architekturen 8008 und 8080 . Die Byte-Adressierung ist aktiviert und die Wörter werden mit der Little-Endian- Byte-Reihenfolge im Speicher gespeichert . Der Speicherzugriff auf nicht ausgerichtete Adressen ist für fast alle Befehle erlaubt. Die größte native Größe für Integer- Arithmetik und Speicheradressen (oder Offsets ) beträgt je nach Architekturgeneration 16, 32 oder 64 Bit (neuere Prozessoren unterstützen auch direkt kleinere Integer). Mehrere Skalarwerte können gleichzeitig über die SIMD-Einheit verarbeitet werden, die in späteren Generationen vorhanden ist, wie unten beschrieben. Unmittelbare Adressierungsoffsets und unmittelbare Daten können als 8-Bit-Größen für die häufig auftretenden Fälle oder Kontexte ausgedrückt werden, in denen ein Bereich von -128..127 ausreicht. Typische Befehle sind daher 2 oder 3 Bytes lang (obwohl einige viel länger sind und einige Einzelbytes sind).

Um Codierungsraum weiter zu sparen, werden die meisten Register in Opcodes unter Verwendung von drei oder vier Bits ausgedrückt , letzteres über ein Opcode-Präfix im 64-Bit-Modus, während höchstens ein Operand für einen Befehl eine Speicherstelle sein kann. Dieser Speicheroperand kann jedoch auch das Ziel (oder eine kombinierte Quelle und Ziel) sein, während der andere Operand, die Quelle , entweder register oder unmittelbar sein kann . Dies trägt unter anderem zu einer Codegröße bei, die mit 8-Bit-Maschinen konkurrieren kann, und ermöglicht eine effiziente Nutzung des Befehls-Cache-Speichers. Die relativ kleine Anzahl von allgemeinen Registern (die auch von ihren 8-Bit-Vorfahren geerbt wurden) hat die registerbezogene Adressierung (unter Verwendung kleiner unmittelbarer Offsets) zu einer wichtigen Methode für den Zugriff auf Operanden, insbesondere auf dem Stapel, gemacht. Es wurde daher viel Arbeit investiert, um solche Zugriffe so schnell wie Registerzugriffe zu machen – dh einen Befehlsdurchsatz von einem Zyklus, in den meisten Fällen, wo die Daten, auf die zugegriffen wird, im Cache der obersten Ebene verfügbar sind.

Gleitkomma und SIMD

Ein dedizierter Gleitkommaprozessor mit 80-Bit internen Registern, der 8087 , wurde für den ursprünglichen 8086 entwickelt . Dieser Mikroprozessor entwickelte sich anschließend zum erweiterten 80387 , und spätere Prozessoren integrierten eine abwärtskompatible Version dieser Funktionalität auf demselben Mikroprozessor wie der Hauptprozessor. Darüber hinaus enthalten moderne x86-Designs auch eine SIMD- Einheit (siehe SSE unten), in der Anweisungen parallel an (ein oder zwei) 128-Bit-Wörtern arbeiten können, die jeweils zwei oder vier Gleitkommazahlen enthalten (je 64 oder 32 .). Bits breit) oder alternativ 2, 4, 8 oder 16 ganze Zahlen (jeweils 64, 32, 16 oder 8 Bits breit).

Das Vorhandensein von breiten SIMD-Registern bedeutet, dass vorhandene x86-Prozessoren bis zu 128 Bit Speicherdaten in einem einzigen Befehl laden oder speichern und auch bitweise Operationen (wenn auch keine Ganzzahlarithmetik) mit vollen 128-Bit-Mengen parallel ausführen können. Intels Sandy-Bridge- Prozessoren fügten die Advanced Vector Extensions (AVX)-Befehle hinzu und erweiterten die SIMD-Register auf 256 Bit. Die von den Knights Corner Xeon Phi- Prozessoren implementierten Intel Initial Many Core Instructions und die von den Knights Landing Xeon Phi-Prozessoren und den Skylake-X- Prozessoren implementierten AVX-512- Befehle verwenden 512 Bit breite SIMD-Register.

Aktuelle Implementierungen

Während der Ausführung verwenden aktuelle x86-Prozessoren einige zusätzliche Decodierungsschritte, um die meisten Befehle in kleinere Teile aufzuteilen, die als Mikrooperationen bezeichnet werden. Diese werden dann an eine Steuereinheit übergeben, die sie gemäß der x86-Semantik zwischenspeichert und disponiert, so dass sie von einer von mehreren (mehr oder weniger spezialisierten) Ausführungseinheiten teilweise parallel ausgeführt werden können . Diese modernen x86-Designs sind daher Pipeline- , superskalar und auch in der Lage, außerhalb der Reihenfolge und spekulativ auszuführen (über Verzweigungsvorhersage , Registerumbenennung und Speicherabhängigkeitsvorhersage ), was bedeutet, dass sie mehrere (teilweise oder vollständige) x86-Befehle gleichzeitig ausführen können, und nicht unbedingt in der gleichen Reihenfolge wie im Befehlsstrom angegeben. Einige Intel-CPUs ( Xeon Foster MP , einige Pentium 4 und einige Nehalem- und spätere Intel Core- Prozessoren) und AMD-CPUs (ab Zen ) sind auch in der Lage, gleichzeitiges Multithreading mit zwei Threads pro Kern durchzuführen ( Xeon Phi hat vier Threads pro Kern). Einige Intel-CPUs unterstützen Transaktionsspeicher ( TSX ).

Bei seiner Einführung Mitte der 1990er Jahre wurde diese Methode manchmal als "RISC-Kern" oder als "RISC-Übersetzung" bezeichnet, teilweise aus Marketinggründen, aber auch, weil diese Mikrooperationen einige Eigenschaften mit bestimmten Arten von RISC-Befehlen teilen. Der traditionelle Mikrocode (der seit den 1950er Jahren verwendet wird) weist jedoch auch von Natur aus viele der gleichen Eigenschaften auf; Das neue Verfahren unterscheidet sich hauptsächlich darin, dass die Übersetzung in Mikrooperationen nun asynchron erfolgt. Der Verzicht auf eine Synchronisation der Ausführungseinheiten mit den Decodierungsschritten eröffnet Möglichkeiten zur weiteren Analyse des (gepufferten) Codestroms und ermöglicht somit die Erkennung von parallel durchführbaren Operationen, die gleichzeitig mehr als eine Ausführungseinheit speisen.

Die neuesten Prozessoren tun gegebenenfalls auch das Gegenteil; sie kombinieren bestimmte x86-Sequenzen (wie ein Vergleich gefolgt von einem bedingten Sprung) zu einem komplexeren Mikro-Op, der besser zum Ausführungsmodell passt und somit schneller oder mit weniger Maschinenressourcen ausgeführt werden kann.

Eine andere Möglichkeit, die Leistung zu verbessern, besteht darin, die dekodierten Mikrooperationen zwischenzuspeichern, sodass der Prozessor direkt von einem speziellen Cache auf die dekodierten Mikrooperationen zugreifen kann, anstatt sie erneut zu dekodieren. Intel verfolgte diesen Ansatz mit der Execution Trace Cache-Funktion in ihrer NetBurst- Mikroarchitektur (für Pentium 4-Prozessoren) und später im Decoded Stream Buffer (für Core-Prozessoren seit Sandy Bridge).

Transmeta hat bei seinen Crusoe x86-kompatiblen CPUs eine völlig andere Methode verwendet . Sie verwendeten die Just-in-Time- Übersetzung, um x86-Befehle in den nativen VLIW- Befehlssatz der CPU zu konvertieren . Transmeta argumentierte, dass ihr Ansatz energieeffizientere Designs ermöglicht, da die CPU auf den komplizierten Decodierungsschritt herkömmlicher x86-Implementierungen verzichten kann.

Segmentierung

In den späten 1970er Jahren stießen Minicomputer an die 16-Bit-64- KB- Adressgrenze, da der Speicher billiger wurde. Einige Minicomputer wie der PDP-11 verwendeten komplexe Bank-Switching-Schemata, oder, im Fall von Digitals VAX , überarbeiteten viel teurere Prozessoren, die 32-Bit-Adressierung und Daten direkt verarbeiten konnten. Der ursprüngliche 8086, der aus dem einfachen 8080- Mikroprozessor entwickelt wurde und hauptsächlich auf sehr kleine und kostengünstige Computer und andere spezialisierte Geräte abzielte, verwendete stattdessen einfache Segmentregister, die die Speicheradressenbreite um nur 4 Bit erhöhten. Durch Multiplizieren einer 64-KB-Adresse mit 16 konnte die 20-Bit-Adresse insgesamt ein Megabyte (1.048.576 Bytes) adressieren, was für einen kleinen Computer damals eine ziemlich große Menge war. Das Konzept der Segmentregister war für viele Mainframes nicht neu, die Segmentregister verwendeten, um schnell zu verschiedenen Aufgaben zu wechseln. In der Praxis war (ist) dies auf x86 eine viel kritisierte Implementierung, die viele gängige Programmieraufgaben und Compiler stark verkompliziert hat. Die Architektur erlaubte jedoch bald eine lineare 32-Bit-Adressierung (beginnend mit dem 80386 Ende 1985), aber große Akteure (wie Microsoft ) brauchten mehrere Jahre, um ihre 16-Bit-basierten Systeme umzustellen. Der 80386 (und 80486) wurde daher viele Jahre lang weitgehend als schneller (aber immer noch 16-Bit-basierter) 8086 verwendet.

Daten und Code könnten in "nahen" 16-Bit-Segmenten innerhalb von 64-KB-Abschnitten des gesamten 1-  MB- Adressraums verwaltet werden, oder ein Compiler könnte in einem "Fern"-Modus mit 32-Bit- segment:offsetPaaren arbeiten, die (nur) 1 MB erreichen. Auch wenn sich das Mitte der 1980er Jahre als ziemlich einschränkend erweisen sollte, funktionierte es für den aufstrebenden PC-Markt und machte es sehr einfach, Software von den älteren 8008 , 8080 , 8085 und Z80 auf den neueren Prozessor zu übersetzen. 1985 wurde das 16-Bit-Segmentadressierungsmodell durch die Einführung von 32-Bit-Offset-Registern im 386er- Design effektiv ausgehebelt .

Im Realmodus wird die Segmentierung erreicht, indem die Segmentadresse um 4 Bit nach links verschoben und ein Offset hinzugefügt wird, um eine endgültige 20-Bit-Adresse zu erhalten. Wenn beispielsweise DS A000h und SI 5677h ist, zeigt DS:SI auf die absolute Adresse DS × 10h + SI = A5677h. Somit beträgt der gesamte Adressraum im Realmodus 2 20 Byte oder 1 MB , eine ziemlich beeindruckende Zahl für 1978. Alle Speicheradressen bestehen sowohl aus einem Segment als auch aus einem Offset; jeder Zugriffsart (Code, Daten oder Stack) ist ein Standardsegmentregister zugeordnet (für Daten ist das Register normalerweise DS, für Code ist es CS und für Stack ist es SS). Für Datenzugriffe kann das Segmentregister explizit angegeben werden (unter Verwendung eines Segment-Override-Präfixes), um eines der vier Segmentregister zu verwenden.

In diesem Schema können zwei verschiedene Segment/Offset-Paare auf einen einzigen absoluten Ort zeigen. Wenn also DS A111h und SI 4567h ist, zeigt DS:SI auf dasselbe A5677h wie oben. Dieses Schema macht es unmöglich, mehr als vier Segmente gleichzeitig zu verwenden. CS und SS sind für die korrekte Funktion des Programms von entscheidender Bedeutung, so dass nur mit DS und ES auf Datensegmente außerhalb des Programms (oder genauer gesagt außerhalb des gerade ausgeführten Segments des Programms) oder des Stapels verwiesen werden kann.

Im geschützten Modus , der im 80286 eingeführt wurde, enthält ein Segmentregister nicht mehr die physikalische Adresse des Anfangs eines Segments, sondern einen "Selektor", der auf eine Struktur auf Systemebene zeigt, die als Segmentdeskriptor bezeichnet wird . Ein Segmentdeskriptor enthält die physikalische Adresse des Anfangs des Segments, die Länge des Segments und Zugriffsberechtigungen für dieses Segment. Der Offset wird gegen die Länge des Segments geprüft, wobei Offsets, die sich auf Positionen außerhalb des Segments beziehen, eine Ausnahme verursachen. Offsets, die sich auf Positionen innerhalb des Segments beziehen, werden mit der physikalischen Adresse des Anfangs des Segments kombiniert, um die diesem Offset entsprechende physikalische Adresse zu erhalten.

Die segmentierte Natur kann die Programmierung und den Compilerentwurf erschweren, da die Verwendung von Nah- und Fernzeigern die Leistung beeinträchtigt.

Adressierungsmodi

Adressierungsmodi für 16-Bit-Prozessormodi können durch die Formel zusammengefasst werden:

Adressierungsmodi für 32-Bit-x86-Prozessormodi können durch die Formel zusammengefasst werden:

Adressierungsmodi für den 64-Bit-Prozessormodus lassen sich durch die Formel zusammenfassen:

Die befehlsrelative Adressierung in 64-Bit-Code (RIP + Displacement, wobei RIP das Befehlszeigerregister ist ) vereinfacht die Implementierung von positionsunabhängigem Code (wie er in gemeinsam genutzten Bibliotheken in einigen Betriebssystemen verwendet wird).

Der 8086 hatte 64 KB 8-Bit (oder alternativ32 K-Wort mit 16 Bit ) E/A- Raum und a64 KB (ein Segment) Stack im Speicher, der von Computerhardware unterstützt wird . Nur Wörter (zwei Bytes) können auf den Stack geschoben werden. Der Stack wächst in Richtung numerisch niedrigerer Adressen, wobei SS:SP auf das zuletzt übertragene Element zeigt. Es gibt 256 Interrupts , die sowohl von Hardware als auch von Software aufgerufen werden können. Die Interrupts können kaskadiert werden, wobei der Stack verwendet wird, um die Rückkehradresse zu speichern .

x86-Register

16-Bit

Die ursprünglichen Intel 8086 und 8088 haben vierzehn 16- Bit- Register. Vier davon (AX, BX, CX, DX) sind Mehrzweckregister (GPRs), obwohl jedes einen zusätzlichen Zweck haben kann; zum Beispiel kann mit der Schleifenanweisung nur CX als Zähler verwendet werden . Auf jedes kann als zwei separate Bytes zugegriffen werden (so kann auf das High-Byte von BX als BH und auf das Low-Byte als BL zugegriffen werden). Zwei Zeigerregister haben spezielle Rollen: SP (Stack-Zeiger) zeigt auf die "Spitze" des Stapels , und BP (Basiszeiger) wird oft verwendet, um auf eine andere Stelle im Stapel zu zeigen, typischerweise über den lokalen Variablen (siehe Rahmenzeiger ). Die Register SI, DI, BX und BP sind Adressregister und können auch zur Array-Indizierung verwendet werden.

Vier Segmentregister (CS, DS, SS und ES) werden verwendet, um eine Speicheradresse zu bilden. Das FLAGS-Register enthält Flags wie das Carry-Flag , das Überlauf-Flag und das Null-Flag . Schließlich zeigt der Befehlszeiger (IP) auf den nächsten Befehl, der aus dem Speicher geholt und dann ausgeführt wird; auf dieses Register kann von einem Programm nicht direkt zugegriffen (gelesen oder geschrieben) werden.

Die Intel 80186 und 80188 sind im Wesentlichen eine aufgerüstete 8086- bzw. 8088-CPU mit zusätzlichen On-Chip-Peripheriegeräten und haben die gleichen CPU-Register wie die 8086 und 8088 (zusätzlich zu den Schnittstellenregistern für die Peripheriegeräte).

Die 8086, 8088, 80186 und 80188 können einen optionalen Gleitkomma-Coprozessor verwenden, den 8087 . Der 8087 erscheint dem Programmierer als Teil der CPU und fügt acht 80-Bit breite Register hinzu, st(0) bis st(7), von denen jedes numerische Daten in einem von sieben Formaten enthalten kann: 32-, 64- oder 80-Bit-Gleitkomma, 16-, 32- oder 64-Bit-(binäre) Ganzzahl und 80-Bit-gepackte Dezimalzahl. Es hat auch sein eigenes 16-Bit-Statusregister, auf das über den Befehl fntsw zugegriffen werden kann, und es ist üblich, einige seiner Bits einfach zum Verzweigen zu verwenden, indem es in die normalen FLAGS kopiert wird.

Um den geschützten Modus zu unterstützen , halten im Intel 80286 drei Spezialregister Deskriptortabellenadressen (GDTR, LDTR, IDTR ), und ein viertes Aufgabenregister (TR) wird für die Aufgabenumschaltung verwendet. Der 80287 ist der Gleitkomma-Coprozessor für den 80286 und hat die gleichen Register wie der 8087 mit den gleichen Datenformaten.

32-Bit

Im x86-64-Befehlssatz verfügbare Register

Mit dem Aufkommen des 32-Bit- 80386- Prozessors wurden die 16-Bit-Allzweckregister, Basisregister, Indexregister, Befehlszeiger und FLAGS-Register , jedoch nicht die Segmentregister, auf 32 Bit erweitert. Die Nomenklatur stellte dies dar, indem den Registernamen in der x86-Assemblersprache ein " E " (für "erweitert") vorangestellt wurde . Somit entspricht das AX-Register den niedrigsten 16 Bits des neuen 32-Bit-EAX-Registers, SI entspricht den niedrigsten 16 Bits von ESI und so weiter. Die Universalregister, Basisregister und Indexregister können alle als Basis in Adressierungsmodi verwendet werden, und alle diese Register außer dem Stapelzeiger können als Index in Adressierungsmodi verwendet werden.

Zwei neue Segmentregister (FS und GS) wurden hinzugefügt. Mit einer größeren Anzahl von Registern, Anweisungen und Operanden wurde das Maschinencodeformat erweitert. Um Abwärtskompatibilität bereitzustellen, können Segmente mit ausführbarem Code als entweder 16-Bit- oder 32-Bit-Befehle enthaltend markiert werden. Spezielle Präfixe ermöglichen die Aufnahme von 32-Bit-Befehlen in ein 16-Bit-Segment oder umgekehrt .

Der 80386 hatte einen optionalen Gleitkomma-Coprozessor, den 80387 ; er hatte acht 80-Bit breite Register: st(0) bis st(7), wie der 8087 und der 80287. Der 80386 konnte auch einen 80287-Coprozessor verwenden. Beim 80486 und allen nachfolgenden x86-Modellen ist die Floating Point Processing Unit (FPU) auf dem Chip integriert.

Der Pentium MMX fügte acht 64-Bit-MMX-Integer-Register hinzu (MMX0 bis MMX7, die niedrigere Bits mit dem 80-Bit-breiten FPU-Stack teilen). Mit dem Pentium III fügte Intel ein 32-Bit Streaming SIMD Extensions (SSE) Control/Status Register (MXCSR) und acht 128-Bit SSE Gleitkommaregister (XMM0 bis XMM7) hinzu.

64-Bit

Beginnend mit dem AMD Opteron- Prozessor erweiterte die x86-Architektur die 32-Bit-Register in 64-Bit-Register, ähnlich wie die 16- auf 32-Bit-Erweiterung stattfand. Ein R- Präfix (für "Register") identifiziert die 64-Bit-Register (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP) und acht zusätzliche 64-Bit-Generalregister (R8-R15 ) wurden auch bei der Erstellung von x86-64 eingeführt . Diese Erweiterungen sind jedoch nur im 64-Bit-Modus verwendbar, der einer der beiden Modi ist, die nur im Long-Modus verfügbar sind . Die Adressierungsmodi wurden vom 32-Bit-Modus nicht dramatisch geändert, außer dass die Adressierung auf 64 Bit erweitert wurde, virtuelle Adressen jetzt auf 64 Bit erweitert werden (um Modusbits in virtuellen Adressen nicht zuzulassen) und andere Selektordetails drastisch reduziert wurden . Darüber hinaus wurde ein Adressierungsmodus hinzugefügt, um Speicherreferenzen relativ zu RIP (dem Befehlszeiger ) zu ermöglichen, um die Implementierung von positionsunabhängigem Code zu erleichtern , der in gemeinsam genutzten Bibliotheken in einigen Betriebssystemen verwendet wird.

128-Bit

SIMD registriert XMM0–XMM15.

256-Bit

SIMD registriert YMM0–YMM15.

512 Bit

SIMD registriert ZMM0–ZMM31.

Sonstiges/besondere Verwendung

x86-Prozessoren, die einen geschützten Modus haben , dh der 80286 und spätere Prozessoren, haben auch drei Deskriptorregister (GDTR, LDTR, IDTR ) und ein Aufgabenregister (TR).

32-Bit-x86-Prozessoren (ab 80386) enthalten auch verschiedene spezielle/verschiedene Register wie Steuerregister (CR0 bis 4, CR8 nur für 64-Bit), Debug-Register (DR0 bis 3, plus 6 und 7), Testregister (TR3 bis 7; nur 80486) und modellspezifische Register (MSRs, die mit dem Pentium erscheinen).

AVX-512 verfügt über acht zusätzliche 64-Bit-Maskenregister zum Auswählen von Elementen in einem ZMM.

Zweck

Obwohl die Hauptregister (mit Ausnahme des Befehlszeigers) in den 32-Bit- und 64-Bit-Versionen des Befehlssatzes "allgemein" sind und für alles verwendet werden können, war ursprünglich vorgesehen, dass sie für die folgende Zwecke:

  • AL/AH/AX/EAX/RAX: Akkumulator
  • BL/BH/BX/EBX/RBX: Basisindex (zur Verwendung mit Arrays)
  • CL/CH/CX/ECX/RCX: Zähler (zur Verwendung mit Loops und Strings)
  • DL/DH/DX/EDX/RDX: Genauigkeit des Akkumulators erweitern (zB 32-Bit-EAX und EDX für 64-Bit-Integer-Operationen in 32-Bit-Code kombinieren)
  • SI/ESI/RSI: Quellindex für String- Operationen.
  • DI/EDI/RDI: Zielindex für String-Operationen.
  • SP/ESP/RSP: Stackpointer für die oberste Adresse des Stacks.
  • BP/EBP/RBP: Stack-Basiszeiger zum Halten der Adresse des aktuellen Stack-Frames .
  • IP/EIP/RIP: Befehlszeiger. Enthält den Programmzähler , die Adresse des nächsten Befehls.

Segmentregister:

  • CS: Code
  • DS: Daten
  • SS: Stapel
  • ES: Zusätzliche Daten
  • FS: Zusätzliche Daten #2
  • GS: Zusätzliche Daten #3

Für die anderen 8 Register, die nur im 64-Bit-Modus verfügbar sind, wurden keine besonderen Zwecke vorgesehen.

Einige Befehle werden effizienter kompiliert und ausgeführt, wenn diese Register für ihren vorgesehenen Zweck verwendet werden. Beispielsweise erzeugt die Verwendung von AL als Akkumulator und das Hinzufügen eines unmittelbaren Bytewerts dazu den effizienten Add-to-AL- Opcode von 04h, während die Verwendung des BL-Registers den generischen und längeren Add-to-Register- Opcode von 80C3h erzeugt. Ein weiteres Beispiel ist die Division und Multiplikation mit doppelter Genauigkeit, die speziell mit den AX- und DX-Registern funktioniert.

Moderne Compiler profitierten von der Einführung des Sib- Bytes ( Scale-Index-Base-Byte ), das eine einheitliche Behandlung von Registern ( Minicomputer- ähnlich) ermöglicht. Die universelle Verwendung des Sib-Bytes ist jedoch nicht optimal, da es längere Kodierungen erzeugt, als wenn es nur bei Bedarf selektiv verwendet wird. (Der Hauptvorteil des Sib-Bytes ist die Orthogonalität und die leistungsfähigeren Adressierungsmodi, die es ermöglicht, Befehle zu sparen und Register für Adressberechnungen wie das Skalieren eines Indexes zu verwenden.) Einige spezielle Befehle verloren im Hardware-Design die Priorität und wurde langsamer als äquivalente kleine Codesequenzen. Ein bemerkenswertes Beispiel ist die Anweisung LODSW.

Struktur

Allzweckregister (A, B, C und D)
64 56 48 40 32 24 16 8
R?X
EX
?X
?H ?L
Nur 64-Bit-Modus-Allzweckregister (R8, R9, R10, R11, R12, R13, R14, R15)
64 56 48 40 32 24 16 8
?
?D
?W
?B
Segmentregister (C, D, S, E, F und G)
16 8
?S
Zeigerregister (S und B)
64 56 48 40 32 24 16 8
R?P
E?P
?P
?PL

Hinweis: Die ?PL-Register sind nur im 64-Bit-Modus verfügbar.

Indexregister (S und D)
64 56 48 40 32 24 16 8
R?I
E?ich
?ICH
?IL

Hinweis: Die ?IL-Register sind nur im 64-Bit-Modus verfügbar.

Befehlszeigerregister (I)
64 56 48 40 32 24 16 8
RUHE IN FRIEDEN
EIP
IP

Betriebsarten

Real-Modus

Der Real-Adress-Modus, allgemein als Real-Modus bezeichnet, ist ein Betriebsmodus von 8086 und späteren x86-kompatiblen CPUs . Der Real-Modus zeichnet sich durch einen segmentierten 20-Bit-Speicheradressraum aus (d. h. nur etwas mehr als 1 MiB Speicher können adressiert werden), direkten Softwarezugriff auf periphere Hardware und kein Konzept von Speicherschutz oder Multitasking auf Hardwareebene. Alle x86-CPUs der 80286- Serie und höher starten beim Einschalten im Realmodus ; 80186- CPUs und früher hatten nur einen Betriebsmodus, der dem Real-Modus in späteren Chips entspricht. (Auf der IBM PC-Plattform ist ein direkter Softwarezugriff auf die IBM BIOS- Routinen nur im Real-Modus möglich, da das BIOS für den Real-Modus geschrieben ist. Dies ist jedoch keine Eigenschaft der x86-CPU, sondern des IBM BIOS-Designs.)

Um mehr als 64 KB Speicher zu verwenden, müssen die Segmentregister verwendet werden. Dies führte zu großen Komplikationen für Compiler-Implementierer, die ungerade Zeigermodi wie "nah", "weit" und "riesig" einführten, um die implizite Natur der segmentierten Architektur in unterschiedlichem Maße zu nutzen, wobei einige Zeiger 16-Bit-Offsets innerhalb der implizierten Segmente und andere enthalten Zeiger, die Segmentadressen und Offsets innerhalb von Segmenten enthalten. Es ist technisch möglich, bis zu 256 KB Speicher für Code und Daten zu verwenden, mit bis zu 64 KB für Code, indem Sie alle vier Segmentregister einmal setzen und dann nur 16-Bit-Offsets verwenden (optional mit Default-Segment-Override-Präfixen) auf Adressspeicher, aber dies schränkt die Art und Weise, wie Daten adressiert und Speicheroperanden kombiniert werden können, stark ein und verstößt gegen die architektonische Absicht der Intel-Designer, getrennte Datenelemente (z. B. Arrays, Strukturen, Codeeinheiten) zu erstellen in separaten Segmenten enthalten sind und durch ihre eigenen Segmentadressen adressiert werden, in neuen Programmen, die nicht von früheren 8-Bit-Prozessoren mit 16-Bit-Adressräumen portiert wurden.

Unwirklicher Modus

Der Unreal-Modus wird von einigen 16-Bit- Betriebssystemen und einigen 32-Bit- Bootloadern verwendet .

Systemverwaltungsmodus

Der System Management Mode (SMM) wird nur von der Systemfirmware ( BIOS / UEFI ) verwendet, nicht von Betriebssystemen und Anwendungssoftware. Der SMM-Code läuft im SMRAM.

Sicherheitsmodus

Zusätzlich zum Realmodus unterstützt der Intel 80286 den geschützten Modus, erweitert den adressierbaren physischen Speicher auf 16 MB und den adressierbaren virtuellen Speicher auf 1  GB und bietet geschützten Speicher , der verhindert, dass Programme sich gegenseitig beschädigen. Dies geschieht, indem die Segmentregister nur zum Speichern eines Index in einer im Speicher abgelegten Deskriptortabelle verwendet werden. Es gibt zwei solcher Tabellen, die Global Descriptor Table (GDT) und die Local Descriptor Table (LDT), die jeweils bis zu 8192 Segmentdeskriptoren enthalten, wobei jedes Segment Zugriff auf 64 KB Speicher bietet. Beim 80286 stellt ein Segmentdeskriptor eine 24-Bit- Basisadresse bereit , und diese Basisadresse wird zu einem 16-Bit-Offset hinzugefügt, um eine absolute Adresse zu erzeugen. Die Basisadresse aus der Tabelle erfüllt dieselbe Rolle, die der Literalwert des Segmentregisters im Realmodus erfüllt; die Segmentregister wurden von direkten Registern in indirekte Register umgewandelt. Jedem Segment kann eine von vier Ringebenen zugewiesen werden, die für die hardwarebasierte Computersicherheit verwendet werden . Jeder Segmentdeskriptor enthält auch ein Segmentbegrenzungsfeld, das den maximalen Offset spezifiziert, der mit dem Segment verwendet werden kann. Da Offsets 16 Bit betragen, sind Segmente im 80286-geschützten Modus weiterhin auf jeweils 64 KB beschränkt.

Jedes Mal, wenn ein Segmentregister im geschützten Modus geladen wird, muss der 80286 einen 6-Byte-Segmentdeskriptor aus dem Speicher in einen Satz versteckter interner Register lesen. Somit ist das Laden von Segmentregistern im Protected Mode viel langsamer als im Real Mode und ein sehr häufiges Wechseln von Segmenten ist zu vermeiden. Tatsächliche Speicheroperationen, die Segmente im geschützten Modus verwenden, werden nicht sehr verlangsamt, da der 80286 und höher über Hardware verfügen, um den Offset gegen die Segmentgrenze parallel zur Befehlsausführung zu überprüfen.

Der Intel 80386 erweiterte Offsets und auch das Segmentbegrenzungsfeld in jedem Segmentdeskriptor auf 32 Bit, wodurch ein Segment den gesamten Speicherraum überspannen kann. Es wurde auch die Unterstützung im geschützten Modus für Paging eingeführt , ein Mechanismus, der es ermöglicht, ausgelagerten virtuellen Speicher (mit einer Seitengröße von 4 KB) zu verwenden. Paging ermöglicht es der CPU, eine beliebige Seite des virtuellen Speicherraums auf eine beliebige Seite des physischen Speicherraums abzubilden. Dazu verwendet es zusätzliche Zuordnungstabellen im Speicher, die als Seitentabellen bezeichnet werden. Der geschützte Modus auf dem 80386 kann mit aktiviertem oder deaktiviertem Paging betrieben werden; der Segmentierungsmechanismus ist immer aktiv und generiert virtuelle Adressen, die dann vom Paging-Mechanismus abgebildet werden, wenn er aktiviert ist. Der Segmentierungsmechanismus kann auch effektiv deaktiviert werden, indem alle Segmente so eingestellt werden, dass sie eine Basisadresse von 0 und eine Größenbeschränkung gleich dem gesamten Adressraum haben; dies erfordert auch eine Segmentdeskriptortabelle minimaler Größe von nur vier Deskriptoren (da die FS- und GS-Segmente nicht verwendet werden müssen).

Paging wird häufig von modernen Multitasking-Betriebssystemen verwendet. Linux , 386BSD und Windows NT wurden für den 386 entwickelt, weil es die erste CPU mit Intel-Architektur war, die Paging und 32-Bit-Segment-Offsets unterstützte. Die 386-Architektur wurde zur Grundlage aller Weiterentwicklungen der x86-Serie.

x86-Prozessoren, die das Booten im geschützten Modus im Real-Modus unterstützen, um die Abwärtskompatibilität mit der älteren 8086-Prozessorklasse zu gewährleisten. Beim Einschalten (auch Booten genannt ) initialisiert sich der Prozessor im Real-Modus und beginnt dann mit der Ausführung von Anweisungen. Der Bootcode des Betriebssystems, der im ROM gespeichert sein kann, kann den Prozessor in den geschützten Modus versetzen, um Paging und andere Funktionen zu ermöglichen. Der Befehlssatz im geschützten Modus ähnelt dem im Realmodus verwendeten. Bestimmte Einschränkungen, die für den Realmodus gelten (z. B. nicht in der Lage sein, ax,cx,dx bei der Adressierung zu verwenden) gelten jedoch nicht im geschützten Modus. Umgekehrt ist Segmentarithmetik, eine gängige Praxis im Realmodus-Code, im geschützten Modus nicht erlaubt.

Virtueller 8086-Modus

Es gibt auch einen Unter-Betriebsmodus im 32-Bit-geschützten Modus ( auch bekannt als 80386-geschützter Modus), der als virtueller 8086-Modus , auch als V86-Modus bekannt, bezeichnet wird . Dies ist im Grunde ein spezieller Hybridbetriebsmodus, der es ermöglicht, dass Realmodus-Programme und -Betriebssysteme ausgeführt werden, während sie von einem Überwachungsbetriebssystem im geschützten Modus gesteuert werden. Dies ermöglicht eine große Flexibilität beim gleichzeitigen Ausführen von Programmen im geschützten Modus und Programmen im Realmodus. Dieser Modus ist ausschließlich für die 32-Bit-Version des geschützten Modus verfügbar; es existiert nicht in der 16-Bit-Version des geschützten Modus oder im langen Modus.

Langer Modus

Mitte der 1990er Jahre war es offensichtlich, dass der 32-Bit-Adressraum der x86-Architektur ihre Leistung bei Anwendungen begrenzte, die große Datenmengen erfordern. Ein 32-Bit-Adressraum würde es dem Prozessor ermöglichen, nur 4 GB Daten direkt zu adressieren, eine Größe, die von Anwendungen wie Videoverarbeitung und Datenbank-Engines übertroffen wird . Unter Verwendung von 64-Bit-Adressen ist es möglich, 16 EiB Daten direkt zu adressieren  , obwohl die meisten 64-Bit-Architekturen keinen Zugriff auf den vollen 64-Bit-Adressraum unterstützen; AMD64 unterstützt beispielsweise nur 48 Bit von einer 64-Bit-Adresse, aufgeteilt in vier Paging-Ebenen.

1999 veröffentlichte AMD eine (fast) vollständige Spezifikation für eine 64-Bit- Erweiterung der x86-Architektur, die sie x86-64 nannten, mit angeblichen Absichten zu produzieren. Dieses Design wird derzeit in fast allen x86-Prozessoren verwendet, mit einigen Ausnahmen für eingebettete Systeme .

Massenproduzierte x86-64- Chips für den allgemeinen Markt waren vier Jahre später, im Jahr 2003, verfügbar, nachdem die Zeit dafür aufgewendet wurde, funktionierende Prototypen zu testen und zu verfeinern; ungefähr zur gleichen Zeit wurde der ursprüngliche Name x86-64 in AMD64 geändert . Der Erfolg der AMD64-Prozessorlinie gepaart mit der verhaltenen Aufnahme der IA-64-Architektur zwang Intel dazu, eine eigene Implementierung des AMD64-Befehlssatzes herauszubringen. Intel hatte zuvor bereits Unterstützung für AMD64 implementiert, entschied sich jedoch dafür, diese nicht zu aktivieren, in der Hoffnung, dass AMD AMD64 nicht auf den Markt bringen würde, bevor der neue IA-64-Befehlssatz von Itanium weit verbreitet war. Es hat seine Implementierung von AMD64 als EM64T gebrandmarkt und später in Intel 64 umbenannt .

In der Literatur und den Produktversionsnamen beziehen sich Microsoft und Sun auf AMD64/Intel 64 zusammen als x64 in den Betriebssystemen Windows und Solaris . Linux-Distributionen bezeichnen es entweder als "x86-64", seine Variante "x86_64" oder "amd64". BSD- Systeme verwenden "amd64", während macOS "x86_64" verwendet.

Der lange Modus ist meistens eine Erweiterung des 32-Bit-Befehlssatzes, aber im Gegensatz zum Übergang von 16 auf 32-Bit wurden viele Befehle im 64-Bit-Modus verworfen. Dies hat keinen Einfluss auf die tatsächliche binäre Abwärtskompatibilität (die Legacy-Code in anderen Modi ausführen würde, die diese Anweisungen weiterhin unterstützen), aber es ändert die Art und Weise, wie Assembler und Compiler für neuen Code arbeiten müssen.

Dies war das erste Mal, dass eine große Erweiterung der x86-Architektur von einem anderen Hersteller als Intel initiiert und stammt. Es war auch das erste Mal, dass Intel Technologie dieser Art von einer externen Quelle akzeptierte.

Erweiterungen

Gleitkommaeinheit

Frühe x86-Prozessoren konnten mit Gleitkomma- Hardware in Form einer Reihe numerischer Gleitkomma -Coprozessoren mit Namen wie 8087 , 80287 und 80387, abgekürzt x87, erweitert werden. Dies war auch als NPX ( Numeric Processor eXtension ) bekannt, ein treffender Name, da die Coprozessoren, obwohl sie hauptsächlich für Gleitkommaberechnungen verwendet wurden, auch Ganzzahloperationen sowohl im Binär- als auch im Dezimalformat durchführten. Mit sehr wenigen Ausnahmen integrierten der 80486 und die nachfolgenden x86-Prozessoren diese x87-Funktionalität dann auf dem Chip, wodurch die x87-Befehle de facto zu einem integralen Bestandteil des x86-Befehlssatzes wurden.

Jedes x87-Register, bekannt als ST(0) bis ST(7), ist 80 Bit breit und speichert Zahlen im IEEE-Gleitkomma-Standard- Double-Extended-Precision-Format. Diese Register sind als Stapel mit ST(0) als oberstem Stapel organisiert. Dies wurde getan, um Opcode-Raum zu sparen, und die Register sind daher nur für einen der Operanden in einem Register-zu-Register-Befehl wahlfrei zugänglich; ST0 muss immer einer der beiden Operanden sein, entweder die Quelle oder das Ziel, unabhängig davon, ob der andere Operand ST(x) oder ein Speicheroperand ist. Ein wahlfreier Zugriff auf die Stapelregister kann jedoch durch einen Befehl erhalten werden, der ein beliebiges spezifiziertes ST(x) mit ST(0) austauscht.

Die Operationen umfassen arithmetische und transzendente Funktionen, einschließlich trigonometrischer und exponentieller Funktionen, und Anweisungen, die gemeinsame Konstanten (wie 0; 1; e, die Basis des natürlichen Logarithmus; log2(10); und log10(2)) in eine von laden die Stapelregister. Während die Integer-Fähigkeit oft übersehen wird, kann der x87 mit einem einzigen Befehl mit größeren Integern arbeiten als der 8086, 80286, 80386 oder jede x86-CPU ohne 64-Bit-Erweiterungen, und wiederholte Integer-Berechnungen sogar mit kleinen Werten (z. 16-Bit) kann beschleunigt werden, indem Integer-Befehle auf der x86-CPU und dem x87 parallel ausgeführt werden. (Die x86-CPU läuft weiter, während der x87-Coprozessor rechnet, und der x87 setzt ein Signal an den x86, wenn er fertig ist, oder unterbricht den x86, wenn er aufgrund eines Fehlers Aufmerksamkeit benötigt.)

MMX

MMX ist ein von Intel entwickelter SIMD- Befehlssatz, der 1997 für den Pentium MMX- Mikroprozessor eingeführt wurde. Der MMX-Befehlssatz wurde aus einem ähnlichen Konzept entwickelt, das erstmals auf dem Intel i860 verwendet wurde . Es wird auf den meisten nachfolgenden IA-32-Prozessoren von Intel und anderen Anbietern unterstützt. MMX wird typischerweise für die Videoverarbeitung verwendet (zB in Multimedia-Anwendungen).

MMX fügte der Architektur 8 neue Register hinzu , bekannt als MM0 bis MM7 (im Folgenden als MMn bezeichnet ). In Wirklichkeit waren diese neuen Register nur Aliase für die bestehenden x87-FPU-Stack-Register. Daher würde sich alles, was mit dem Gleitkomma-Stack gemacht wurde, auch auf die MMX-Register auswirken. Im Gegensatz zum FP-Stack waren diese MMn-Register fest, nicht relativ, und daher wahlfrei zugänglich. Der Befehlssatz übernahm nicht die stapelähnliche Semantik, so dass bestehende Betriebssysteme den Registerzustand beim Multitasking ohne Modifikationen immer noch korrekt speichern und wiederherstellen konnten.

Jedes der MMn-Register sind 64-Bit-Ganzzahlen. Eines der Hauptkonzepte des MMX-Befehlssatzes ist jedoch das Konzept der gepackten Datentypen , was bedeutet, dass anstelle des gesamten Registers für eine einzelne 64-Bit-Ganzzahl ( Quadword ) zwei 32-Bit-Ganzzahlen enthalten sein können ( Doppelwort ), vier 16-Bit-Ganzzahlen ( Wort ) oder acht 8-Bit-Ganzzahlen ( Byte ). Angesichts der Tatsache, dass die 64-Bit-MMn-Register des MMX mit dem FPU-Stack als Alias ​​versehen sind und jedes der Gleitkommaregister 80 Bit breit ist, werden die oberen 16 Bit der Gleitkommaregister in MMX nicht verwendet. Diese Bits werden von jedem MMX-Befehl auf alle Einsen gesetzt, die der Gleitkommadarstellung von NaNs oder Unendlichkeiten entsprechen.

3DNJetzt!

1997 führte AMD 3DNow! ein. Die Einführung dieser Technologie fiel mit dem Aufkommen von 3D- Unterhaltungsanwendungen zusammen und wurde entwickelt, um die Vektorverarbeitungsleistung der CPU bei grafikintensiven Anwendungen zu verbessern . Entwickler von 3D-Videospielen und Anbieter von 3D-Grafikhardware verwenden 3DNow! um ihre Leistung auf AMDs K6- und Athlon- Prozessorserien zu verbessern .

3DNJetzt! wurde entwickelt, um die natürliche Entwicklung von MMX von Integer zu Gleitkommazahlen zu sein. Als solche verwendet es genau die gleiche Registerbenennungskonvention wie MMX, d. h. MM0 bis MM7. Der einzige Unterschied besteht darin, dass anstelle von Ganzzahlen in diese Register zwei Gleitkommazahlen mit einfacher Genauigkeit in jedes Register gepackt werden. Der Vorteil des Aliasing der FPU-Register besteht darin, dass die gleichen Befehls- und Datenstrukturen, die zum Speichern des Zustands der FPU-Register verwendet werden, auch verwendet werden können, um 3DNow! Staaten registrieren. Somit sind keine speziellen Modifikationen an Betriebssystemen erforderlich, die sonst nichts davon wissen würden.

SSE und AVX

1999 führte Intel den Befehlssatz Streaming SIMD Extensions (SSE) ein , gefolgt von SSE2 im Jahr 2000. Die erste Ergänzung ermöglichte das Auslagern grundlegender Gleitkommaoperationen vom x87-Stack und die zweite machte MMX fast obsolet und ermöglichte es, dass die Befehle von herkömmlichen Compilern realistisch angesteuert werden konnten. SSE3 wurde 2004 zusammen mit der Prescott- Revision des Pentium 4- Prozessors eingeführt und fügte spezifische Speicher- und Thread- Handling-Anweisungen hinzu, um die Leistung von Intels HyperThreading- Technologie zu steigern . AMD lizenzierte den SSE3-Befehlssatz und implementierte die meisten SSE3-Befehle für seine Revision E und spätere Athlon 64-Prozessoren. Der Athlon 64 unterstützt kein HyperThreading und es fehlen die SSE3-Anweisungen, die nur für HyperThreading verwendet werden.

SSE hat alle Legacy-Verbindungen zum FPU-Stack verworfen. Dies bedeutete auch, dass dieser Befehlssatz alle Legacy-Verbindungen zu früheren Generationen von SIMD-Befehlssätzen wie MMX verworfen hat. Aber es entlastete die Designer und erlaubte ihnen, größere Register zu verwenden, die nicht durch die Größe der FPU-Register beschränkt sind. Die Designer erstellten acht 128-Bit-Register mit den Namen XMM0 bis XMM7. ( Anmerkung : In AMD64 wurde die Anzahl der SSE-XMM-Register von 8 auf 16 erhöht.) Der Nachteil war jedoch, dass Betriebssysteme diese neuen Anweisungen kennen mussten, um ihre Registerzustände speichern zu können . Daher hat Intel eine leicht modifizierte Version des geschützten Modus namens Enhanced Mode entwickelt, die die Verwendung von SSE-Anweisungen ermöglicht, während sie im normalen geschützten Modus deaktiviert bleiben. Ein Betriebssystem, das SSE kennt, aktiviert den erweiterten Modus, während ein nicht bewusstes Betriebssystem nur in den traditionellen geschützten Modus wechselt.

SSE ist ein SIMD-Befehlssatz, der nur mit Gleitkommawerten wie 3DNow! funktioniert. Im Gegensatz zu 3DNow! es trennt alle Legacy-Verbindungen zum FPU-Stack. Da es größere Register als 3DNow! hat, kann SSE die doppelte Anzahl von Gleitkommazahlen einfacher Genauigkeit in seine Register packen . Die ursprüngliche SSE war auf Zahlen mit einfacher Genauigkeit beschränkt, wie 3DNow!. Der SSE2 führte auch die Fähigkeit ein, Zahlen mit doppelter Genauigkeit zu packen , die 3DNow! hatte keine Möglichkeit, da eine Zahl mit doppelter Genauigkeit 64 Bit groß ist, was der vollen Größe eines einzelnen 3DNow! MMn registrieren. Bei 128 Bits könnten die SSE-XMMn-Register zwei Gleitkommazahlen mit doppelter Genauigkeit in ein Register packen. Somit ist SSE2 für wissenschaftliche Berechnungen viel besser geeignet als SSE1 oder 3DNow!, die auf nur einfache Genauigkeit beschränkt waren. SSE3 führt keine zusätzlichen Register ein.

Die Advanced Vector Extensions (AVX) verdoppelten die Größe von SSE-Registern auf 256-Bit-YMM-Register. Es führte auch das VEX-Codierungsschema ein, um die größeren Register aufzunehmen, sowie einige Befehle zum Permutieren von Elementen. AVX2 führte keine zusätzlichen Register ein, zeichnete sich jedoch durch das Hinzufügen von Maskierungs-, Gather- und Shuffle-Anweisungen aus.

AVX-512 bietet eine weitere Erweiterung auf 32 512-Bit-ZMM-Register und ein neues EVEX-Schema. Im Gegensatz zu seinen Vorgängern mit monolithischer Erweiterung ist es in viele Untergruppen unterteilt, die von bestimmten CPU-Modellen implementiert werden können.

Physische Adresserweiterung (PAE)

Physical Address Extension oder PAE wurde zuerst beim Intel Pentium Pro und später von AMD bei den Athlon-Prozessoren hinzugefügt , um die Adressierung von bis zu 64 GB RAM zu ermöglichen. Ohne PAE ist der physische Arbeitsspeicher im 32-Bit-geschützten Modus normalerweise auf 4  GB begrenzt . PAE definiert eine andere Seitentabellenstruktur mit breiteren Seitentabelleneinträgen und einer dritten Ebene der Seitentabelle, die zusätzliche Bits der physikalischen Adresse ermöglicht. Obwohl die anfänglichen Implementierungen auf 32-Bit-Prozessoren theoretisch bis zu 64 GB RAM unterstützten, schränkten Chipsatz- und andere Plattformbeschränkungen oft ein, was tatsächlich verwendet werden konnte. x86-64- Prozessoren definieren Seitentabellenstrukturen, die theoretisch bis zu 52 Bit physikalischer Adresse zulassen, obwohl auch hier Chipsatz- und andere Plattformbedenken (wie die Anzahl der verfügbaren DIMM-Steckplätze und der maximal mögliche Arbeitsspeicher pro DIMM) eine so große physikalische Adresse verhindern Raum realisiert werden. Auf x86-64-Prozessoren muss der PAE-Modus vor dem Umschalten in den Long-Modus aktiv sein und muss aktiv bleiben, während der Long-Modus aktiv ist, so dass es im Long-Modus keinen "non-PAE"-Modus gibt. Der PAE-Modus hat keinen Einfluss auf die Breite von linearen oder virtuellen Adressen.

x86-64

In Supercomputer- Clustern (wie durch TOP-500- Daten verfolgt und im obigen Diagramm dargestellt, zuletzt aktualisiert 2013), ermöglichte das Erscheinen von 64-Bit-Erweiterungen für die x86-Architektur 64-Bit-x86-Prozessoren von AMD und Intel (blau schraffiert und blau schraffiert, im Diagramm), um die meisten RISC-Prozessorarchitekturen zu ersetzen, die zuvor in solchen Systemen verwendet wurden (einschließlich PA-RISC , SPARC , Alpha und andere) und 32-Bit-x86 (grün im Diagramm), obwohl Intel anfangs erfolglos versucht hat, Ersetzen Sie x86 durch eine neue inkompatible 64-Bit-Architektur im Itanium- Prozessor. Die wichtigste Nicht-x86-Architektur, die ab 2014 noch in Supercomputing-Clustern verwendet wird, ist die Power ISA, die von IBM POWER-Mikroprozessoren verwendet wird (blau mit Rautenkacheln im Diagramm), mit SPARC als entfernter Sekunde.

In den 2000er Jahren waren die Grenzen von 32-Bit-x86-Prozessoren bei der Speicheradressierung ein Hindernis für ihren Einsatz in Hochleistungs-Computing-Clustern und leistungsstarken Desktop-Workstations. Das in die Jahre gekommene 32-Bit-x86 konkurrierte mit viel fortschrittlicheren 64-Bit-RISC-Architekturen, die viel mehr Speicher adressieren konnten. Intel und das gesamte x86-Ökosystem benötigten 64-Bit-Speicheradressierung, wenn x86 die 64-Bit-Computing-Ära überleben sollte, da Workstation- und Desktop-Softwareanwendungen bald an die Grenzen der 32-Bit-Speicheradressierung stießen. Intel hielt es jedoch für den richtigen Zeitpunkt, einen mutigen Schritt zu wagen und den Übergang zu 64-Bit-Desktop-Computern für eine Abkehr von der x86-Architektur im Allgemeinen zu nutzen, ein Experiment, das letztendlich scheiterte.

Im Jahr 2001 versuchte Intel, eine Nicht-x86-64-Bit-Architektur namens IA-64 in seinem Itanium- Prozessor einzuführen , zunächst mit dem Ziel, den Markt für Hochleistungscomputer zu erschließen , in der Hoffnung, dass er schließlich das 32-Bit-x86 ersetzen würde. Obwohl IA-64 nicht mit x86 kompatibel war, bot der Itanium-Prozessor Emulationsfähigkeiten zum Übersetzen von x86-Befehlen in IA-64, aber dies beeinträchtigte die Leistung von x86-Programmen so stark, dass es für die Benutzer selten, wenn überhaupt, wirklich nützlich war: Programmierer x86-Programme für die IA-64-Architektur neu schreiben sollten oder ihre Leistung auf Itanium um Größenordnungen schlechter wäre als auf einem echten x86-Prozessor. Der Markt lehnte den Itanium-Prozessor ab, da er die Abwärtskompatibilität brach und es vorzog, weiterhin x86-Chips zu verwenden, und nur sehr wenige Programme wurden für IA-64 umgeschrieben.

AMD beschloss, einen anderen Weg in Richtung 64-Bit-Speicheradressierung einzuschlagen, um sicherzustellen, dass die Abwärtskompatibilität nicht darunter leidet. Im April 2003 veröffentlichte AMD den ersten x86-Prozessor mit 64-Bit-Allzweckregistern, den Opteron , der mit der neuen x86-64- Erweiterung (auch bekannt als AMD64 oder x64) weit mehr als 4 GB virtuellen Speicher adressieren kann  . Die 64-Bit-Erweiterungen der x86-Architektur wurden nur im neu eingeführten Long-Modus aktiviert , daher konnten 32-Bit- und 16-Bit-Anwendungen und -Betriebssysteme einfach weiterhin einen AMD64-Prozessor im geschützten oder anderen Modus verwenden, ohne auch nur den geringsten Verlust von Leistung und mit voller Kompatibilität zurück zu den ursprünglichen Anweisungen des 16-Bit-Intel 8086. Der Markt reagierte positiv und übernahm die 64-Bit-AMD-Prozessoren sowohl für Hochleistungsanwendungen als auch für Geschäfts- oder Heimcomputer.

Da der Markt den inkompatiblen Itanium-Prozessor ablehnte und Microsoft AMD64 unterstützte, musste Intel reagieren und stellte im Juli 2004 seinen eigenen x86-64-Prozessor vor, den Prescott Pentium 4. Damit ist der Itanium-Prozessor mit seinem IA-64-Befehlssatz selten verwendet und x86 ist durch seine x86-64-Inkarnation immer noch die vorherrschende CPU-Architektur in nicht eingebetteten Computern.

x86-64 führte auch das NX-Bit ein , das einen gewissen Schutz vor Sicherheitslücken bietet, die durch Pufferüberläufe verursacht werden .

Als Ergebnis des 64-Bit-Beitrags von AMD zur x86-Linie und der anschließenden Akzeptanz durch Intel stellten die 64-Bit-RISC-Architekturen keine Bedrohung für das x86-Ökosystem dar und verschwanden fast vom Workstation-Markt. x86-64 wurde in leistungsstarken Supercomputern (in seinen AMD Opteron- und Intel Xeon- Inkarnationen) eingesetzt, einem Markt, der früher der natürliche Lebensraum für 64-Bit-RISC-Designs war (wie die IBM POWER-Mikroprozessoren oder SPARC- Prozessoren). Der große Sprung in Richtung 64-Bit-Computing und die Aufrechterhaltung der Abwärtskompatibilität mit 32-Bit- und 16-Bit-Software ermöglichten es der x86-Architektur, heute eine äußerst flexible Plattform zu werden, wobei x86-Chips von kleinen Systemen mit geringem Stromverbrauch (z. Intel Quark und Intel Atom ) bis hin zu schnellen Gaming-Desktop-Computern (zum Beispiel Intel Core i7 und AMD FX / Ryzen ) und dominieren sogar große Supercomputing- Cluster , sodass effektiv nur die ARM 32-Bit- und 64-Bit-RISC-Architektur als Konkurrent übrig bleibt dem Smartphone- und Tablet- Markt.

Virtualisierung

Vor 2005 waren Prozessoren mit x86-Architektur nicht in der Lage, die Anforderungen von Popek und Goldberg zu erfüllen – eine Spezifikation für die Virtualisierung, die 1974 von Gerald J. Popek und Robert P. Goldberg erstellt wurde . Sowohl proprietäre als auch Open-Source x86-Virtualisierungs- Hypervisor-Produkte wurden jedoch mit softwarebasierter Virtualisierung entwickelt . Proprietäre Systeme umfassen Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player und Windows Virtual PC , während kostenlose und Open-Source- Systeme QEMU , Kernel-based Virtual Machine , VirtualBox und Xen umfassen .

Die Einführung der AMD-V- und Intel VT-x-Befehlssätze im Jahr 2005 ermöglichte es x86-Prozessoren, die Virtualisierungsanforderungen von Popek und Goldberg zu erfüllen.

AES

Siehe auch

Anmerkungen

Verweise

Weiterlesen

Externe Links