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 cómo cargar datos desde la memoria a un registro.

Por qué esto es importante:

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í."

Piénsalo 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 de la dirección de memoria "number" en al

Le estás diciendo a la CPU: "Ve a la casilla llamada number, toma cualquier valor que esté dentro (en este caso 5) y cópialo en el registro al".

Después de que se ejecute esta instrucción, el valor 5 ahora está almacenado en al. El valor original dentro de la casilla en la dirección number permanece allí; no se elimina.

Reglas importantes:

ReglaExplicación
La fuente debe ser una dirección de memoria[label] o [address]
Los corchetes son obligatoriosmov al, myNumber carga la dirección, no el valor
El tamaño debe coincidirSi la memoria almacena un byte, use 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 de 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"
    
    ; Guardar el valor de al
    mov r12, rax
    
    ; Imprimir "al = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; Imprimir 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