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 (imediatos) e copiou valores entre registradores. Agora você aprenderá a carregar dados da memory para um registrador.
Por que isso importa:
Lembre-se do Capítulo 0: a CPU não pode trabalhar diretamente com a memória. Os dados precisam ser carregados primeiro nos registradores. É assim que você faz.
Sintaxe:
mov register, [address]Os colchetes [ ] significam: "vá até este endereço de memória e obtenha o valor armazenado lá."
Pense desta forma:
Imagine que no endereço de memória number há 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" em alVocê está dizendo à CPU: "Vá até a caixa chamada number, pegue qualquer valor que esteja dentro dela (neste caso, 5) e copie-o para o registrador al."
Depois que essa instrução é 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 loads o address, não o valor |
| O tamanho deve corresponder | Se memory 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 MOVPratique por conta própria: Playground de Assembly