MOV Memória para Registrador
Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 17 de 45.
Até agora, você moveu números diretamente para registradores (imediato) e copiou valores entre registradores. Agora você aprenderá como carregar dados da memória para um registrador.
Por que isso é importante:
Lembre-se do Capítulo 0: a CPU não pode trabalhar diretamente com a memória. Os dados devem ser carregados em registradores primeiro. É assim que você faz.
Sintaxe:
mov register, [address]Os colchetes [ ] significam: "vá para este endereço de memória e obtenha o valor armazenado lá."
Pense nisso da seguinte forma:
Imagine que no endereço de memória number existe uma caixa. Dentro dessa caixa há um valor, por exemplo o número 5. Quando você escreve:
mov al, [number] ; Carrega o valor do endereço de memória "number" para alVocê está dizendo à CPU: "Vá para a caixa chamada number, pegue qualquer valor que esteja dentro (neste caso 5) e copie-o para o registrador al."
Após esta instrução ser executada, o valor 5 agora está armazenado em al. O valor original dentro da caixa no endereço number permanece lá — ele não é removido.
Regras importantes:
| Regra | Explicação |
|---|---|
| A origem deve ser um endereço de memória | [label] ou [address] |
| Os colchetes são obrigatórios | mov al, myNumber carrega o endereço, não o valor |
| O tamanho deve corresponder | Se a memória armazena um byte, use al (não rax) |
Erro comum:
; Errado: carrega o ENDEREÇO de myNumber, não o valor
mov al, myNumber
; Correto: carrega o VALOR armazenado em myNumber
mov al, [myNumber]Desafio
Escreva uma linha de assembly para carregar o valor do endereço de memória value no registrador al.
Experimente você mesmo
section .data
msg db 'al = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; O código do aluno é executado primeiro (carrega o valor em al)
%include "solution.asm"
; Salva o valor de al
mov r12, rax
; Imprime "al = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Imprime o valor em al
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