IA-32
# IA-32

Als IA-32, auch IA32, bezeichnete Intel seit Ende der 1990er Jahre die Befehlssatzarchitektur von x86-Prozessoren. Die Abkürzung „IA“ steht für englisch Intel Architecture und „32“ für die 32-Bit-Architektur ab dem 80386 – die zum damaligen Zeitpunkt aktuelle x86-Architektur. Mit der Befehlssatzerweiterung x64 wurde IA-32 seit Anfang der 2000er Jahre durch AMD zur 64-Bit-Architektur erweitert.
x86 ist die generelle Bezeichnung für die Prozessorarchitektur, die mit dem 8086-Prozessor von Intel 1978 als 16-Bit-Architektur begründet wurde. Mit dem 80386 wurde 1985 von Intel eine Erweiterung des Befehlssatzes auf 32-Bit eingeführt, weshalb für 80386-kompatible Mikroprozessoren auch oft die Bezeichnung i386 verwendet wird bzw. retronym IA-32. Ab 1999 wurde von AMD an der Erweiterung des Befehlssatzes auf 64-Bit gearbeitet, anfangs unter der Bezeichnung x86-64, die 2003 als AMD64 und 2005 von Intel als Intel 64 eingeführt wurde. Diese nunmehr oft als x64 bezeichnete Erweiterung des x86-Befehlssatzes beinhaltet die „Intel Architecture, 32 Bit“ ebenfalls, denn jeder 64-Bit-x86-Prozessor ist auch ein (vollwertiger) 32-Bit- und 16-Bit-x86-Prozessor. In Anlehnung an x86-64 wird 32-Bit-x86 teils auch als x86-32 bezeichnet.
Die x86-Architektur wird von Intel und AMD weiterentwickelt.

## Itanium

Intel hatte die x86-Architektur bereits als „Intel Architecture“ bezeichnet, als man mit der Neuentwicklung des Itanium-Prozessors gemeinsam mit Hewlett-Packard 2001 auf den Markt kam. Die Itanium-Architektur ist eine reine 64-Bit-Architektur und mit x86 bzw. IA-32 inkompatibel. Diese wurde von Intel auch „Intel Architecture 64“ (für 64 Bit, kurz IA-64) bezeichnet, da sie die 32-Bit-x86-Architektur nach den Plänen von Intel hätte langfristig vollständig ersetzen sollen. Die „alte“ x86-Architektur benannte Intel daher retronym in „Intel Architecture 32“ (für 32 Bit, kurz IA-32) um, was den Status beider Architekturen aus der Sicht von Intel verdeutlichen sollte.
IA-64 (Itanium) setzte sich jedoch nicht durch, auch deshalb nicht, weil die Architektur als Neuentwicklung nicht x86-kompatibel war – 32-Bit-x86 „IA-32“, die mit dem i386-Befehlssatz begründet wurde, war bereits durch viele Hersteller implementiert und etabliert. Seit den 1980er Jahren ist die x86-Architektur die weltweit am weitesten verbreitete Prozessorarchitektur für Personal Computer, was auch mit dem großen Erfolg des IBM PC und der damit begründeten Plattform der IBM-PC-kompatiblen Computer zusammenhängt, und es somit eine Vielzahl an bestehenden Programmen gab, die für den Itanium-Prozessor erst hätten neu programmiert werden müssen.
Als AMD 2003 die 64-Bit-Erweiterung AMD64 für die bestehende x86-Architektur einführte, wurde diese auf Anhieb vom Markt erfolgreich angenommen, unter anderem gerade deswegen, weil bestehende x86-Programme unverändert darauf liefen. Intel musste 2005 notgedrungen nachziehen und implementierte mit Intel 64 eine zu AMD64 kompatible 64-Bit-Erweiterung für die x86-Architektur IA-32, was die „Intel Architecture, 32 Bit“ nun zu einer 64-Bit-Architektur machte. Um Verwirrung zu vermeiden, wurde 64-Bit-x86 von Microsoft und Sun mit „x64“ (in Anlehnung an x86) bezeichnet, obwohl sich auch „x86-64“ als allgemeine Bezeichnung gehalten hat und zur Abgrenzung dazu retronym auch „x86-32“, in Anlehnung an x86-64, für die 32-Bit-x86-Architektur Verwendung findet, genau wie „x86-16“ vor allem in historischem Kontext für die 16-Bit-x86-Architektur.

## Architekturmerkmale

Die Intel Architecture 32 (Bit), IA-32, ist eine Weiterentwicklung der 16-Bit-Architekturen von Intels 8086- und 80286-Prozessoren. Alle Register, einschließlich der Adressregister, wurden in dieser Architektur auf 32 Bits erweitert. Die Anzahl der Register blieb gleich. Die Mnemonic der erweiterten Register wurden mit einem vorangestellten E, für extended (deutsch: erweitert), gekennzeichnet, beispielsweise EAX (32-Bit) von zuvor AX (16-Bit). Um Abwärtskompatibilität zu erzielen, wurden die 32-Bit-Register als Erweiterung der 16-Bit-Register der 80286-Architektur realisiert, sodass unter der Bezeichnungen für die 16-Bit-Register auf die unteren 16-Bit der 32-Bit-Register weiterhin zugegriffen werden kann: beispielsweise liefert AX auf die unteren 16-Bit des 32-Bit-EAX-Registers.
Der Adressbus ist 32 Bits breit und demzufolge ist die Adressierbarkeit auf 4 GiB (physischer Adressraum) begrenzt. Ausnahmen sind der 80386SX, welcher nur einen 24-Bit-Adressbus besaß. Ab dem Pentium Pro wurde mittels PAE eine Adresserweiterung auf 36 Bits erzielt, bei späteren Generationen sogar mehr, z. B. 40 Bits beim AMD K8. Mit 36 Bits lassen sich 64 GiB adressieren, sodass unter einer 32-Bit-Umgebung mit Einschränkungen mehr als 4 GiB genutzt werden können, wenn vom Betriebssystem PAE umgesetzt wird. Beispielsweise nutzt Linux die PAE-Erweiterung automatisch, wenn diese vom Prozessor unterstützt wird – bei neueren Distributionen ist PAE sogar Voraussetzung, da sich damit auch das NX-Bit nutzen lässt. Unter 32-Bit-Versionen von Windows von Microsoft hingegen wurde PAE wegen Kompatibilitätsproblemen mit bestehenden Treibern nicht genutzt, sodass 32-Bit-Windows-NT auf 4 GiB Arbeitsspeicher beschränkt ist.
Mit der 64-Bit-Befehlssatzerweiterung x64 wurde IA-32 zu einer 64-Bit-Architektur weiterentwickelt, wobei auch die Anzahl der Register verdoppelt wurde. Im neuen Betriebsmodus sind sowohl 32-Bit- als auch 64-Bit-Submodi vorhanden. Im Compatibility Mode bezeichneten x64-Betriebsmodus läuft IA-32-Software unverändert auch auf 64-Bit-x86-Prozessoren im 64-Bit-Modus, sodass 64-Bit-Betriebssysteme unveränderte IA-32-Programme nutzen können. Im neuen 64-Bit-Modus Long Mode (AMD) bzw. IA32e Mode (Intel) hingegen kann, neben 64-Bit-Software, auch dafür geschriebene (angepasste) 32-Bit-Software von der doppelten Anzahl an Registern profitieren (x32).

## Nomenklatur

| Architektur | übliche Bezeichnungen |
| 32-Bit-x86-Architektur des 80386 | i386 – i686, IA-32 (od. IA32), x86-32 |
| 64-Bit-x86-Architektur des Opteron | x86-64, amd64 (od. AMD64), x64 |
IA-32 bezeichnete ursprünglich nur die 32-Bit-x86-Architektur des 80386 und seiner Nachfolger, denn damals waren diese allesamt 32-Bit-Prozessoren. Problematisch wird die von Intel gewählte Bezeichnung erst mit der 64-Bit-Erweiterung x64 – denn diese zählt als Weiterentwicklung und Erweiterung von IA-32, zu der x64 voll kompatibel ist. Retronym finden sich zur genaueren Unterscheidung daher auch die Bezeichnungen x86-32 für die 32-Bit- und x86-64 für die 64-Bit-x86-Architektur.
Zur Unterscheidung findet sich oft IA-32 (auch als „IA32“ oder „ia32“, manchmal aber auch „i386“) für die 32-Bit-x86-Architektur bzw. x64 (oder amd64, „x86-64“ oder „x86_64“) für die 64-Bit-x86-Architektur. Beispiele dafür sind u. a. diverse Betriebssysteme, so unterscheidet etwa Slackware zwischen „ia32“ (32-Bit-x86) und „x64_64“ (64-Bit-x86), oder auch UEFI-Bootloader auf Wechseldatenträgern (32-Bit-EFI auf x86: \EFI\Boot\BootIA32.efi, 64-Bit-EFI auf x86: \EFI\Boot\Bootx64.efi).
Die von Intel und HP entwickelte Itanium-Architektur, auch mit „Intel Architecture 64 (Bit)“ bzw. abgekürzt „IA-64“ bezeichnet, ist keine x86-Architektur. Es besteht jedoch die Gefahr der Verwechslung mit „x64“, der 64-Bit-x86-Architektur.

## Betriebsarten

Neben dem Real Mode, in dem kompatibel zum 16-Bit-Intel-8086 der konventionelle Arbeitsspeicher und der obere Speicherbereich, das ist der erste, untere Megabyte des Arbeitsspeichers, ohne Beschränkung über Offset und Segment angesprochen werden kann, kennt die Intel Architecture 32-Bit zwei bzw. drei weitere Betriebsarten:
* Protected Mode, der bis zu 4 GB Speicher durchgängig (linear) adressieren kann und einen hardwareseitigen Speicherschutz garantiert (über die Virtuelle Speicherverwaltung der MMU), was Multitasking-/Multiuser-Betriebssysteme mit präemptivem Multitasking ermöglicht.
* System Management Mode (SMM), welcher für die Leistungsreduktion und Hersteller-spezifische Eigenschaften eingesetzt wird. Der SMM läuft in einem separaten Arbeitsspeicher ab, sodass laufende Prozesse und Betriebssysteme nicht beeinflusst werden.
* Bei 64-Bit-x86-Prozessoren kommt zusätzlich der Long Mode (AMD) bzw. der IA32e Mode (Intel) hinzu, der die zwei Submodi 64-Bit Mode und Compatibility Mode bereitstellt. (Siehe x64#Betriebsmodi.)
Als Option des Protected Mode (32-Bit) existiert außerdem der Virtual 8086 Mode, der ein oder mehrere Real-Mode-Programme ausführen kann – dies wurde zur Ausführung von MS-DOS-kompatiblen Programmen unter 32-Bit-Betriebssystemen benötigt und war wichtig für eine schonende Migration von DOS zu moderneren Betriebssystemen. Der auf 64-Bit-x86 „x64“ vorhandene Compatibility Mode ist, abgesehen vom Fehlen des Virtual 8086 Mode, vollständig zum 32-Bit-Protected-Mode der „Intel Architecture 32-Bit“, IA-32, kompatibel. IA-32-Programme laufen damit weiterhin auch in 64-Bit-Betriebsumgebungen. Da seit der Umstellung auf 64-Bit MS-DOS-kompatible Programme nur noch relativ wenig genutzt werden, spielt der Virtual 8086 Mode keine sehr große Rolle mehr; Wenn benötigt müssen auf 64-Bit-Betriebssystemen 16-Bit-Modi vollständig emuliert werden.

## Protected Mode: Virtuelle Speicherverwaltung und Speicherschutz
### Virtuelle Speicherverwaltung

Die neue Virtuelle Speicherverwaltung ist primär für den Multitasking-Betrieb ausgelegt (Protected Mode). Mittels Memory Management Unit (MMU) können mehrere Programme im Speicher konfliktfrei quasi-gleichzeitig ausgeführt werden. Hierzu wird jedes Programm in einem (virtuellen) Speicherraum ausgeführt, in dem es alleine existiert und damit nicht mit anderen Programmen in Speicherzugriffskonflikte kommen kann, so dass Speicherschutz erzielt wird (z. B. „Programm A überschreibt irrtümlich bei Programm B eine Variable im Speicher“ kann nicht mehr auftreten). Dies erreicht die MMU über eine Tabelle (TLB) in der für die zuletzt lokalisierten virtuellen Adresse aller Programme die echte physische Adresse eines Speicherblocks vermerkt ist. Bei jedem Zugriff (Speicher anfordernd, schreibend oder lesend) wird, transparent für Programme und Programmierer, auf eine eindeutige physische Adresse umgelenkt. Ein weiterer positiver Effekt ist, dass eine Speicherfragmentierung des physischen Speichers nicht mehr auftreten kann. Durch die Adressumsetzung kann die MMU fast beliebig zerstückelten physischen Speicher als durchgängig zugreifbaren Block virtuellen Speichers dem Programm präsentieren. Dies ist ein effektiver Mechanismus, so lange die Größe des physischen Speichers deutlich kleiner ist als die des virtuellen Adressraums (4 GByte). Durch die kontinuierlich fallenden RAM-Speicherpreise ist dies inzwischen nicht mehr gegeben; der virtuelle Speicherraum kann die Fragmentierung des physischen Speichers nicht mehr immer kaschieren, da er nun selbst zu stark fragmentiert sein kann.

### Virtuelle Adressübersetzung

Die IA-32-Architektur verwendet eine 48 Bit breite segmentierte logische Adresse, welche zu 16 Bit aus Selektor und zu 32 Bit aus Offset besteht. Durch die Segmentierung wird die logische Adresse in eine lineare 32-Bit-Adresse übersetzt und kann anschließend durch den Paging-Mechanismus in eine physische 32-Bit-Adresse übersetzt werden. Wird Paging vom System nicht eingesetzt, so ist die lineare 32-Bit-Adresse die physische Adresse.

### Schutzfunktionen durch die Virtuelle Speicherverwaltung

Die MMU enthält vier zentrale Systemregister GDTR (Global Descriptor Table Register), IDTR (Interrupt Descriptor Table Register), LDTR (Local Descriptor Table Register) und TR (Task Register). Damit werden die Schutzmechanismen realisiert.
Die IA-32 Architektur enthält für den Multitasking/Multiuser-Betrieb die folgenden fünf Schutzfunktionen:
* Typ-Check
* Limit-Check
* Zugriff auf Daten
* Kontroll-Transfer
* Instruction-Check
Diese Schutzfunktionen werden mit verschiedenen Hardware-Mechanismen realisiert.

## Weitere Funktionen

In den nachfolgenden CPU-Generationen wurden weitere Funktionen hinzugefügt:
* Die Modelle des i486DX haben einen mathematischen Koprozessor bereits integriert, zusätzlich wurde ein Cache auf den Chip integriert (die Budget-Version i486 SX wurde mit deaktiviertem Koprozessor gefertigt). Außerdem wurde die Ausführungseinheit nach dem Fließbandprinzip aufgebaut, genannt Prozessor-Pipeline, was den Befehlsdurchsatz deutlich erhöht.
* Mit dem Pentium wurde eine zweite Ausführungseinheit der Architektur hinzugefügt. Diese nun parallelen Ausführungseinheiten, genannt Pipelines U und V, ermöglichen superskalare Programmausführung über Out-of-order execution des Prozessors.
* Beim Pentium MMX wurden Befehle hinzugefügt, die mehrere ganzzahlige Daten gleichzeitig bearbeiten (SIMD) – dies ist vor allem für Multimedia-Daten sinnvoll. MMX steht für “Matrix Math Extensions”, besonders vom Marketing aber auch häufig “Multi Media Extensions” tituliert.
* Mit dem Pentium III wurden die SIMD-Befehle erweitert, um auch Gleitkommazahlen bearbeiten zu können (Streaming SIMD Extensions/SSE).
* Beginnend mit den Prescott-Modellen der Xeon-/Pentium-4-Reihe erhalten die Prozessoren eine Erweiterung um einen 64-Bit-Modus (Intel 64, früher auch EM64T genannt), der weitgehend dem AMD64-Modus der Opteron- und Athlon-64-CPUs von Mitbewerber AMD entspricht.