The x86 and x64 Instruction Set Architecture


Die Bezeichnungen x86 und x64 stehen für unterschiedliche Befehlssatzarchitekturen bei CPUs. Der englische Fachbegriff für Befehlssatzarchitektur lautet Instruction Set Architecture, kurz ISA. Die Befehlssatzarchitektur beschreibt, welche Befehle eine CPU kennt und somit ausführen kann. Einen Befehl, den die CPU nicht kennt, kann sie auch nicht ausführen.

Eine auf eine bestimmte Befehlssatz-Architektur zugeschnittene Software ist auf allen CPUs lauffähig, die diese Befehlssatz-Architektur verwenden. Somit kann eine Software auf verschiedensten CPUS laufen und muss nicht jedes mal umgeschrieben werden, sobald eine neue CPU auf den Markt kommt, sofern diese die selbe Befehlssatz-Architektur verwendet. Einer Software ist es also beispielsweise egal, ob eine Intel- oder AMD-CPU im Rechner verbaut ist. Beide Hersteller setzen auf den x86 Befehlssatz und sind damit kompatibel zueinander, auch wenn sich die internen Designs ihrer CPUs drastisch voneinander unterscheiden.

Selbst die Mikroprozessor-Architektur einer CPU spielt dabei keine Rolle. Eine Mikroprozessor-Architektur ist die technische Realisierung einer CPU. Sie besagt, wie die CPU intern aufgebaut ist und welche Techniken verwendet wurden, um den Befehlssatz zu implementieren. Dieselbe Software läuft also sowohl auf einer Skylake-Mikroarchitektur als auch auf einer älteren Haswell-Mikroarchitektur oder den noch kommenden Mikroarchitekturen. Denn allen genannten Intel-Mikroarchitekturen ist gemein, dass sie den selben x86-Befehlssatz verwenden.

CPUs mit x86-Befehlssatz werden u.a. von Intel und AMD hergestellt. Die x86-Befehlssatzarchitektur ist außerdem die am weitesten verbreitetste Befehlssatzarchitektur. Die meiste Desktop-Software ist daher nur für x86 CPUs verfügbar.

Anfangs war die x86-Befehlssatzarchitektur noch eine 16-Bit-Architektur, hat sich aber zur 32-Bit-Architektur entwickelt. Benannt ist sie nach den Prozessoren der 8086-Reihe, mit der sie 1978 eingeführt wurde. Vom 8086 erschien eine abgespeckte, etwas billigere Variante namens 8088. Diese abgespeckte Variante verhalf der x86-Befehlssatzarchitektur zu ihrem Durchbruch, nachdem die Firma IBM sich dazu entschlossen hatte, den 8088 in deren IBM-PC zu verbauen. Der IBM-PC war damals (1981) Industriestandard, um den man nicht herum kam. Mit dem Lauf der Zeit wurde der 8086 immer weiter verbessert, wobei seine verbesserten Versionen immer dem Namensschema 80x86 folgten—zuerst 80186, dann 80286 und schließlich 80386, mit welchem die x86-Befehlssatzarchitektur 32-Bit-fähig gemacht wurde, um nicht von der Konkurrenz abgehängt zu werden. Aus Gründen der Abwärtskompatibilität behielt man beim 80386 noch die 16-Bit breiten Befehle bei.

Dessen Nachfolger taufte Intel nur noch 486 und brach mit dem bekannten Muster 80x86. So haben sich die Leute schließlich auch nur noch auf die x86-Architektur statt auf die 80x86-Architektur bezogen. Da man Ziffernkombinationen nicht markenrechtlich schützen darf, gingen Intel und die anderen CPU-Hersteller dazu über ihre neuen CPUs mit Wortmarken wie Pentium oder Celeron zu bezeichnen. Mit dem 486 endete namenstechnisch also die 80x86-Reihe. Da dessen Nachfolger aber alle bei der selben Befehlssatzarchitektur blieben, hatte sich die Bezeichnung x86 weiterhin gehalten.

Nachdem es um die Jahrtausendwende Zeit für 64-Bit-breite Befehle wurde (eine 32-Bit-Befehlssatzarchitektur lässt nur 2 hoch 32 Byte = 4 GiB Arbeitsspeicher zu, von denen nur 2 GiB von Benutzerprogrammen nutzbar waren), behielt Intel diesmal jedoch nicht die Abwärtskompatibilität zu Software bei, die für die bisherige Architektur mit 32-Bit geschrieben wurde. Die neue Befehlssatzarchitektur wurde IA-64 getauft (Intel Architecture with 64-bit) und unterstützte nur noch 64-Bit-Software. Die bisherige 32-Bit-Befehlssatzarchitektur wurde konsequenterweise in IA-32 umbenannt. IA-32 ist also der neue Name für die x86-Befehlssatzarchitektur. Logischerweise lief jegliche Software noch mit 32-Bit und war daher auf den neuen CPUs nicht lauffähig. Lauffähige 64-Bit-Software hatte noch niemand programmiert. Dementsprechend wurden die neuen Intel-CPUs komplett ignoriert, die neue IA-64-Architektur war ein großer Flop.

AMD hatte aus dem Fiasko gelernt und bei seiner eigenen, neu vorgestellten 64-Bit-Befehlssatzarchitektur die Abwärtskompatibilität zu 32-Bit beibehalten. Der 32-Bit-Befehlssatz wurde also um 64-Bit-breite Befehle ergänzt statt durch sie ersetzt zu werden. AMD brachte seine neue Befehlssatzarchitektur zwar unter dem Namen AMD64 auf den Markt, bezeichnete sie aus Marketinggründen wenig später aber als x86-64—um deutlich die Erweiterung des x86-Befehlssatzes und damit die Abwärtskompatibilität herauszustellen. Diese neue Befehlssatzarchitektur wurde ein großer Erfolg, was dazu führte, dass Intel nachgeben und seine gefloppte IA-64 Architektur zugunsten der neuen AMD64-Architektur aufgeben musste. Unter Linux ist zwar immer noch die Bezeichnung amd64 gebräuchlich, im Allgemeinen spricht man heute aber nur noch von x86-64 und nicht mehr von AMD64. Auch bei x86-64 wurde irgendwann die 86 weggelassen und auf x64 gekürzt. Mit dem Begriff x64 bezieht sich z.B. Windows explizit darauf, dass eine Software 64-Bit-fähig ist. Da x64 aber lediglich eine Erweiterung ist, welche die x86-Befehlssatzarchitektur 64-Bit-fähig gemacht hat, und somit eine Teilmenge von x86 ist, spricht man im Kontext von CPUs dennoch von x86, selbst wenn es sich um heutige 64-Bit-fähige CPUs handelt.

Neben x86 gibt es noch andere Befehlssatzarchitekturen, z.B. die ARM-Befehlssatzarchitektur, welche besonders in Chips für Mobilgeräte wie Smartphones und Tablets sowie in Embedded Geräten verwendet wird. Auf mobilen Geräten sind x86 CPUs noch nicht sehr performant, da für Befehlssatzarchitekturen wie x86 vom Typ CISC, wesentlich mehr Transistoren gebraucht werden als für die ARM-Befehlssatzarchitektur. Die ARM-Befehlssatzarchitektur hingegen ist vom Typ RISC und verwendet nur sehr wenige und einfache Befehle. Die ARM-Befehlssatzarchitektur ist daher viel billiger und energieeffizienter als x86 und deswegen noch Marktführer bei den mobilen Geräten. Apps für Smartphones sind aufgrund des anderen Befehlssatzes auch nicht kompatibel zu CPUs mit x86-Architektur und daher auf Desktop-Systemen nicht lauffähig (es sei denn, man emuliert den Befehlssatz). Heutzutage spielt es zwar kaum noch eine Rolle, ob eine Befehlssatzarchitektur vom Typ RISC (reduzierter Befehlssatz) oder CISC (komplexer Befehlssatz) ist, da sich beide Typen sehr stark aneinander angenähert und Elemente des jeweils anderen Typs aufgenommen haben. Intel versuchte jedoch schon mehrfach, sich von der x86-Befehlssatzarchitektur zu trennen um im mobilen Markt stärker Fuß fassen zu können, ist dabei allerdings jedes Mal gescheitert.

Das Unternehmen hinter der ARM-Architektur—ARM Limited—entwickelt selbst keine Chips, sondern vergibt lediglich Lizenzen an Firmen wie Apple, Samsung und sogar Intel. Diese Firmen stellen dann mit der Erlaubnis von ARM Limited und mithilfe des “Bauplans”, den sie erhalten haben, ihre darauf aufbauenden und angepassten Chips her. Diese selbstentworfenen Überarbeitungen verwenden sie dann in ihren eigenen Produkten, z.B. als A10 im iPhone 7.

Für Desktops sind CPUs mit ARM-Befehlssatzarchitektur zwar noch nicht leistungsstark genug. Für Laptops zumindest könnte es demnächst eventuell aber bereits ausreichen. Es hält sich schon seit längerem das Gerücht, dass Apple von Intel-CPUs mit x86-Befehlssatzarchitektur zur ARM-Befehlssatzarchitektur wechseln will. Gründe sind einerseits natürlich die höhere Energieeffizienz und damit längere Akku-Laufzeit. Andererseits wäre Apple auch nicht mehr von Intel und deren in letzter Zeit unzuverlässigen Veröffentlichungsterminen abhängig. Angeblich befindet sich bereits ein erstes MacBook mit ARM-Befehlssatzarchitektur in Entwicklung.