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 valuelabel: nama yang kamu berikan untuk alamat memori inidw: direktif Define Wordvalue: 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 499Hal yang bisa kamu simpan dalam satu word (2 byte):
| Tipe | Rentang | Contoh |
|---|---|---|
| Bilangan kecil hingga sedang | 0 hingga 65,535 | dw 32000 |
| Offset memori (16-bit) | 0 hingga 65,535 | dw 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 myWordPerbandingan: db vs dw
| Direktif | Ukuran | Rentang | Register yang digunakan |
|---|---|---|---|
db | 1 byte | 0 sampai 255 | al |
dw | 2 bytes | 0 sampai 65,535 | ax |
Tantangan
MudahBuat 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
4Definisi Data
Bagian .datadb, Definisikan Bytedw, Definisikan Worddd, Definisikan Double Worddq, Definisikan Quad Wordstring dengan dbSimbol $Tinjauan: Buat data.asmLatihan sendiri: Playground Assembly