Menu
Coddy logo textTech

dd - Definire una double word

Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 26 di 45.

dw crea 2 byte di dati. Ma a volte servono numeri ancora più grandi. In quel caso, si usa dd: Definisci una doppia parola.

Una doppia parola nell'assembly x86 è composta da 4 byte (32 bit).

Sintassi:

label dd value

Esempi:

section .data
    myNumber dd 50000        ; 4 byte, valore 50000
    bigNum   dd 4000000      ; 4 byte, valore 4 milioni
    max32    dd 4294967295   ; Valore massimo a 32 bit

Tabella di confronto:

DirettivaDimensioneIntervalloRegistro da usare
db1 byteda 0 a 255al
dw2 byteda 0 a 65,535ax
dd4 byteda 0 a 4,294,967,295eax

Come usare una parola doppia nel tuo codice:

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; Carica il valore in eax
    add eax, 10000         ; eax diventa 60000
    mov [myNumber], eax    ; Memorizza di nuovo

Regola importante:

RegolaSpiegazione
Usa eax per caricare o memorizzareeax è il registro a 32 bit
challenge icon

Sfida

Facile

Crea una doppia parola chiamata distance con il valore 125000 nella sezione .data.

Provalo tu

%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:
    ; Carica il valore a doppia parola in eax
    mov eax, [distance]
    
    ; Converti eax in una stringa decimale
    mov rsi, buffer
    add rsi, 31          ; Vai alla fine di buffer
    mov byte [rsi], 0    ; Terminatore nullo
    
    mov ecx, 10          ; Divisore per la conversione decimale

convert_loop:
    xor edx, edx         ; Azzera edx per la divisione
    div ecx              ; Dividi eax per 10, eax = quoziente, edx = resto
    add dl, '0'          ; Converti il resto in ASCII
    dec rsi
    mov [rsi], dl        ; Memorizza la cifra
    cmp eax, 0
    jnz convert_loop

    ; Salva il puntatore alla cifra e la lunghezza PRIMA che vengano sovrascritti
    mov r8, rsi          ; r8 = puntatore alla prima cifra
    mov r9, buffer
    add r9, 31
    sub r9, rsi          ; r9 = numero di cifre
    
    ; Stampa il messaggio
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; Stampa il numero
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; Stampa un ritorno a capo
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; Esci
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly