Registrele reprezintă cele mai rapide zone de memorie fizică din interiorul microprocesorului, având timpi de acces de sub un ciclu de ceas. Arhitectura x86_64 pune la dispoziție 16 registre de uz general pe 64 de biți (extinse de la cele 8 registre pe 32 de biți din epoca x86).
Pentru a menține compatibilitatea descendentă completă, fiecare registru de 64 de biți poate fi accesat și ca sub-registru pe 32, 16 sau 8 biți:
Ierarhia și divizarea registrului RAX
|-------------------------------- RAX (64 biți) --------------------------------|
|-------------- EAX (32 biți) --------------|
|----- AX (16 biți) ----|
|-- AH (8b) -|-- AL (8b) |
63 32 31 16 15 8 7 0
| Registru 64-bit | Nume istoric | Rol specific în convențiile de apel | Varianta 32-bit / 8-bit |
|---|---|---|---|
RAX |
Accumulator | Stochează valoarea returnată de funcții și numărul syscall-ului. | EAX / AL |
RDI |
Destination Index | Parametrul 1 transmis unei funcții în Linux / macOS. | EDI / DIL |
RSI |
Source Index | Parametrul 2 transmis unei funcții în Linux / macOS. | ESI / SIL |
RDX |
Data Register | Parametrul 3 transmis unei funcții; I/O și multiplicare/împărțire. | EDX / DL |
RCX |
Count Register | Parametrul 4; contor implicit pentru bucle și deplasări de biți. | ECX / CL |
R8, R9 |
General 8 & 9 | Parametrii 5 și 6 transmiși unei funcții. | R8D / R8B |
RSP |
Stack Pointer | Indică întotdeauna vârful curent al stivei hardware de memorie. | ESP / SPL |
RBP |
Base Pointer | Fixează baza cadrului de stivă (Stack Frame) al funcției curente. | EBP / BPL |
Regulă critică de zero-extensie pe 32 de biți: În arhitectura x86_64, orice scriere într-un registru pe 32 de biți (de exemplu
mov eax, 10) resetează automat la zero cei 32 de biți superiori ai registrului RAX! În schimb, scrierile pe 16 biți (AX) sau 8 biți (AL) lasă biții superiori neschimbați.
Întrebări & Exemple de Cod:
Arhitectura Registrelor x86_64: RAX, RBX, RCX, RDX, Pointeri și RFLAGSAi o nelămurire despre utilizarea comenzii
Arhitectura Registrelor x86_64: RAX, RBX, RCX, RDX, Pointeri și RFLAGSsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.