Menu
CoddyTech

MOV da memoria a registro

Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 17 di 45.

Finora hai spostato i numeri direttamente nei registri (immediato) e hai copiato i valori tra i registri. Ora imparerai a caricare i dati dalla memoria in un registro.

Perché è importante:

Ricorda dal capitolo 0: un’istruzione può usare al massimo un operando di memoria e i registri sono molto più veloci della memoria, quindi carichi i valori con cui lavori 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ì."

Immaginalo 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 qualsiasi valore ci sia dentro (in questo caso 5) e copialo nel registro al».

Dopo l'esecuzione di questa istruzione, il valore 5 è ora memorizzato in al. Il valore originale all'interno della 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 obbligatorieSenza parentesi, myNumber è l’indirizzo, non il valore
La dimensione deve corrispondereSe la memoria contiene un byte, usa al (non rax)

Errore comune:

; Sbagliato: senza parentesi quadre, myNumber è l'INDIRIZZO, 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 di 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