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_registerO 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:
| Registrador | Valor |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
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
Desafio
Escreva o código assembly para estas tarefas:
- Coloque o número 4 em
rax - Copie o valor de
raxpararbx - Copie o valor de
rbxpararcx
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
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 MOV