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 immediate), também pode copiar values 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 essas duas instruções, tanto rax quanto rbx contêm 5.

Importante: O registrador de origem (rax) ainda mantém seu valor. MOV copia: não recorta nem 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:

RegistroValor
rax7
rcx3
rdx3
rbx7

Por que isso importa:

  • Você pode salvar um valor copiando-o para outro registrador antes de alterar o original
  • Você pode reutilizar valores sem carregá-los da memória novamente
  • Essa é a base da maioria das operações de 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, 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

Pratique por conta própria: Playground de Assembly