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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top