Orice instrucțiune x86_64 este codificată binar într-un format variabil între 1 și 15 octeți. Câmpurile ModR/M și SIB (Scale-Index-Base) descriu modul în care registrele și adresele de memorie sunt selectate.
; Anatomia adresării complexe: [Base + Index*Scale + Displacement]
mov rax, [rbx + rcx*8 + 0x20]
; Codificarea binară generată:
; 1. Prefix REX: indică operanzi pe 64 de biți (0x48)
; 2. Opcode MOV: 0x8B
; 3. ModR/M: specifică că avem adresare bazată pe SIB cu deplasament pe 1 octet (Mod=01)
; 4. SIB: Scale=8 (11b), Index=RCX (001b), Base=RBX (011b)
; 5. Deplasament: 0x20
Lecție de compilare: Înțelegerea schemei SIB permite programatorilor de nivel jos să scrie structuri de date a căror dimensiune se aliniază nativ pe scale-ul hardware (1, 2, 4, 8 octeți).
Întrebări & Exemple de Cod:
Octeții ModR/M și SIB în x86_64: Mecanismul Intern de Codificare a AdresăriiAi o nelămurire despre utilizarea comenzii
Octeții ModR/M și SIB în x86_64: Mecanismul Intern de Codificare a Adresăriisau 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.