Menu
Coddy logo textTech

dd – Double Word definieren

Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 26 von 45.

dw erstellt 2 Bytes an Daten. Aber manchmal benötigst du noch größere Zahlen. Dafür verwendest du dd: Define Double Word.

Ein double word in der x86-Assembly besteht aus 4 Bytes (32 Bit).

Syntax:

label dd value

Beispiele:

section .data
    myNumber dd 50000        ; 4 Bytes, Wert 50000
    bigNum   dd 4000000      ; 4 Bytes, Wert 4 Millionen
    max32    dd 4294967295   ; Maximaler 32-Bit-Wert

Vergleichstabelle:

DirektiveGrößeBereichZu verwendendes Register
db1 byte0 bis 255al
dw2 bytes0 bis 65,535ax
dd4 bytes0 bis 4,294,967,295eax

So verwendest du ein double word in deinem Code:

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; Wert in eax laden
    add eax, 10000         ; eax wird 60000
    mov [myNumber], eax    ; Zurück speichern

Wichtige Regel:

RegelErklärung
Verwende eax zum Laden oder Speicherneax ist das 32-Bit-Register
challenge icon

Aufgabe

Einfach

Erstelle ein Doppelwort namens distance mit dem Wert 125000 im Abschnitt .data.

Probier es selbst

%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:
    ; Lade den Doppelwort-Wert in eax
    mov eax, [distance]
    
    ; Konvertiere eax in einen Dezimalstring
    mov rsi, buffer
    add rsi, 31          ; Gehe zum Ende von buffer
    mov byte [rsi], 0    ; Nullterminator
    
    mov ecx, 10          ; Divisor für die Dezimalumwandlung

convert_loop:
    xor edx, edx         ; Lösche edx für die Division
    div ecx              ; Teile eax durch 10, eax = Quotient, edx = Rest
    add dl, '0'          ; Konvertiere den Rest zu ASCII
    dec rsi
    mov [rsi], dl        ; Speichere die Ziffer
    cmp eax, 0
    jnz convert_loop

    ; Speichere Ziffernzeiger und Länge BEVOR sie überschrieben werden
    mov r8, rsi          ; r8 = Zeiger auf die erste Ziffer
    mov r9, buffer
    add r9, 31
    sub r9, rsi          ; r9 = Anzahl der Ziffern
    
    ; Nachricht ausgeben
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; Die Zahl ausgeben
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; Zeilenumbruch ausgeben
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; Beenden
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Assembly-Playground