Menu
Coddy logo textTech

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 al

Você 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:

RegraExplicação
A origem deve ser um endereço de memória[label] ou [address]
Os colchetes são obrigatóriosmov al, myNumber carrega o endereço, não o valor
O tamanho deve corresponderSe 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]
challenge icon

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
    syscall
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos