Menu
Coddy logo textTech

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_register

El 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:

RegistroValor
rax7
rcx3
rdx3
rbx7

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
challenge icon

Desafío

Escribe el código ensamblador para estas tareas:

  1. Pon el número 4 en rax
  2. Copia el valor de rax en rbx
  3. Copia el valor de rbx en rcx

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
    syscall
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos