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 em um registrador, aprenderá o processo 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 desta forma:
Imagine que, no endereço de memória destination, há uma caixa vazia. Você tem um valor armazenado 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."
Depois que esta instrução é executada, o endereço de memória destination agora contém o valor 7. O valor em al permanece lá. Ele não é removido.
Exemplo:
mov al, 7 ; Coloque 7 no registrador al
mov [destination], al ; Armazene o valor de al no endereço de memória "destination"Observação: Neste exercício, os dados na memória têm 1 byte (8 bits). É por isso que usamos al. Esse é o registrador de 8 bits que corresponde ao tamanho. Você aprenderá mais sobre os tamanhos dos registradores posteriormente.
Regras importantes:
| Regra | Explicação |
|---|---|
| Os colchetes são obrigatórios | mov destination, al estaria errado |
| 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: faltam colchetes
mov destination, al
; Correto: armazena o valor na memória
mov [destination], alNo desafio abaixo, o endereço de memória destination já foi criado para você. Você aprenderá a criar seus próprios dados no Capítulo 3. Por enquanto, concentre-se 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 estudante
%include "solution.asm"
; Carrega o valor armazenado da memória em al para impressão
mov al, [destination]
; Salva-o
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
; Sai
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 MOVPratique por conta própria: Playground de Assembly