Menu
Coddy logo textTech

dd - Définir un double mot

Fait partie de la section Fondamentaux du Journey Assembly de Coddy — leçon 26 sur 45.

dw crée 2 octets de données. Mais parfois, vous avez besoin de nombres encore plus grands. Pour cela, vous utilisez ddDéfinir un double mot.

Un double mot en assembleur x86 fait 4 octets (32 bits).

Syntaxe :

label dd value

Exemples :

section .data
    myNumber dd 50000        ; 4 octets, valeur 50000
    bigNum   dd 4000000      ; 4 octets, valeur 4 millions
    max32    dd 4294967295   ; Valeur maximale sur 32 bits

Tableau de comparaison :

DirectiveTaillePlageRegistre à utiliser
db1 octet0 à 255al
dw2 octets0 à 65 535ax
dd4 octets0 à 4 294 967 295eax

Comment utiliser un double mot dans votre code :

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; Charger la valeur dans eax
    add eax, 10000         ; eax devient 60000
    mov [myNumber], eax    ; Stocker en retour

Règle importante :

RègleExplication
Utilisez eax pour charger ou stockereax est le registre 32 bits
challenge icon

Défi

Facile

Créez un double mot appelé distance avec la valeur 125000 dans la section .data.

Essayez vous-même

%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:
    ; Charger la valeur double mot dans eax
    mov eax, [distance]
    
    ; Convertir eax en chaîne décimale
    mov rsi, buffer
    add rsi, 31          ; Aller à la fin du tampon
    mov byte [rsi], 0    ; Terminateur nul
    
    mov ecx, 10          ; Diviseur pour la conversion décimale

convert_loop:
    xor edx, edx         ; Effacer edx pour la division
    div ecx              ; Diviser eax par 10, eax = quotient, edx = reste
    add dl, '0'          ; Convertir le reste en ASCII
    dec rsi
    mov [rsi], dl        ; Stocker le chiffre
    cmp eax, 0
    jnz convert_loop

    ; Sauvegarder le pointeur de chiffre et la longueur AVANT qu'ils ne soient écrasés
    mov r8, rsi          ; r8 = pointeur vers le premier chiffre
    mov r9, buffer
    add r9, 31
    sub r9, rsi          ; r9 = nombre de chiffres
    
    ; Imprimer le message
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; Imprimer le nombre
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; Imprimer un saut de ligne
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; Quitter
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux