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 dd — Définir un double mot.
Un double mot en assembleur x86 fait 4 octets (32 bits).
Syntaxe :
label dd valueExemples :
section .data
myNumber dd 50000 ; 4 octets, valeur 50000
bigNum dd 4000000 ; 4 octets, valeur 4 millions
max32 dd 4294967295 ; Valeur maximale sur 32 bitsTableau de comparaison :
| Directive | Taille | Plage | Registre à utiliser |
|---|---|---|---|
db | 1 octet | 0 à 255 | al |
dw | 2 octets | 0 à 65 535 | ax |
dd | 4 octets | 0 à 4 294 967 295 | eax |
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 retourRègle importante :
| Règle | Explication |
|---|---|
Utilisez eax pour charger ou stocker | eax est le registre 32 bits |
Défi
FacileCré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
syscallCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1La Machine
Qu'est-ce qu'un CPULa mémoireRegistres vs MémoireFonctionnement des instructionsLe modèle à deux fichiersL'architecture x86-644Définition des données
La section .datadb - Définir un octetdw - Définir un motdd - Définir un double motdq - Définir un quadruple motChaînes de caractères avec dbLe symbole $Récapitulatif : Construire data.asm