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 alLe 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:
| Regla | Explicación |
|---|---|
| La fuente debe ser una dirección de memoria | [label] o [address] |
| Los corchetes son obligatorios | mov al, myNumber carga la dirección, no el valor |
| El tamaño debe coincidir | Si 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]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
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