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_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 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:
| Registro | Valor |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
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
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, 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 MOVPratique por conta própria: Playground de Assembly