Menu
Coddy logo textTech

dd - Double Word Tanımlama

Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 26 / 45.

dw 2 bayt veri oluşturur. Ancak bazen daha da büyük sayılara ihtiyaç duyarsın. Bunun için dd kullanırsın: Define Double Word.

x86 assembly'de double word 4 bayttır (32 bit).

Sözdizimi:

label dd value

Örnekler:

section .data
    myNumber dd 50000        ; 4 bayt, değer 50000
    bigNum   dd 4000000      ; 4 bayt, değer 4 milyon
    max32    dd 4294967295   ; Maksimum 32-bit değer

Karşılaştırma tablosu:

YönergeBoyutAralıkKullanılacak yazmaç
db1 bayt0 to 255al
dw2 bayt0 to 65,535ax
dd4 bayt0 to 4,294,967,295eax

Kodunuzda çift sözcük nasıl kullanılır:

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; Değeri eax'e yükle
    add eax, 10000         ; eax 60000 olur
    mov [myNumber], eax    ; Geri sakla

Önemli kural:

KuralAçıklama
Yüklemek veya depolamak için eax kullanıneax 32 bitlik yazmaçtır
challenge icon

Görev

Kolay

.data bölümünde 125000 değerine sahip distance adlı bir çift sözcük oluşturun.

Kendin dene

%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:
    ; double word değerini eax'e yükle
    mov eax, [distance]
    
    ; eax'i ondalık dizeye dönüştür
    mov rsi, buffer
    add rsi, 31          ; buffer'ın sonuna git
    mov byte [rsi], 0    ; Null sonlandırıcı
    
    mov ecx, 10          ; Ondalık dönüşüm için bölen

convert_loop:
    xor edx, edx         ; Bölme için edx'i temizle
    div ecx              ; eax'i 10'a böl, eax = bölüm, edx = kalan
    add dl, '0'          ; Kalanı ASCII'ye dönüştür
    dec rsi
    mov [rsi], dl        ; Basamağı sakla
    cmp eax, 0
    jnz convert_loop

    ; Basamak işaretçisini ve uzunluğunu üzerine yazılmadan ÖNCE kaydet
    mov r8, rsi          ; r8 = ilk basamağa işaretçi
    mov r9, buffer
    add r9, 31
    sub r9, rsi          ; r9 = basamak sayısı
    
    ; Mesajı yazdır
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; Sayıyı yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; Yeni satır yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; Çıkış
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground