Menu
Coddy logo textTech

MOV Registrador para Registrador

Parte da seção Fundamentos do Journey de Assembly da Coddy — lição 16 de 45.

Agora que você sabe como colocar um número diretamente em um registrador (MOV imediato), você também pode copiar valores entre registradores.

Sintaxe:

mov destination_register, source_register

O valor do registrador de origem é copiado para o registrador de destino. O registrador de origem permanece inalterado.

Exemplo:

mov rax, 5      ; rax = 5
mov rbx, rax    ; rbx = 5 (copiado de rax)

Após estas duas instruções, ambos rax e rbx contêm 5.

Importante: O registrador de origem (rax) ainda mantém seu valor. MOV copia — ele não recorta ou move.

Outro exemplo:

mov rax, 7      ; rax = 7
mov rcx, 3      ; rcx = 3
mov rdx, rcx    ; rdx = 3 (copiado de rcx)
mov rbx, rax    ; rbx = 7 (copiado de rax)

Após estas instruções:

RegistradorValor
rax7
rcx3
rdx3
rbx7

Por que isso é importante:

  • Você pode salvar um valor copiando-o para outro registrador antes de alterar o original
  • Você pode reutilizar valores sem carregar da memória novamente
  • Esta é a base da maioria das operações em assembly
challenge icon

Desafio

Escreva o código assembly para estas tarefas:

  1. Coloque o número 4 em rax
  2. Copie o valor de rax para rbx
  3. Copie o valor de rbx para rcx

Após o seu código, todos os três registradores devem conter 4.

Experimente você mesmo

section .data
    msg_rax db 'rax = '
    msg_rax_len equ $ - msg_rax
    msg_rbx db 'rbx = '
    msg_rbx_len equ $ - msg_rbx
    msg_rcx db 'rcx = '
    msg_rcx_len equ $ - msg_rcx

section .bss
    digit resb 1

section .text
    global _start

_start:
    %include "solution.asm"
    
    ; Salvar valores
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; Imprimir "rax = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; Imprimir valor de rax
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Imprimir "rbx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; Imprimir valor de rbx
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Imprimir "rcx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; Imprimir valor de rcx
    mov rax, r14
    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