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 valores entre registros.
Sintaxis:
mov destination_register, source_registerEl valor del registro de origen se copia en el registro de destino. El registro de origen permanece sin cambios.
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) todavía tiene su valor. MOV copia — 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é esto es importante:
- Puedes guardar un valor copiándolo en otro registro antes de cambiar el original
- Puedes reutilizar valores sin cargarlos de nuevo desde la memoria
- Esta es la base de la mayoría de las operaciones de ensamblador
Desafío
Escribe el código ensamblador para estas tareas:
- Pon el número 4 en
rax - Copia el valor de
raxenrbx - Copia el valor de
rbxenrcx
Después de tu código, los tres registros deberían 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 el 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 el 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 el 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 MOV