MOV de Registro a Registro
Parte de la sección Fundamentos del Journey de Assembly de Coddy. Lección 16 de 45.
Ahora que sabes cómo poner un número directamente en un registro (MOV inmediato), también puedes copiar values entre registros.
Sintaxis:
mov destination_register, source_registerEl valor del registro source se copia en el registro destination. El registro de origen no cambia.
Ejemplo:
mov rax, 5 ; rax = 5
mov rbx, rax ; rbx = 5 (copiado de rax)Después de estas dos instrucciones, tanto rax como rbx contienen 5.
Importante: El registro de origen (rax) aún conserva su valor. MOV copies: no corta ni mueve.
Otro ejemplo:
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)Después de estas instrucciones:
| Registro | Valor |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
Por qué es importante:
- Puedes guardar un valor copiándolo a otro registro antes de cambiar el original
- Puedes reutilizar valores sin volver a cargarlos desde la memoria
- Esta es la base de la mayoría de las operaciones de ensamblador
Desafío
Escribe el código assembly para estas tareas:
- Put el número 4 en
rax - Copy el valor de
raxintorbx - Copy el valor de
rbxintorcx
Después de tu código, los tres registros deben contener 4.
Pruébalo tú mismo
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"
; Guardar 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
; Salir
mov rax, 60
mov rdi, 0
syscallEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1La máquina
¿Qué es la CPU?MemoriaRegistros vs. MemoriaCómo funcionan las instruccionesPatrón de dos archivosLa arquitectura x86-643Primera instrucción - MOV
¿Qué es MOV?MOV InmediatoMOV de Registro a RegistroMOV de Memoria a RegistroMOV de Registro a MemoriaLEA - Cargar direcciónMOV con diferentes tamañosPráctica: Intercambiar registrosResumen: Desafío MOVPractica por tu cuenta: Playground de Assembly