MOV Registrador para Memória
Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 18 de 45.
Agora que você sabe como carregar dados da memória para um registrador, você aprenderá o inverso: armazenar dados de um registrador na memória.
Sintaxe:
mov [address], registerOs colchetes [ ] significam: "armazene o valor do registrador neste endereço de memória."
Pense nisso da seguinte forma:
Imagine que no endereço de memória destination há uma caixa vazia. Você tem um valor em um registrador (por exemplo, al contém o número 7).
Quando você escreve:
mov [destination], alVocê está dizendo à CPU: "Pegue o valor do registrador al (7) e coloque-o na caixa chamada destination."
Após a execução desta instrução, o endereço de memória destination agora contém o valor 7. O valor em al permanece lá — não é removido.
Exemplo:
mov al, 7 ; Coloca 7 no registrador al
mov [destination], al ; Armazena o valor de al no endereço de memória "destination"Nota: Neste exercício, os dados na memória são de 1 byte (8 bits). É por isso que usamos al — ele é o registrador de 8 bits que corresponde ao tamanho. Você aprenderá mais sobre tamanhos de registradores mais tarde.
Regras importantes:
| Regra | Explicação |
|---|---|
| Os colchetes são obrigatórios | mov destination, al estaria incorreto |
| O destino deve ser um endereço de memória | Use um rótulo como [destination] |
| O tamanho deve corresponder | Para este exercício, use al (8 bits) |
Erro comum:
; Errado: colchetes ausentes
mov destination, al
; Correto: armazena o valor na memória
mov [destination], alNo desafio abaixo, o endereço de memória destination já está criado para você. Você aprenderá como criar seus próprios dados no Capítulo 3. Por enquanto, foque apenas na instrução MOV.
Desafio
Escreva duas linhas de assembly para:
- Colocar o número 9 no registrador
al - Armazenar o valor de
alno endereço de memóriadestination
(O endereço de memória destination já foi criado para você.)
Experimente você mesmo
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; solution.asm é incluído aqui
; Ele define destination E as instruções MOV do aluno
%include "solution.asm"
; Carrega o valor armazenado da memória em al para impressão
mov al, [destination]
; Salva o valor
mov r12, rax
; Imprime "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Imprime o valor
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Sair
mov rax, 60
mov rdi, 0
syscallEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1A Máquina
O que é CPUMemóriaRegistradores vs MemóriaComo as instruções funcionamPadrão de Dois ArquivosA Arquitetura x86-643Primeira instrução - MOV
O que é MOV?MOV ImediatoMOV Registrador para RegistradorMOV Memória para RegistradorMOV Registrador para MemóriaLEA - Carregar EndereçoMOV com Tamanhos DiferentesPrática: Trocar RegistradoresRecapitulação: Desafio MOV