Menu
Coddy logo textTech

MOV de Memoria a Registro

Parte de la sección Fundamentos del Journey de Assembly de Coddy. Lección 17 de 45.

Hasta ahora, has movido números directamente a los registros (inmediatos) y has copiado valores entre registros. Ahora aprenderás a cargar data desde la memory en un registro.

Por qué esto importa:

Recuerda del capítulo 0: la CPU no puede trabajar directamente con la memoria. Los datos deben cargarse primero en los registros. Así es como se hace.

Sintaxis:

mov register, [address]

Los corchetes [ ] significan: «ve a esta dirección de memoria y obtén el valor almacenado allí».

Piensa en ello de esta manera:

Imagina que en la dirección de memoria number hay una caja. Dentro de esa caja hay un valor, por ejemplo el número 5. Cuando escribes:

mov al, [number]    ; Carga el valor desde la dirección de memoria "number" en al

Le estás diciendo a la CPU: «Ve a la caja llamada number, toma el valor que haya dentro (en este caso, 5) y cópialo en el registro al».

Después de ejecutar esta instrucción, el valor 5 queda almacenado en al. El valor original dentro de la caja en la dirección number permanece allí. No se elimina.

Reglas importantes:

ReglaExplicación
La fuente debe ser una dirección de memory[label] o [address]
Los corchetes son obligatoriosmov al, myNumber loads la dirección, no el valor
El tamaño debe coincidirSi memory almacena un byte, usa al (no rax)

Error común:

; Incorrecto: carga la DIRECCIÓN de myNumber, no el valor
mov al, myNumber

; Correcto: carga el VALOR almacenado en myNumber
mov al, [myNumber]
challenge icon

Desafío

Escribe una línea de ensamblador para cargar el valor desde la dirección de memoria value en el registro al.

Pruébalo tú mismo

section .data
    msg db 'al = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; El código del estudiante se ejecuta primero (carga el valor en al)
    
    %include "solution.asm"
    
    ; Guarda el valor de al
    mov r12, rax
    
    ; Imprime "al = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; Imprime el valor en al
    mov rax, r12
    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