Quali sono i nomi dei nuovi registri processori x86_64?
-
20-09-2019 - |
Domanda
Dove posso trovare i nomi dei nuovi registri per il montaggio su questa architettura?
mi riferisco ai registri in X86 come EAX, ESP, EBX, ecc Ma io li vorrei a 64 bit.
Non credo che siano la stessa di quando ho smonto il mio codice C, ottengo r invece di e di.
Soluzione
I vecchi registri a 32 bit sono state estese a 64 bit, i registri r
(rax
, rbx
, rsp
e così via).
In aggiunta, ci sono alcuni registri di uso extra in genere r8
attraverso r15
che può anche essere letta come (ad esempio) r8d
, r8w
e r8b
(doppia parola inferiore 32 bit, parola a 16 bit e 8 bit byte rispettivamente ). Il suffisso b
è la nomenclatura originale AMD ma avrete a volte lo vedo scritto come l
(caso L
inferiore) per "byte basso".
Io tendo a preferire il suffisso b
me (anche se gli attuali registri bassi byte sono al
, bl
, e così via), in quanto corrisponde ai nomi d/w = double/word
e l
potrebbe potenzialmente essere scambiato per long
. O, peggio ancora, il 1
cifre, che porta a mettere in discussione che diamine numero di registro 81
è: -)
Le alte byte dei vecchi registri a 16 bit sono ancora accessibili, in molte circostanze, come ah
, bh
, e così via (anche se questo non sembra essere il caso per il nuovo r8
attraverso registri r15
). Ci sono alcuni nuovi codifiche di istruzione, in particolare quelli che utilizzano il prefisso REX
, che non possono accedere a tali byte alti originali, ma altri sono ancora liberi di usarli.
In aggiunta, ci sono alcuni nuovi registri SSE, xmm8
però xmm15
.
I registri eip
e eflags
sono state estese a rip
e rflags
(anche se le alte 32 bit di rflags
sono, per ora, ancora inutilizzato).
Vedere la wikipedia pagina e MSDN per maggiori dettagli.
Se questi sono supportati la parola asm
per un particolare compilatore C, non ho potuto dire. Quel poco di montaggio faccio (e sta diventando circa un giorno all'anno) è fatto in assemblea, piuttosto che C.
Related:
Altri suggerimenti
Il documentazione MSDN include informazioni sui registri x64.
64 si estende 8 general-purpose di x64 registri da 64 bit, e aggiunge 8 nuovi registri a 64 bit. I registri a 64 bit hanno nomi che iniziano con "r", quindi per esempio l'estensione a 64 bit di eax chiamato rax. I nuovi registri sono chiamato r8 attraverso R15.
I minori di 32 bit, 16 bit e 8 bit di ciascun registro sono direttamente indirizzabile in operandi. Ciò comprende registri, come esi, la cui 8 inferiore bit non erano precedentemente indirizzabile. La seguente tabella specifica il nomi in linguaggio assembly per il minore porzioni di registri a 64 bit.
64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax | eax | ax | al
rbx | ebx | bx | bl
rcx | ecx | cx | cl
rdx | edx | dx | dl
rsi | esi | si | sil
rdi | edi | di | dil
rbp | ebp | bp | bpl
rsp | esp | sp | spl
r8 | r8d | r8w | r8b
r9 | r9d | r9w | r9b
r10 | r10d | r10w | r10b
r11 | r11d | r11w | r11b
r12 | r12d | r12w | r12b
r13 | r13d | r13w | r13b
r14 | r14d | r14w | r14b
r15 | r15d | r15w | r15b
X64 estende registri a 32 bit di uso generale come segue:
EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP
X64 aggiunge anche i seguenti registri general purpose a 64 bit:
R8, R9, R10, R11, R12, R13, R14, R15
Inoltre, SSE è parte della specifica X64, così il vettore registri xmm0-xmm15 sono disponibili pure
Si possono trovare alcune informazioni di base sulla architettura alla Wikipedia / X86-64 o vai al sito di Intel.
Leggiamo il manuale di Intel
Dove posso trovare i nomi dei nuovi registri per il montaggio su questa architettura.
Nel manuale del processore "Intel 64 e IA-32 Architetture Manuale dello sviluppatore di software Volume 1: Architettura di base", per esempio versione 253665-053US :
- ricerca di "registri"
- il primo match è l'indice "3.4 BASE ESECUZIONE DEL PROGRAMMA REGISTRO"
- due elementi inferiori "3.4.1.1 registri di uso generale in modalità a 64 bit"
In quella sezione:
se viene specificato una dimensione di operando a 64 bit: RAX, RBX, RCX, RDX, RSI, RSI, RBP, RSP, R8-R15 sono disponibili. R8D-R 15D / R8-R15 rappresentano otto nuovi registri generici.
Promemoria: modalità a 64 bit è la modalità "normale" in x86-64. L'altra modalità principale è la "modalità compatibilità" che emula IA32.
Se si mantiene la ricerca di "registrare" il TOC, troverete anche sezioni su "numero di frantumazione" registri per virgola mobile e SIMD sparsi nel manuale:
- 8.1.2 - x87 FPU dati Registri (STX)
- 9.9.2 - MMX Registri
- 10.2.2 - XMM Registri
- 14.1.1 - 256 bit di ampiezza SIMD Registrati Assistenza (YMM)
Ci sono molti altri registri di controllo che hanno vari effetti collaterali e può in genere non essere scritti a meno che non si desidera che tali effetti (e spesso richiedere anello 0 ). Questi sono riassunti nella "Guida alla programmazione del sistema Volume 3 - 2.1.6 Registri di sistema", che è più per gli sviluppatori di OS
. Un buon approccio empirico è quello di eseguire info all-registers
in GDB: Come stampare il registro valori in GDB?