Menu
Coddy logo textTech

dd - Double Word Tanımlama

Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 26 / 45.

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

x86 assembly'de bir double word (çift kelime) 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 ile 255 arasıal
dw2 bayt0 ile 65.535 arasıax
dd4 bayt0 ile 4.294.967.295 arasıeax

Kodunuzda bir double word (çift kelime) nasıl kullanılır:

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; Değeri eax içine yükle
    add eax, 10000         ; eax 60000 olur
    mov [myNumber], eax    ; Geriye kaydet

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

convert_loop:
    xor edx, edx         ; Bölme işlemi 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ğın işaretçisi
    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.

Temeller bölümündeki tüm dersler