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 values entre registros.

Sintaxis:

mov destination_register, source_register

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

RegistroValor
rax7
rcx3
rdx3
rbx7

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

Desafío

Escribe el código assembly para estas tareas:

  1. Put el número 4 en rax
  2. Copy el valor de rax into rbx
  3. Copy el valor de rbx into rcx

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

Practica por tu cuenta: Playground de Assembly