it-swarm.dev

Wofür steht das 'R' in x64-Registernamen?

Ich weiß, dass die 32-Bit-Register wie die 16-Bit-Register mit dem Präfix 'E' benannt wurden, um erweitert zu bedeuten. Ich habe immer angenommen, dass dies eine Erweiterung von 16 auf 32 Bit bedeutet, obwohl ich das nie explizit angegeben habe.

Ich habe versucht herauszufinden, wofür das "R" steht, aber meine Google-Kenntnisse haben mich gescheitert. Weiß jemand?

28
Matt

Es bedeutet register und es ist nicht alles aus historischen Gründen.

Der historische Teil ist, dass Intel es sich zur Gewohnheit gemacht hat, Register mit Buchstaben des 8008 (A bis E plus H und L) aufzuzählen. Dieses Schema war zu dieser Zeit mehr als ausreichend, da Mikroprozessoren nur sehr wenige Register hatten und wahrscheinlich nicht mehr erhielten, und die meisten Designs taten dies. Die vorherrschende Meinung war damals, dass Software für neue CPUs neu geschrieben werden würde, sobald sie erschienen, so dass das Ändern des Registernamensschemas zwischen den Modellen keine große Sache gewesen wäre. Niemand hat vorausgesehen, dass sich der 8088 nach seiner Integration in den IBM-PC zu einer "Familie" entwickelt, und das Joch der Abwärtskompatibilität zwang Intel dazu, Schemata wie das "E" in 32-Bit-Registern zu verwenden, um ihn zu warten.

Der nicht-historische Teil ist alles praktisch. Die Verwendung von Buchstaben für Allzweckregister beschränkt Sie auf 26, weniger, wenn Sie diejenigen aussortieren, die zu Verwechslungen mit den Namen von Sonderregistern wie dem Programmzähler, den Flags oder dem Stapelzeiger führen können.

Ich habe keine Quelle, um dies zu bestätigen, aber ich vermute, dass die Wahl von R als Präfix und die Einführung von R8 bis R15 auf 64-Bit-CPUs einen Übergang zu nummerierten Registern signalisieren, was die Norm war unter 32-Bit-Architekturen und größeren Architekturen, die seit fast einem halben Jahrhundert nicht mehr aus dem 8008 stammen. IBM hat es in den 1960er Jahren mit dem 360 geschafft und es folgten PowerPC, DEC Alpha, MIPS, SPARC, ARM, Intels i860 und i960 sowie einige andere, die längst vergessen sind.

Sie werden feststellen, dass die vorhandenen Register gut in R0 bis R7 passen würden, wenn sie existieren würden, und es würde mich kein bisschen überraschen, wenn sie intern so behandelt würden. Die vorhandenen langen Register (RAX/EAX/AX/AL, RBX/EBX/BX/BL usw.) bleiben wahrscheinlich bestehen, bis die Sonne ausbrennt.

33
Blrfl

In den früheren Prozessoren waren nicht alle Register gleich:

  • Auf den Chips war nicht genügend Platz, um für jedes Register eine Addierereinheit zu haben.
  • Mit 8 Bit waren nicht genügend Opcodes für alle möglichen Kombinationen von Quelle und Ziel verfügbar.

Die Annahme, dass immer ein bestimmtes Register beteiligt war, wenn der Addierer beteiligt war, machte den Chip weniger komplex und die Opcodes kürzer.

Z.B. Der 6510 (in Commodore 64 verwendet) konnte nur mit Register A hinzufügen, und die Indizierung wurde entweder mit X oder Y verwendet. 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. Z.B. A, X und Y im 6510 (anstelle von A, B und C).

Die Namen im 8086 werden so ausgewä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 BP und SP (Mnemonik: Basiszeiger, Stapelzeiger) genannt.

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 ähnliche Likes, bei denen es sich um 8-Bit-Opcodes handelt, verwenden immer CX als Zähler. Eine einfache Mnemonik, CX = Counter, hilft dabei, sich zu merken, welche verwendet wird.

Die Opcodes für Nachfolger des 8086 mussten abwärtskompatibel sein und sind aufgrund der Opcodes variabler Länge ein Chaos. Als 32-Bit-Busse häufiger wurden, wurden Prozessoren mit fester Opcode-Länge ausprobiert. Dies vereinfacht den Decodierungsteil der CPU, wodurch Speicherplatz frei wird, der z.B. mehr Register.

Prozessoren, die diesem Gedankengang folgten, werden im Gegensatz zur CISC (Complex Instruction Set CPU) als RISC-Prozessoren (Reduced Instruction Set CPU) bezeichnet.

Mehr Register führen zu einem geringeren Überlauf in den Speicher. Grundsätzlich sind Register der schnellste verfügbare Cache, daher ist es auch heute noch eine gute Idee, die Anzahl der Register zu erhöhen. Der Mangel an speziellen Anweisungen wurde (hoffentlich mehr als) durch den schnelleren Durchsatz einfacher Anweisungen ausgeglichen.

32-Bit-Opcodes mit fester Länge bieten genügend Speicherplatz für eine Quelle, eine zweite Quelle, eine Operation und ein Ziel. SPARC hat es geschafft, 5 Bits für jede Quelle, zweite Quelle und jedes Ziel zu wringen, und daher waren 32 Register gleichzeitig sichtbar.

32 Register sind zu viele, um Buchstaben zu verwenden, und sie waren sowieso meistens gleich, so dass die Nummerierung die naheliegende Wahl war. Das 'R' wurde verwendet, um sie von den Konstanten 0..31 zu unterscheiden, und 'R' war eine einfache Mnemonik für Register. Deshalb: R0..R31.

Im Laufe der Jahre haben der Pentium und seine Nachfolger die Abwärtskompatibilität beibehalten. Viele der erfolgreicheren RISC-Ideen wurden jedoch ebenfalls berücksichtigt. Häufig werden diese neuen, RISC-ähnlichen Anweisungen schneller ausgeführt als die abwärtskompatiblen Versionen.

Die Anzahl der Register wurde von Intel ebenfalls erhöht, um die Anzahl der Speicherzugriffe zu verringern.

Und anscheinend hat Intel endlich begonnen, die R-Notation zu verwenden. Die Abwärtskompatibilität stellt sicher, dass AX, BX, ... erhalten bleibt, aber ich würde wetten, dass AX nur ein Synonym für z. R0.


Haftungsausschluss : Das Obige ist meine Sicht auf die Geschichte. Es wird unvollständig sein, da ich nicht da war, um die früheren Teile der Geschichte aus erster Hand mitzuerleben. Trotzdem hoffe ich, dass es einigen nützlich ist.

9
Sjoerd

Es bedeutet nur "registrieren". Aus historischen Gründen.

5
Mike Nakis