Cadenas con db
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 28 de 45.
Ya sabes que db define un solo byte. Pero db también puede definir una cadena: varios bytes seguidos.
Sintaxis:
label db 'text here'Ejemplo:
section .data
message db 'Hello'Esto crea 5 bytes en memoria: 'H', 'e', 'l', 'l', 'o'
Qué sucede en la memoria:
| Dirección | Byte | Valor ASCII |
|---|---|---|
| message | 'H' | 72 |
| message+1 | 'e' | 101 |
| message+2 | 'l' | 108 |
| message+3 | 'l' | 108 |
| message+4 | 'o' | 111 |
Añadir una nueva línea:
Para imprimir una cadena y pasar a la siguiente línea, añade 0x0a (carácter de nueva línea):
section .data
message db 'Hello', 0x0aAhora la cadena tiene 6 bytes: 'H','e','l','l','o', salto de línea
Múltiples cadenas:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aPor qué esto es importante:
Las cadenas son los datos más comunes que usarás en assembly. La syscall write (que aprenderás en el Capítulo 5) imprime cadenas leyendo bytes de la memoria hasta que alcanza la longitud que le proporciones.
Nota importante:
Las cadenas son solo bytes. La CPU no sabe ni le importa que 'H' sea una letra. Es solo el número 72. La llamada al sistema write interpreta esos números como caracteres al imprimir.
Desafío
FácilCrea una cadena llamada greeting con el valor 'Hi' seguida de un salto de línea (0x0a) en la sección .data.
Pruébalo tú mismo
%include "data.asm"
section .text
global _start
_start:
; Imprimir la cadena usando la llamada al sistema write
mov rax, 1
mov rdi, 1
mov rsi, greeting
mov rdx, 3 ; 'H', 'i', salto de línea = 3 bytes
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-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