dd - Definir Double Word
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 26 de 45.
dw crea 2 bytes de datos. Pero a veces necesitas números aún más grandes. Para eso, usas dd — Definir Palabra Doble.
Una palabra doble en ensamblador x86 es de 4 bytes (32 bits).
Sintaxis:
label dd valueEjemplos:
section .data
myNumber dd 50000 ; 4 bytes, valor 50000
bigNum dd 4000000 ; 4 bytes, valor 4 millones
max32 dd 4294967295 ; Valor máximo de 32 bitsTabla comparativa:
| Directiva | Tamaño | Rango | Registro a usar |
|---|---|---|---|
db | 1 byte | 0 a 255 | al |
dw | 2 bytes | 0 a 65,535 | ax |
dd | 4 bytes | 0 a 4,294,967,295 | eax |
Cómo usar una palabra doble en tu código:
section .data
myNumber dd 50000
section .text
mov eax, [myNumber] ; Cargar el valor en eax
add eax, 10000 ; eax se convierte en 60000
mov [myNumber], eax ; Almacenar de nuevoRegla importante:
| Regla | Explicación |
|---|---|
Usa eax para cargar o almacenar | eax es el registro de 32 bits |
Desafío
FácilCrea una palabra doble llamada distance con el valor 125000 en la sección .data.
Pruébalo tú mismo
%include "data.asm"
section .data
msg db 'distance = '
msg_len equ $ - msg
newline db 0xa
section .bss
buffer resb 32
section .text
global _start
_start:
; Cargar el valor de doble palabra en eax
mov eax, [distance]
; Convertir eax a una cadena decimal
mov rsi, buffer
add rsi, 31 ; Ir al final del búfer
mov byte [rsi], 0 ; Terminador nulo
mov ecx, 10 ; Divisor para la conversión decimal
convert_loop:
xor edx, edx ; Limpiar edx para la división
div ecx ; Dividir eax por 10, eax = cociente, edx = resto
add dl, '0' ; Convertir el resto a ASCII
dec rsi
mov [rsi], dl ; Almacenar el dígito
cmp eax, 0
jnz convert_loop
; Guardar el puntero del dígito y la longitud ANTES de que se sobrescriban
mov r8, rsi ; r8 = puntero al primer dígito
mov r9, buffer
add r9, 31
sub r9, rsi ; r9 = número de dígitos
; Imprimir mensaje
mov rax, 1
mov rdi, 1
mov rdx, msg_len
mov rsi, msg
syscall
; Imprimir el número
mov rax, 1
mov rdi, 1
mov rsi, r8
mov rdx, r9
syscall
; Imprimir nueva línea
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; Salir
mov rax, 60
mov rdi, 0
syscall
Esta 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