Ich weiß, dass die 32-Bit-Register wie die 16-Bit-Register mit dem Präfix "E" (erweitert) benannt wurden. Ich bin immer davon ausgegangen, dass das bedeutet, von 16 auf 32 Bit erweitert, obwohl ich das nicht explizit gesehen habe.
Ich habe versucht herauszufinden, wofür das "R" steht, aber meine Google-Kenntnisse haben mich im Stich gelassen. Weiß jemand?
architecture
x86
Matt
quelle
quelle
Antworten:
Es bedeutet registrieren , 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) zu nummerieren. Dieses Schema war zu der Zeit mehr als angemessen, da Mikroprozessoren nur sehr wenige Register hatten und wahrscheinlich nicht mehr bekommen würden, und die meisten Entwürfe taten es. Die vorherrschende Meinung war damals, dass Software für neue CPUs neu geschrieben werden würde, so wie sie erscheinen, so dass das Ändern des Registernamensschemas zwischen den Modellen keine große Sache gewesen wäre. Niemand hat vorausgesehen, dass sich der 8088 nach der 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 einzuführen, um ihn beizubehalten.
Der nicht-historische Teil ist alles praktisch. Die Verwendung von Buchstaben für Allzweckregister beschränkt sich auf 26, weniger, wenn Sie diejenigen ausschließen, die zu Verwechslungen mit den Namen von Allzweckregistern 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 signalisiert, die bei 32-Bit- und -Registern die Norm waren - Größere Architekturen, die seit fast einem halben Jahrhundert nicht mehr aus dem 8008 stammen. IBM hat es in den 1960er Jahren mit dem 360 gemacht und es folgen PowerPC, DEC Alpha, MIPS, SPARC, ARM, Intels i860 und i960 sowie eine Reihe anderer, die lange in Vergessenheit geraten sind.Sie werden feststellen, dass die vorhandenen Register gut in R0 bis R7 passen würden, wenn sie existieren, und es würde mich kein bisschen überraschen, wenn sie intern so behandelt würden. Die vorhandenen Langregister (RAX / EAX / AX / AL, RBX / EBX / BX / BL usw.) werden wahrscheinlich so lange bestehen bleiben, bis die Sonne ausbrennt.
quelle
r0
-r7
oder unter VerwendungUAX
anstelle vonr8
etc. . "Herauszufinden, wie man die Register am besten benennt, war tatsächlich einer der schwierigsten Teile bei der Registererweiterung." (Siehe stackoverflow.com/a/35619528/224132 für weitere Informationen zu x86-64.) Außerdem ist die Reihenfolge in der binären Codierung nicht RAX / RBX / ..., sondern AX, CX, DX, BXIn den früheren Prozessoren waren nicht alle Register gleich:
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.
quelle
INX
oder benötigteINY
, obwohl der Code ein zusätzliches Byte belegte. Ich habe eine Menge Assembler für diesen Chip geschrieben und in der Praxis war diese Art von Inkrement selten, abgesehen davon, dass ich Mathe machte, die es brauchte.ADD 1
, es war also kein spezialisiertes "Erhöhen von A" erforderlich. Und ich kann mich auch nicht erinnern, es gebraucht zu haben.Es bedeutet nur "registrieren". Aus historischen Gründen.
quelle