MOV de Registro a Memoria
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 18 de 45.
Ahora que sabes cómo cargar datos desde la memoria en un registro, aprenderás lo contrario: almacenar datos de un registro en la memoria.
Sintaxis:
mov [address], registerLos corchetes [ ] significan: "almacena el valor del registro en esta dirección de memoria".
Piénsalo de esta manera:
Imagina que en la dirección de memoria destination hay una caja vacía. Tienes un valor guardado en un registro (por ejemplo, al contiene el número 7).
Cuando escribes:
mov [destination], alLe estás diciendo a la CPU: "Toma el valor del registro al (7) y ponlo en la caja llamada destination."
Después de que se ejecute esta instrucción, la dirección de memoria destination ahora contiene el valor 7. El valor en al permanece allí; no se elimina.
Ejemplo:
mov al, 7 ; Poner 7 en el registro al
mov [destination], al ; Almacenar el valor de al en la dirección de memoria "destination"Nota: En este ejercicio, los datos en memoria son de 1 byte (8 bits). Es por eso que usamos al; es el registro de 8 bits que coincide con el tamaño. Aprenderás más sobre los tamaños de los registros más adelante.
Reglas importantes:
| Regla | Explicación |
|---|---|
| Los corchetes son obligatorios | mov destination, al sería incorrecto |
| El destino debe ser una dirección de memoria | Usa una etiqueta como [destination] |
| El tamaño debe coincidir | Para este ejercicio, usa al (8 bits) |
Error común:
; Incorrecto: faltan corchetes
mov destination, al
; Correcto: almacena el valor en la memoria
mov [destination], alEn el siguiente desafío, la dirección de memoria destination ya está creada para ti. Aprenderás a crear tus propios datos en el Capítulo 3. Por ahora, solo concéntrate en la instrucción MOV.
Desafío
Escribe dos líneas de ensamblador para:
- Poner el número 9 en el registro
al - Almacenar el valor de
alen la dirección de memoriadestination
(La dirección de memoria destination ya ha sido creada para ti.)
Pruébalo tú mismo
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; solution.asm se incluye aquí
; Define destination Y las instrucciones MOV del estudiante
%include "solution.asm"
; Carga el valor almacenado desde la memoria en al para imprimir
mov al, [destination]
; Guárdalo
mov r12, rax
; Imprime "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Imprime el valor
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