MOV da memoria a registro
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 17 di 45.
Finora, hai spostato direttamente i numeri nei registri (immediato) e copiato valori tra i registri. Ora imparerai a caricare dati dalla memoria in un registro.
Perché è importante:
Ricorda dal capitolo 0: la CPU non può lavorare direttamente con la memoria. I dati devono prima essere caricati nei registri. Ecco come si fa.
Sintassi:
mov register, [address]Le parentesi [ ] significano: «vai a questo indirizzo di memoria e recupera il valore memorizzato lì».
Pensala così:
Immagina che all'indirizzo di memoria number ci sia una scatola. Dentro quella scatola c'è un valore, per esempio il numero 5. Quando scrivi:
mov al, [number] ; Load the value from memory address "number" into alStai dicendo alla CPU: "Vai alla casella chiamata number, prendi il valore che contiene (in questo caso 5) e copialo nel registro al."
Dopo aver eseguito questa istruzione, il valore 5 è ora memorizzato in al. Il valore originale contenuto nella casella all'indirizzo number rimane lì. Non viene rimosso.
Regole importanti:
| Regola | Spiegazione |
|---|---|
| La sorgente deve essere un indirizzo di memoria | [label] o [address] |
| Le parentesi quadre sono obbligatorie | mov al, myNumber carica l’indirizzo, non il valore |
| Le dimensioni devono corrispondere | Se la memoria memorizza un byte, usa al (non rax) |
Errore comune:
; Sbagliato: carica l'INDIRIZZO di myNumber, non il valore
mov al, myNumber
; Corretto: carica il VALORE memorizzato in myNumber
mov al, [myNumber]Sfida
Scrivi una riga di assembly per caricare il valore dall'indirizzo di memoria value nel registro al.
Provalo tu
section .data
msg db 'al = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; Il codice dello studente viene eseguito per primo (carica il valore in al)
%include "solution.asm"
; Salva il valore di al
mov r12, rax
; Stampa "al = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Stampa il valore in al
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Esci
mov rax, 60
mov rdi, 0
syscallQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1La macchina
Che cos’è la CPUMemoriaRegistri vs memoriaCome funzionano le istruzioniSchema a due fileL’architettura x86-642Sistemi numerici
Perché il binario?Numeri binariDa decimale a binarioPerché l'esadecimale?Da esadecimale a decimaleDa decimale a esadecimaleASCII ed esadecimale5Chiamata di sistema di uscita
Cos'è una chiamata di sistema?Chiamata di sistema di uscita (60)Codici di uscitaRiepilogo: uscita corretta3Prima istruzione - MOV
Che cos'è MOV?MOV immediatoMOV da registro a registroMOV da memoria a registroMOV da registro a memoriaLEA - Carica indirizzoMOV con dimensioni diverseEsercitazione: scambia i registriRiepilogo: sfida MOVEsercitati da solo: Playground Assembly