2012-06-12 13 views
15

Die x86-Assembler-Sprache musste sich ändern, da sich die x86-Prozessorarchitektur von 8 Bit auf 16 Bit zu 32 Bit und jetzt 64 Bit geändert hat.Wofür steht das R in RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP?

Ich weiß, dass in 32bit Assembler - Registernamen (EAX, EBX, etc.) das E - Präfix für jeden der Namen für Extended steht, was die 32 - Bit - Form des Registers und nicht die 16 - Bit - Form (AX, BX, etc .).

Wofür steht das R-Präfix für diese Registernamen in 64Bit?

+10

"R" wirklich groß? :-) –

+4

Und natürlich steht 'X' auch für Extended. A, B, C und D begannen als 8-Bit-Register. :-) –

+1

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). –

Antwort

15

Ich denke, es ist nur R für "Register", da gibt es zusätzliche Register R8 - R15 auf x86-64 und R ist ein gemeinsames Präfix auf vielen CPU-Architekturen, wo Register nummeriert sind.

+0

Sind die von Ihnen erwähnten Register (R8 - R15) 32-Bit? –

+0

vergiss ich gerade gelesen, dass sie alle 64 Bit sind, so nehme ich an, dass 32-Bit-Emulation die gleichen Register mit der Hälfte der Leerzeichen 0'd verwendet –

+2

Von dem, was ich gelesen habe, führt 32-Bit-Zugriff auf "R" -Reihenregister im oberen 32 Bits werden automatisch auf Null gesetzt. –

4

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.

+2

AMD entwarf AMD64, während Intel IA-64 (Itanium) verpflichtet wurde. Erst als x86-64 (teilweise dank der hohen Leistung von AMDs erster AMD64-Mikroarchitektur, K8) eingesetzt wurde, fügte Intel es zu P4 und dann P6 (in Core2) hinzu und nannte es "IA-32e". –

+0

@PeterCordes, danke für diese Klarstellung. Bei der Lektüre des kurzen Verlaufs im Handbuch des Intel Software Developer wurde erwähnt, dass 64-Bit erstmals bei Intel in einer High-End-Version eines seiner Prozessoren auftauchen und in der nächsten Iteration verfügbar werden. Ich bin nicht sicher, was der Unterschied zwischen IA-64 Itanium und den P4 und P6 ist. Es scheint, dass Itanium hauptsächlich eine Enterprise-Server-Prozessorklasse war. –

+2

IA-64 ist eine völlig separate Architektur, nicht x86 überhaupt. P4 ist Pentium 4, die "Netburst" -Mikroarchitektur (https://en.wikipedia.org/wiki/NetBurst_ (Mikroarchitektur)), die für hohe Taktrate und nicht für hohe Leistung optimiert wurde, weil zu dieser Zeit CPUs noch vermarktet wurden durch Taktrate. [P6 ist die Mikroarchitektur-Familie, die mit Pentium Pro/Pentium II begonnen wurde] (https://en.wikipedia.org/wiki/P6_ (Mikroarchitektur)), und gipfelte in Nehalem. ([Sandybridge ist eine neue Mikroarchitektur-Familie] (http://www.realworldtech.com/sandy-bridge/).) –