Menu
Coddy logo textTech

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 ddDefinir Palabra Doble.

Una palabra doble en ensamblador x86 es de 4 bytes (32 bits).

Sintaxis:

label dd value

Ejemplos:

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 bits

Tabla comparativa:

DirectivaTamañoRangoRegistro a usar
db1 byte0 a 255al
dw2 bytes0 a 65,535ax
dd4 bytes0 a 4,294,967,295eax

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 nuevo

Regla importante:

ReglaExplicación
Usa eax para cargar o almacenareax es el registro de 32 bits
challenge icon

Desafío

Fácil

Crea 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
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos