Instrucțiunea MOV este cea mai frecvent utilizată instrucțiune din arhitectura x86_64. Numele său este o ușoară eroare de terminologie istorică: MOV nu mută (nu golește sursa), ci copiază datele din sursă în destinație.
Scenarii corecte și erori comune cu MOV în NASM
; 1. Transfer între registre (permis):
mov rax, rbx
; 2. Încărcarea unei constante literale imediate:
mov rcx, 1000
; 3. Citirea din memorie (folosim paranteze drepte [] pentru dereferențiere):
mov rax, [rbp - 8] ; Citește 8 octeți din stivă în RAX
; 4. Scrierea în memorie cu specificator explicit de dimensiune:
mov byte [rdi], 0 ; Scrie 1 octet (char) la adresa stocată în RDI
mov dword [rsi + 4], 500 ; Scrie 4 octeți (int 32-bit) la adresa RSI + 4
mov qword [rax + rbx*8], 100 ; Scrie 8 octeți (int 64-bit)
; REGULĂ FUNDAMENTALĂ x86: Nu există instrucțiune MOV de la memorie la memorie!
; mov [destinatie], [sursa] ; EROARE DE COMPILARE!
; Soluția corectă: folosim un registru intermediar:
mov rdx, [sursa]
mov [destinatie], rdx
| Specificator dimensiune | Număr de biți / octeți | Echivalent tip în limbajul C |
|---|---|---|
byte |
8 biți (1 octet) | char / uint8_t |
word |
16 biți (2 octeți) | short / int16_t |
dword (Double Word) |
32 biți (4 octeți) | int / int32_t |
qword (Quad Word) |
64 biți (8 octeți) | long long / int64_t / pointer |
Întrebări & Exemple de Cod:
Instrucțiunea MOV: Transferul de Date între Registre, Memorie și LiteraleAi o nelămurire despre utilizarea comenzii
Instrucțiunea MOV: Transferul de Date între Registre, Memorie și Literalesau 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.