Menu
CoddyTech

dw, Definisikan Word

Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 25 dari 45.

db membuat satu byte data. Namun, terkadang kamu perlu menyimpan angka yang lebih besar dan tidak muat dalam satu byte (0-255). Untuk itu, kamu menggunakan dw: Define Word.

Sebuah word dalam bahasa assembly x86 berukuran 2 byte (16 bit).

Sintaks:

label dw value
  • label: nama yang kamu berikan untuk alamat memori ini
  • dw: direktif Define Word
  • value: angka yang disimpan (0 hingga 65,535)

Contoh:

section .data
    smallNum dw 1000       ; 2 byte, nilai 1000
    bigNum   dw 65535      ; 2 byte, nilai maksimum (semua bit bernilai 1)
    price    dw 499        ; 2 byte, nilai 499

Hal yang bisa kamu simpan dalam satu word (2 byte):

TipeRentangContoh
Bilangan kecil hingga sedang0 hingga 65,535dw 32000
Offset memori (16-bit)0 hingga 65,535dw 0x7FFF

Beberapa kata dalam satu baris:

section .data
    values dw 100, 200, 300, 400    ; Membuat 4 word (total 8 byte)

Cara menggunakan word dalam kodemu:

Karena word berukuran 2 byte, gunakan register 16-bit ax (bukan al):

section .data
    myWord dw 1000

section .text
    mov ax, [myWord]    ; Muat nilai 1000 ke ax
    add ax, 500         ; ax menjadi 1500
    mov [myWord], ax    ; Simpan kembali 1500 ke myWord

Perbandingan: db vs dw

DirektifUkuranRentangRegister yang digunakan
db1 byte0 sampai 255al
dw2 bytes0 sampai 65,535ax
challenge icon

Tantangan

Mudah

Buat word bernama population dengan nilai 25000 di bagian .data.

Coba sendiri

%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:
    ; Muat nilai word ke ax
    mov ax, [population]
    
    ; Ubah ax menjadi string desimal
    mov rsi, buffer
    add rsi, 15          ; Pindah ke akhir buffer
    mov byte [rsi], 0    ; Penanda akhir null
    
    mov cx, 10           ; Pembagi untuk konversi desimal
    
convert_loop:
    xor dx, dx           ; Kosongkan dx untuk pembagian
    div cx               ; Bagi ax dengan 10, ax = hasil bagi, dx = sisa
    add dl, '0'          ; Ubah sisa menjadi ASCII
    dec rsi
    mov [rsi], dl        ; Simpan digit
    cmp ax, 0
    jnz convert_loop

    ; Simpan pointer dan panjang digit SEBELUM nilainya tertimpa
    mov r8, rsi          ; r8 = pointer ke digit pertama
    mov r9, buffer
    add r9, 15
    sub r9, rsi          ; r9 = jumlah digit
    
    ; Cetak pesan
    mov rax, 1
    mov rdi, 1
    mov rdx, msg_len
    mov rsi, msg
    syscall
    
    ; Cetak angkanya
    mov rax, 1
    mov rdi, 1
    mov rsi, r8
    mov rdx, r9
    syscall
    
    ; Cetak baris baru
    mov rax, 1
    mov rdi, 1
    mov rsi, newline
    mov rdx, 1
    syscall
    
    ; Keluar
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Playground Assembly