MOV da registro a memoria
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 18 di 45.
Ora che sai come caricare i dati dalla memoria in un registro, imparerai il processo inverso: memorizzare i dati da un registro nella memoria.
Sintassi:
mov [address], registerLe parentesi [ ] significano: "memorizza il valore dal registro in questo indirizzo di memoria."
Pensala così:
Immagina che all’indirizzo di memoria destination ci sia una scatola vuota. Hai un valore in un registro (per esempio, al contiene il numero 7).
Quando scrivi:
mov [destination], alStai dicendo alla CPU: "Prendi il valore dal registro al (7) e mettilo nella casella chiamata destination."
Dopo l'esecuzione di questa istruzione, l'indirizzo di memoria destination ora contiene il valore 7. Il valore in al rimane lì. Non viene rimosso.
Esempio:
mov al, 7 ; Inserisci 7 nel registro al
mov [destination], al ; Memorizza il valore di al all'indirizzo di memoria "destination"Nota: In questo esercizio, i dati in memoria sono di 1 byte (8 bit). Ecco perché usiamo al. È il registro a 8 bit che corrisponde alla dimensione. Imparerai di più sulle dimensioni dei registri più avanti.
Regole importanti:
| Regola | Spiegazione |
|---|---|
| Le parentesi quadre sono obbligatorie | mov destination, al sarebbe errato |
| La destinazione deve essere un indirizzo di memoria | Usa un'etichetta come [destination] |
| Le dimensioni devono corrispondere | Per questo esercizio, usa al (8 bit) |
Errore comune:
; Errato: mancano le parentesi quadre
mov destination, al
; Corretto: memorizza il valore in memoria
mov [destination], alNella sfida qui sotto, l’indirizzo di memoria destination è già stato creato per te. Imparerai a creare i tuoi dati nel capitolo 3. Per ora, concentrati solo sull’istruzione MOV.
Sfida
Scrivi due righe di assembly per:
- Inserire il numero 9 nel registro
al - Memorizzare il valore di
alall’indirizzo di memoriadestination
(L’indirizzo di memoria destination è già stato creato per te.)
Provalo tu
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; solution.asm è incluso qui
; Definisce destination AND le istruzioni MOV dello studente
%include "solution.asm"
; Carica il valore memorizzato dalla memoria in al per stamparlo
mov al, [destination]
; Salvalo
mov r12, rax
; Stampa "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Stampa il valore
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