Menu
Coddy logo textTech

dd – Double Word definieren

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

dw erzeugt 2 Byte an Daten. Aber manchmal benötigt man noch größere Zahlen. Dafür verwendet man ddDefine Double Word.

Ein Doppelwort (Double Word) in x86-Assembly besteht aus 4 Byte (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

Wie man ein Double Word in seinem Code verwendet:

section .data
    myNumber dd 50000

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

Wichtige Regel:

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

Aufgabe

Einfach

Erstellen Sie ein Double Word namens distance mit dem Wert 125000 im .data-Abschnitt.

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 Double-Word-Wert in eax
    mov eax, [distance]
    
    ; Konvertiere eax in einen Dezimal-String
    mov rsi, buffer
    add rsi, 31          ; Gehe zum Ende des Puffers
    mov byte [rsi], 0    ; Null-Terminator
    
    mov ecx, 10          ; Divisor für Dezimalkonvertierung

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

    ; Speichere Ziffern-Pointer und Länge, BEVOR sie überschrieben werden
    mov r8, rsi          ; r8 = Pointer zur ersten 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
    
    ; 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