In den früheren Prozessoren waren nicht alle Register gleich:
- Auf den Chips war nicht genug Platz, um für jedes Register eine Addiereinheit zu haben.
- Mit 8 Bits waren nicht genügend Opcodes für alle möglichen Kombinationen von Quelle und Ziel verfügbar.
Die Annahme, dass ein bestimmtes Register immer einbezogen war, wenn der Addierer involviert war, machte den Chip weniger komplex und die Opcodes kürzer.
Beispielsweise konnte der 6510 (in Commodore 64 verwendet) nur mithilfe von Register A hinzufügen, und die Indizierung verwendete entweder X oder Y. Es gibt INC X- und INC Y-Anweisungen, aber keine INC A.
Da die Register unterschiedliche Verwendungszwecke hatten, wurden Mnemoniken ausgewählt, die ihre Verwendung widerspiegeln. ZB A, X und Y im 6510 (anstelle von A, B und C).
Die Namen im 8086 sind so gewählt, dass sie auch ihre Verwendung widerspiegeln. Bei 4 Allzweckregistern war es logisch, sie AX, BX, CX und DX zu nennen. Zusätzliche Indexregister wurden als BP und SP (mnemonisch: Basiszeiger, Stapelzeiger) bezeichnet.
Da viele Opcodes auf 16 Bit erweitert wurden, gab es etwas Platz, um anzuzeigen, welches von vier Registern verwendet wurde. Einige der historischen Gründe galten jedoch immer noch, da CX etwas Besonderes war: REP und dergleichen, bei denen es sich um 8-Bit-Opcodes handelt, verwenden immer CX als Zähler. Eine einfache Mnemonik, CX = Counter, hilft, sich zu merken, welcher verwendet wird.
Die Opcodes für Nachfolger des 8086 mussten abwärtskompatibel sein und sind aufgrund der Opcodes mit variabler Länge ein Chaos. Als 32-Bit-Busse häufiger wurden, wurden Prozessoren mit fester Opcode-Länge ausprobiert. Dies vereinfacht den Dekodierungsteil der CPU, wodurch Speicherplatz freigesetzt wird, der beispielsweise für mehr Register verwendet werden könnte.
Prozessoren, die dieser Denkrichtung folgten, werden im Gegensatz zur CISC (Complex Instruction Set CPU) als RISC-Prozessoren (Reduced Instruction Set CPU) bezeichnet.
Mehr Register bedeuten weniger Überlauf in den Speicher. Grundsätzlich sind Register der schnellste verfügbare Cache. Daher ist es auch heutzutage eine gute Idee, die Anzahl der Register zu erhöhen. Das Fehlen spezialisierter Anweisungen wurde (hoffentlich mehr als) durch den schnelleren Durchsatz einfacher Anweisungen kompensiert.
32-Bit-Opcodes mit fester Länge haben genug Platz, um eine Quelle, eine zweite Quelle, eine Operation und ein Ziel aufzunehmen. SPARC schaffte es, jeweils 5 Bits für die Quelle, die zweite Quelle und das Ziel zu wringen, und daher waren 32 Register gleichzeitig sichtbar.
32 Register sind zu viele, um Buchstaben zu verwenden, und sie waren sowieso größtenteils gleich, daher lag es nahe, sie zu nummerieren. Das 'R' wurde verwendet, um sie von den Konstanten 0..31 zu unterscheiden, und 'R' war eine einfache Bezeichnung für Register. Deshalb: R0..R31.
Im Laufe der Jahre haben der Pentium und seine Nachfolger die Rückwärtskompatibilität aufrechterhalten. Viele der erfolgreicheren RISC-Ideen wurden jedoch ebenfalls einbezogen. Häufig werden diese neuen, RISC-ähnlichen Anweisungen schneller ausgeführt als die abwärtskompatiblen Versionen.
Die Anzahl der Register wurde ebenfalls von Intel erhöht, um die Anzahl der Speicherzugriffe zu verringern.
Und anscheinend hat Intel endlich angefangen, die R-Notation zu verwenden. Die Abwärtskompatibilität stellt sicher, dass AX, BX, ... erhalten bleiben, aber ich wette, dass AX nur ein Synonym für z. B. R0 ist.
Haftungsausschluss : Das Obige ist meine Sicht auf die Geschichte. Es wird unvollständig sein, da ich nicht dabei war, die früheren Teile der Geschichte aus erster Hand mitzuerleben. Trotzdem hoffe ich, dass es einigen nützlich ist.