La sección .data
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 23 de 45.
En el Capítulo 2, cargaste valores de la memoria y almacenaste valores en la memoria. ¿Pero de dónde vino esa memoria? ¿Quién creó num1, num2 y result?
La respuesta es la sección .data. Aquí es donde creas tus propios datos en memoria.
¿Qué es la sección .data?
La sección .data es una parte de su programa en ensamblador donde define los datos que se almacenarán en la memoria antes de que se ejecute su programa.
Sintaxis:
section .data
; Tus definiciones de datos van aquíPor qué lo necesitas:
| Sin la sección .data | Con la sección .data |
|---|---|
| No tienes datos con los que trabajar | Puedes crear números, cadenas y variables |
| Las direcciones de memoria son desconocidas | Puedes usar etiquetas como myNumber o message |
| No puedes probar tu código | Puedes cargar y almacenar los datos que creaste |
Un ejemplo sencillo:
section .data
age db 25 ; Crea un byte llamado "age" con el valor 25
price dw 1000 ; Crea una palabra llamada "price" con el valor 1000
name db 'Bob' ; Crea una cadena llamada "name" con las letras B, o, bDónde va en tus archivos:
Recuerda el patrón de dos archivos del Capítulo 0:
| Archivo | Contenido |
|---|---|
data.asm | section .data con tus definiciones de datos |
main.asm | %include "data.asm" seguido de section .text con tu código |
Qué sucede cuando se ejecuta tu programa:
- El sistema operativo carga tu programa en la memoria
- Lee la sección
.datay coloca tus datos en direcciones de memoria específicas
- Tus etiquetas (
age,price,name) se convierten en direcciones - Tu código ahora puede acceder a estas direcciones usando
[age],[price],[name]
Reglas importantes:
| Regla | Explicación |
|---|---|
Una sección .data por programa | Coloca todos tus datos en un solo lugar |
| Las etiquetas deben ser únicas | No puedes tener dos etiquetas age |
| Los datos se crean antes de que se ejecute tu código | Están listos para usar cuando _start comienza |
En las próximas lecciones, aprenderás cómo definir diferentes tipos de datos utilizando db, dw, dd y dq
Desafío
Escribe el código en el archivo data.asm para:
- Crear la sección
.data - Crear un byte llamado
countcon el valor 5
Pruébalo tú mismo
%include "data.asm"
section .text
global _start
_start:
; Carga el valor de count en al
mov al, [count]
; Guárdalo para imprimir
mov r12, rax
; Convierte a ASCII e imprime (solo 0-9)
add al, 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
section .bss
digit resb 1Esta 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-644Definición de datos
La sección .datadb - Definir Bytedw - Definir Worddd - Definir Double Worddq - Definir Quad WordCadenas con dbEl símbolo $Resumen: Construir data.asm