2012-06-12 4 views
15

Il linguaggio dell'assembler x86 è stato modificato poiché l'architettura del processore x86 è passata da 8 bit a 16 bit a 32 bit e ora a 64 bit.Cosa significa R in RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP?

So che nei nomi di registro assembler a 32 bit (EAX, EBX, ecc.), Il prefisso E per ciascuno dei nomi indica Extended, ovvero il formato a 32 bit del registro anziché il formato a 16 bit (AX, BX, ecc. .).

Qual è il prefisso R per questi nomi di registro per 64 bit?

+10

"R" eally big? :-) –

+4

Ovviamente anche "X" è esteso. A, B, C e D sono iniziati come registri a 8 bit. :-) –

+1

Un fatto divertente: un architetto AMD ha affermato che i nomi dei registri erano una delle parti più difficili dell'estensione del registro: [hanno preso in considerazione la rinomina degli 8 registri originali r0-r7, o hanno dato il nome "superiore" ai nomi come "UAX"] (http://www.x86-64.org/pipermail/discuss/2000-September/000283.html). –

risposta

15

Penso che sia solo R per "register", poiché ci sono registri aggiuntivi R8 - R15 su x86-64, e R è un prefisso comune su molte architetture di CPU in cui i registri sono numerati.

+0

I registri che hai citato (R8 - R15) a 32 bit? –

+0

ho appena letto che sono tutti a 64 bit, quindi presumo che l'emulazione a 32 bit userà gli stessi registri con metà degli spazi 0'd out –

+2

Da quello che ho letto, l'accesso a 32 bit ai registri serie "R" risultati nella parte superiore 32 bit vengono automaticamente azzerati. –

4

I processori Intel x86 originali, il processore 8080, erano processori a 8 bit progettati con un occhio per applicazioni come scopo speciale, piccoli computer (registratori di cassa per esempio) o controller di attrezzature piuttosto che computer di uso generale (concorrenti inclusi Motorola 6800). La seguente famiglia di processori 8086 (8086 e 8088 a costo ridotto) erano microprocessori a 16 bit che continuavano l'architettura Intel 8080 estendendola con aggiunte a 16 bit con un occhio di riguardo verso usi più generali del processore.

I processori Intel 8080 e Intel 8086 avevano un numero limitato di registri, la maggior parte dei quali aveva scopi speciali, quindi avevano nomi specifici come A, B o AX, BX nel loro linguaggio assembly (concorrenti come il Motorola 6800 aveva convenzioni simili). I computer generici come la famiglia IBM 360/370 o VAX DEC utilizzavano nomi più generici per componenti come registri (ad esempio R0, R1, ecc.) Poiché i registri erano di uso generale (processore Motorola 68000 a 32 bit utilizzato in molte workstation di fascia più alta) negli anni '80 era simile con otto registri dati chiamati da D0 a D7).

Poiché Intel ha continuato ad evolvere il processore x86 nel corso degli anni a partire dagli anni '70, ha anche cercato di mantenere la retrocompatibilità anche quando le applicazioni di destinazione dell'86 si sono espanse dalle applicazioni specializzate, dai microcontroller ai computer generici. Durante questa evoluzione, il numero di registri si è ampliato e molti dei registri di scopo originariamente speciali si sono evoluti verso l'uso generico poiché Intel ha anche introdotto l'idea delle modalità operative dei chip del processore con 80286 per aiutare con la retrocompatibilità.

Con i processori a 64 bit, Intel aveva bisogno di un modo per identificare un trasferimento a 64 bit rispetto a un trasferimento a 32 bit o altro nel linguaggio assembly. Allo stesso tempo, Intel stava introducendo registri aggiuntivi di uso generale. Usando una comune convenzione di denominazione industriale per il registro generale, la lettera R seguita da un numero era una decisione facile.

Tuttavia Intel ha dovuto anche mantenere la compatibilità con le versioni precedenti per i registri precedenti. Quindi la lettera R era usata come prefisso al nome del registro a 16 bit proprio come per i processori a 32 bit, la lettera E era usata come prefisso al nome del registro a 16 bit. Allo stesso tempo, la progettazione delle operazioni di registrazione a 64 bit è stata eseguita in modo leggermente diverso rispetto a quanto fatto per le operazioni di registrazione a 32 bit per le generazioni precedenti.

Con il passaggio da processore a 8 bit a processore a 16 bit, i registri sono stati estesi da 8 bit a 16 bit in modo che i nomi abbiano la lettera X dopo il nome del registro come AX, BX, ecc. Questi registri potrebbero essere trattati come due registri a 8 bit (il registro AX a 16 bit era composto da 8 bit AH e 8 bit AL dove l'H rappresenta i bit alti o più significativi del registro AX e L rappresenta i bit bassi o meno significativi del registro AX).

Con il passaggio dal processore da 16 bit a 32 bit, i registri sono stati estesi da 16 bit a 32 bit in modo che i nomi abbiano la lettera E come prefisso come EAX, EBX, ecc.Questi registri possono essere considerati come aventi due componenti separati a 16 bit (16 bit meno significativi accessibili tramite il nome a 16 bit come EAX -> AX, EBX -> BX, ecc.) O quattro registri a 8 bit (almeno 16 bit significativi a cui si accede come due registri a 8 bit come EAX -> AH e AL, EBX -> BH e BL, ecc.) quando lo spostamento del registro e le operazioni bit a bit sono stati utilizzati per spostare i valori a 16 bit tra i 16 bit superiori e i 16 bit inferiori di un 32 bit registro come EAX, EBX, ecc. Ciò ha mantenuto, in una certa misura, ciò che era stato fatto con la modifica da 8 bit a 16 bit, tuttavia l'accesso diretto ai 16 bit superiori dei registri a 32 bit non era disponibile come accesso diretto agli 8 bit superiori dei registri a 16 bit nell'8086/8080 era stato fornito.

Sezione 3.7.2.1 del Volume 1: Architettura di base del Manuale dello sviluppatore del software per architetture Intel 64 e IA-32 che ha questo da dire sulla modalità a 64 bit.

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 

Vedere domanda e risposta per x86_64 registers rax/eax/ax/al overwriting full register contents nonché Why do most x64 instructions zero the upper part of a 32 bit register che forniscono una spiegazione di come l'operazione di registrazione a 64 bit differire dal funzionamento registro a 32 bit.

+2

AMD ha progettato AMD64 mentre Intel era impegnata su IA-64 (Itanium). Non è stato fino a quando x86-64 ha preso piede (grazie in parte alle alte prestazioni della prima microarchitettura AMD64 di AMD, K8) che Intel ha aggiunto a P4 e poi a P6 (in Core2), chiamandolo "IA-32e". –

+0

@PeterCordes, grazie per questo chiarimento. Leggendo la breve storia contenuta nel manuale di Intel Software Developer, è stato menzionato il fatto che il 64 bit è apparso per la prima volta con Intel in una versione di fascia alta di uno dei suoi processori, diventando disponibile nella prossima iterazione. Non sono sicuro di quale sia la differenza tra IA-64 Itanium e P4 e P6. Sembra che Itanium fosse principalmente un processore di classe enterprise server. –

+2

IA-64 è un'architettura completamente separata, non x86 affatto. P4 è Pentium 4, [la microarchitettura "netburst"] (https://en.wikipedia.org/wiki/NetBurst_ (microarchitettura)) che è stata ottimizzata per l'alta velocità di clock piuttosto che per le alte prestazioni, perché in quel momento le CPU erano ancora commercializzate dalla velocità di clock. [P6 è la famiglia di microarchitettura iniziata con Pentium Pro/Pentium II] (https://en.wikipedia.org/wiki/P6_ (microarchitettura)) e culmina in Nehalem. ([Sandybridge è una nuova famiglia di microarchitettura] (http://www.realworldtech.com/sandy-bridge/).) –