Menu
Coddy logo textTech

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 al

Stai 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:

RegolaSpiegazione
La sorgente deve essere un indirizzo di memoria[label] o [address]
Le parentesi quadre sono obbligatoriemov al, myNumber carica l’indirizzo, non il valore
Le dimensioni devono corrispondereSe 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]
challenge icon

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
    syscall
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly