Die ursprünglichen Intel x86 - Prozessoren, der 8080 - Prozessor, waren 8 - Bit - Prozessoren, die speziell für Anwendungen wie kleine Computer (z. B. Registrierkassen) oder Gerätesteuerungen konzipiert waren Motorola 6800). Die folgende 8086-Prozessorfamilie (8086 und kostenreduziert 8088) waren 16-Bit-Mikroprozessoren, die die Intel 8080-Architektur fortsetzten, während sie mit 16-Bit-Hinzufügungen erweitert wurden, mit Blick auf allgemeinere Verwendungen des Prozessors.
Die Intel 8080 und die Intel 8086 Prozessoren hatten eine begrenzte Anzahl von Registern, von denen die meisten spezielle Zwecke hatten, daher hatten sie bestimmte Namen wie A, B oder AX, BX in ihrer Assemblersprache (Konkurrenten wie das Motorola 6800) hatte ähnliche Konventionen). Allgemein verwendbare Computer wie die IBM 360/370-Familie oder die DEC VAX verwendeten allgemeinere Namen für Komponenten wie Register (z. B. R0, R1 usw.), da die Register allgemeinen Zwecken dienten (Motorola 68000 32-Bit-Prozessor in vielen höheren End-Workstations) in den 1980er Jahren war ähnlich mit acht Datenregistern mit den Namen D0 bis D7).
Da Intel den x86-Prozessor in den Jahren seit den 1970er Jahren weiterentwickelt hat, hat es auch versucht, Rückwärtskompatibilität zu wahren, auch wenn die Zielanwendungen des x86 von spezialisierten Mikrocontroller-Anwendungen auf Allzweckcomputer erweitert wurden. Während dieser Entwicklung hat sich die Anzahl der Register erweitert, und viele der ursprünglichen Spezialregister haben sich zur allgemeinen Verwendung hin entwickelt, da Intel auch die Idee von Prozessorchip-Betriebsmodi mit dem 80286 einführte, um mit Abwärtskompatibilität zu helfen.
Mit den 64-Bit-Prozessoren benötigte Intel eine Möglichkeit, eine 64-Bit-Übertragung gegenüber einer 32-Bit-Übertragung in der Assemblersprache zu identifizieren. Zur gleichen Zeit führte Intel zusätzliche allgemeine Register ein. Unter Verwendung einer allgemeinen Branchenbenennungskonvention für allgemeine Zwecke war der Buchstabe R, gefolgt von einer Nummer, eine einfache Entscheidung.
Allerdings war Intel auch damit konfrontiert, die Abwärtskompatibilität für die älteren Register aufrechtzuerhalten. So wurde der Buchstabe R als Präfix für den 16-Bit-Registernamen verwendet, genauso wie für 32-Bit-Prozessoren der Buchstabe E als Präfix für den 16-Bit-Registernamen verwendet wurde. Zur gleichen Zeit wurde der Entwurf der 64-Bit-Registeroperationen etwas anders durchgeführt als für die 32-Bit-Registeroperationen für vorherige Generationen.
Mit dem Wechsel von 8-Bit-Prozessor zu 16-Bit-Prozessor wurden die Register von 8 Bit auf 16 Bit erweitert, so dass die Namen den Buchstaben X nach dem Registernamen wie AX, BX usw. haben. Diese Register könnten behandelt werden als zwei 8-Bit-Register (das 16-Bit-AX-Register bestand aus 8 Bit AH und 8 Bit AL, wobei H Hoch- oder höchstwertige Bits des AX-Registers und L Niedrig- oder niedrigstwertige Bits des AX-Registers darstellen).
Mit dem Wechsel von 16 Bit zu 32 Bit Prozessor wurden die Register von 16 Bit auf 32 Bit erweitert, so dass die Namen den Buchstaben E als Präfix wie EAX, EBX usw. haben.Diese Register könnten so behandelt werden, als hätten sie zwei separate 16-Bit-Komponenten (niedrigstwertige 16 Bit, auf die unter Verwendung des 16-Bit-Namens zugegriffen wird, wie EAX -> AX, EBX -> BX usw.) oder vier 8-Bit-Register (niedrigstwertige 16 Bit, auf die zugegriffen wird) zwei 8-Bit-Register wie EAX -> AH und AL, EBX -> BH und BL usw.), wenn Registerverschiebungen und bitweise Operationen verwendet wurden, um 16 Bit Werte zwischen den oberen 16 Bits und den unteren 16 Bits eines 32 Bits zu bewegen Register wie EAX, EBX usw. Dies behielt bis zu einem gewissen Grad bei, was mit dem Wechsel von 8 Bit auf 16 Bit gemacht worden war, jedoch war der direkte Zugriff auf die oberen 16 Bits der 32 Bit Register nicht verfügbar wie der direkte Zugriff zu den oberen 8 Bits der 16-Bit-Register in der 8086/8080 wurde zur Verfügung gestellt.
Abschnitt 3.7.2.1 von Band 1: Grundlegende Architektur des Intel 64 und IA-32 Architekturen Softwareentwicklerhandbuchs, das über den 64-Bit-Modus zu sagen hat.
Register operands in 64-bit mode can be any of the following:
• 64-bit general-purpose registers (RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP, or R8-R15)
• 32-bit general-purpose registers (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, or R8D-R15D)
• 16-bit general-purpose registers (AX, BX, CX, DX, SI, DI, SP, BP, or R8W-R15W)
• 8-bit general-purpose registers: AL, BL, CL, DL, SIL, DIL, SPL, BPL, and R8L-R15L are available using REX
prefixes; AL, BL, CL, DL, AH, BH, CH, DH are available without using REX prefixes.
• Segment registers (CS, DS, SS, ES, FS, and GS)
• RFLAGS register
• x87 FPU registers (ST0 through ST7, status word, control word, tag word, data operand pointer, and instruction
pointer)
• MMX registers (MM0 through MM7)
• XMM registers (XMM0 through XMM15) and the MXCSR register
• Control registers (CR0, CR2, CR3, CR4, and CR8) and system table pointer registers (GDTR, LDTR, IDTR, and
task register)
• Debug registers (DR0, DR1, DR2, DR3, DR6, and DR7)
• MSR registers
• RDX:RAX register pair representing a 128-bit operand
die Frage finden und für x86_64 registers rax/eax/ax/al overwriting full register contents sowie Why do most x64 instructions zero the upper part of a 32 bit register, die eine Erklärung darüber geben, beantworten, wie die 64-Bit-Register Operation von dem 32-Bit-Registern Betrieb unterscheiden.
"R" wirklich groß? :-) –
Und natürlich steht 'X' auch für Extended. A, B, C und D begannen als 8-Bit-Register. :-) –
Wissenswertes: Ein AMD-Architekt sagte, Registernamen seien einer der schwierigsten Teile der Registererweiterung: Sie [überlegten, die ursprünglichen 8 Register r0-r7 umzubenennen oder den "oberen" Registern Namen wie 'UAX' zu geben] (http://www.x86-64.org/pipermail/discuss/2000-September/000283.html). –