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 data desde memory en un register, aprenderás lo contrario: almacenar data desde un register en memory.
Sintaxis:
mov [address], registerLos brackets significan: «almacena el valor del register en esta dirección de memory».
Piensa en ello de esta manera:
Imagina que en la dirección de memoria destination hay una caja vacía. Tienes un valor almacenado 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 colócalo en la caja llamada destination».
Después de ejecutar 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 ; Pon 7 en el registro al
mov [destination], al ; Almacena el valor de al en la dirección de memoria "destination"Nota: En este ejercicio, los datos en memory tienen un tamaño de 1 byte (8 bits). Por eso usamos al. Es el register de 8 bits que coincide con el tamaño. Más adelante aprenderás más sobre los tamaños de los register.
Reglas importantes:
| Regla | Explicación |
|---|---|
| Los brackets 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 desafío de abajo, 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, concéntrate únicamente en la instrucción MOV.
Desafío
Escribe dos líneas de ensamblador para:
- Put el número 9 en el registro
al - Store el valor de
alen la dirección de memoriadestination
(La dirección de memoria destination ya está 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 de 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 MOVPractica por tu cuenta: Playground de Assembly