Menu
Coddy logo textTech

dw - Word Tanımlama

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

db bir bayt veri oluşturur. Ancak bazen tek bir bayta (0-255) sığmayan daha büyük sayıları depolamanız gerekir. Bunun için dw kullanılır: Word Tanımla.

x86 assembly'de bir word 2 bayttır (16 bit).

Sözdizimi:

label dw value
  • label: bu bellek adresine verdiğiniz ad
  • dw: Word tanımlama yönergesi
  • value: depolanacak sayı (0 ile 65.535 arası)

Örnekler:

section .data
    smallNum dw 1000       ; 2 bayt, değer 1000
    bigNum   dw 65535      ; 2 bayt, maksimum değer (tüm bitler 1)
    price    dw 499        ; 2 bayt, değer 499

Tek bir kelimede (2 bayt) saklayabilecekleriniz:

TürAralıkÖrnek
Küçük ila orta büyüklükte sayı0 to 65,535dw 32000
Bellek ofseti (16 bit)0 to 65,535dw 0x7FFF

Tek bir satırda birden çok sözcük:

section .data
    values dw 100, 200, 300, 400    ; 4 word oluşturur (toplam 8 bayt)

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

Bir sözcük 2 bayt olduğundan, 16 bitlik ax yazmacını (al değil) kullanırsınız:

section .data
    myWord dw 1000

section .text
    mov ax, [myWord]    ; 1000 değerini ax'e yükle
    add ax, 500         ; ax 1500 olur
    mov [myWord], ax    ; 1500'ü myWord'e geri sakla

Karşılaştırma: db ve dw

YönergeBoyutAralıkKullanılacak yazmaç
db1 bayt0 - 255al
dw2 bayt0 - 65,535ax
challenge icon

Görev

Kolay

.data bölümünde 25000 değerine sahip population adında bir sözcük oluşturun.

Kendin dene

%include "data.asm"

section .data
    msg db 'population = '
    msg_len equ $ - msg
    newline db 0xa

section .bss
    buffer resb 16

section .text
    global _start

_start:
    ; Word değerini ax'e yükle
    mov ax, [population]
    
    ; ax'i ondalık dizeye dönüştür
    mov rsi, buffer
    add rsi, 15          ; Buffer'ın sonuna git
    mov byte [rsi], 0    ; Null sonlandırıcı
    
    mov cx, 10           ; Ondalık dönüşüm için bölen
    
convert_loop:
    xor dx, dx           ; Bölme için dx'i temizle
    div cx               ; ax'i 10'a böl, ax = bölüm, dx = kalan
    add dl, '0'          ; Kalanı ASCII'ye dönüştür
    dec rsi
    mov [rsi], dl        ; Basamağı sakla
    cmp ax, 0
    jnz convert_loop

    ; Basamak işaretçisini ve uzunluğunu BOZULMADAN ÖNCE kaydet
    mov r8, rsi          ; r8 = ilk basamağa işaretçi
    mov r9, buffer
    add r9, 15
    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