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 (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 al

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

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

Pratique por conta própria: Playground de Assembly