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 dd — Define Double Word.
Ein Doppelwort (Double Word) in x86-Assembly besteht aus 4 Byte (32 Bit).
Syntax:
label dd valueBeispiele:
section .data
myNumber dd 50000 ; 4 Bytes, Wert 50000
bigNum dd 4000000 ; 4 Bytes, Wert 4 Millionen
max32 dd 4294967295 ; Maximaler 32-Bit-WertVergleichstabelle:
| Direktive | Größe | Bereich | Zu verwendendes Register |
|---|---|---|---|
db | 1 Byte | 0 bis 255 | al |
dw | 2 Bytes | 0 bis 65.535 | ax |
dd | 4 Bytes | 0 bis 4.294.967.295 | eax |
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ückspeichernWichtige Regel:
| Regel | Erklärung |
|---|---|
Verwenden Sie eax zum Laden oder Speichern | eax ist das 32-Bit-Register |
Aufgabe
EinfachErstellen 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 Architektur4Datendefinition
Der .data-Abschnittdb – Byte definierendw – Word definierendd – Double Word definierendq – Quad Word definierenStrings mit dbDas $-SymbolZusammenfassung: data.asm erstellen