INSTRUKSI DEFINISI DATA
Variable adalah nama simbolik untuk lokasi dalam memori tempat data disimpan. Dalam bahasa assembly, variabel diidentifikasikan oleh label. Setiap label menunjukan lokasi awal variable. Kita katakan bahwa offset label adalah jarak dari awal segmen ke awal variabel.
Label menunjukkan berapa banyak byte memori yang dialokasikan untuk variable. Contoh, jika kita mendeklarasikan array 4 karakter, label AList henya mengidentifikasikan offset karakter awal (A)
A | B | C | D |
1 | 2 | 3 | 4 |

Jadi jika huruf awal pada offset 0 maka selanjutnya pada offset 1,2 dan seterusnya. Kita menggunakan memori berdasarkan pada tipe yang didefinisikan sebelumnya :
Deskripsi | Byte | Atribut | |
DB | Define byte | 1 | Byte |
DW | Define word | 2 | Word |
DD | Define doubleword | 4 | Dobleword |
DF, DP | Define far pointer | 6 | Far pointer |
DQ | Define quadword | 8 | Quadword |
DT | Define tenbytes | 10 | Tenbyte |
Table Definisi Data
v DEFINE BYTE (DB)
Perintah DB mengalokasikan memori untuk satu atau lebih nilai 8-bit. Diagram sintak berikut menunjukan bahwa nama adalah pilihan, dan hanya satu initial value yang diperlukan. Jika diperlukan lebih dari satu maka dipisahkan dengan koma:
[name] DB initialvalue [, initialvalue] …
Initial value dapat berupa satu atau lebih nilai angka 8-bit, konstanta string, ekspresi konstan atau tanda Tanya (?). jika nilai bertanda maka range-nya -128 - + 127; jika tidak bertanda maka range-nya 0-255.
Berikut adalah contohnya :
Char db ‘A’
Signed1 db -128
Signed2 db +127
Unsigned1 db 0
Unsigned2 db 255
Ø Nilai banyak (multiple values)
Daftar bilangan 8-bit mungkin dikelompokan dibawah satu label, dengan nilai dipisahkan oleh koma. Pada contoh berikut, kita umpamakan bahwa daftar disimpan pada offset 0000. Ini artinya bahwa 10 disimpan pada offset 0000, 20 pada offset 0001, 30 pada offset 0002, dan 40 pada offset 0003.
List db 10, 20, 30, 40
Karakter dan integer adalah satu dan sama. Variable berikut mengandung nilai yang sama dan mungkin diproses dengan cara yang sama:
Char db ‘A’
Hex db 41h
Dec db 65
Bin db 01000001b
Oct db 101q
Setiap konstanta mungkin menggunakan radix yang berbeda ketika daftar item didefinisikan, dan angka, karakter dan konstanta string mungkin dicampur secara bebas. Jika nomor heksadecimal mulai dengan huruf (A-F) maka nol diawal ditambahkan untuk membedakannya dengan label.
Dalam contoh ini, list1 dan list2 mempunyai isi yang sama:
List1db 10, 32, 41h, 00100010b
List2 db 0Ah, 20h, ‘A’, 22h
Isi variable mungkin tidak didefinisikan. Untuk itu, digunakan operator tanda Tanya (?). Atau, ekspresi bilangan dapat member nilai awal sebuah variable dengan nilai yang dihitung pada saat disassembly. Contoh :
Count db ?
Ages db ?,?,?,?,?
Rowsize db 10*20
Variable dapat diberi nilai string dimana variable merupakan alwam byte awal. Contoh berikut menunjukan satu string diakhiri oleh byte nol (mengandung 0), dan string lain dengan panjangnya ditulis pada awal byte:
C_string db “good afternoon”, 0
Pascal_string db 14, “good afternoon”
Perintah DB adalah perintah yang digunakan untuk menyimpan satu atau lebih baris teks. Variable tunggal mungkin dilanjutkan untuk banyak baris tanpa perlu membuat label untuk masing masing baris. String berikut diakhiri oleh baris dan byte null:
A_long_string db”this is a long strig, that”
Db “clearly is going to take”
Db “several lines to store in an”
Db “assembly language program”, 0Dh, 0Ah, 0
Assembler dapat menghitung panjang string secara otomatis dengan menggunakan karakter $ yang menyimpan lokasi sekarang nilai counter.
Pada contoh berikut a_string_len diset awal 16:
A_string db “this is a string”
A_string_len db $-a_string
v DEFINE WORD (DW)
Perintah DW membuat tempat menyimpan untuk satu atau lebih word 16-bit. Sintaknya adalah sebagai berikut:
[name] DW initialvalue [,initialvalue]
Initialvalue mungkin berupa nilai bilangan 16-bit dari 0-65,535 (FFFFh). Jika initial value bertanda, range yang dapat diterima adalah dari – 32,768 (8000h) sampai + 32,767 (7FFFh). Konstanta karakter mungkin disimpan pada bagian bawah word. Konstanta string yang besar yang mungkin disimpan dalam word panjangnya 2 karakter, seperti ‘AB’. Variable mungkin juga dibiarkan tidak terinisialisasi dengan menggunakan operator (?).
Ø Pembalikan format penyimpanan (reversed storage format).
Assembler membalik byte dalam nilai word ketika disimpan dalam memori. Ketika variable dipindahkan ke register 16-bit, CPU akan membalik kembali byte tersebut.
Ilustrasi dimana 2AB6h disimpan dalam memori sebagai B6 2A.
Deklarasi data : value1 dw 2AB6h
B6 | 2A |
Penyimpanan :
Seperti pada DB, tanda Tanya memerintahkan assembler untuk tidak menginisialisasi lokasi memori dengan nilai tertentu. Contoh:
dw 1, 2, 3, ; mendefinisikan 3 word
dw 0,65535 ; bilangan tidak bertanda terendah dan tertinggi
dw -32768, +32767 ; bilangan bertanda terendah dan tertinggi
dw 256*2 ; ekspresi konstanta
dw 4000h ; notasi hexadecimal
dw 11111000011110000b ; notasi biner
dw 1000h, 4096, ‘AB’, 0 ; notasi campuran
dw ? ; word tunggal tidak dinialisasi
offset variable atau subrutin mungkin disimpan dalam variable lain yang disebut pointer.
v DEFINE DOUBLEWORD (DD)
Perintah DD membuat tempat penyimpanan untuk satu atau lebih doublewords 32-bit. Sintaknya sebagai berikut :
[name] DD initialvalue [ , initialvalue]…..
Initial value dapat berupa nomor biner samapai 0FFFFFFFFh, alamat segmet-offset, 4-byte bilangan real, atau bilangan riial decimal. Semua byte dalam variable doubleword disimpan dengan urutan terbalik sehingga digit yang paling berarti disimpan pada alamat peling bawah.
Contoh, nilai 12345678h akan disimpan dalam memori sebagai:
Offset : 00 01 02 03
Nilai : 78 56 34 12
v OPERATOR DUP
Operator DUP hanya tampil sesudah perintah pengalokasian memori (DB, DW, DD, DQ, DT). Dengan DUP, anda dapat mengulang satu atau lebih nilai ketika mengalokasikan memori. Ini khusunya berguna ketika pengalokasian ruang untuk table atau aray.
Contoh:
Dp 20 dup (0) ; 20 byte semuanya sama dengan nol
Db 20 dup (?) ; 20 byte tidak diinisialisasi
Db 4 dup (‘ABC’) ; 12 byte:”ABCABCABCABC”
Db 4096 dup (0) ; 4096-byte, semuanya nol
Dw 5 dup (1000h) ; 5 word, masing masing sama dengan nol
Dw 5 dup (?) ; 5 word, tidak diinialisasi
Dd 100h dup (?) ; 256 doublewordk (1024 byte)
Pemeriksaan tipe. Ketika variable dibuat dengan menggunakan DB, DW, DD atau perintah definisi data yang lain, assembler memberinya atribut asal (byte, word, doubleword ) berdasarkan ukuranya. Tipe ini dicek ketika anda merujuk pada variable tersebut, dan akan terjadi kesalahan jika tipenya tidak sesuai. Contohnya, anda ingin memindahkan byte paling rendah variable 16-bit ke dalam register 8-bit. Intruksi MOV berikut akan salah karena count bertipe word, sementara AL adalah byte:
Mov al, count ; error : ukuran operand harus cocok
…
….
Count dw 20h\
Variable dapat diakses menggunakan nama juga :
Mov al, count_low
Mov cx, count
…
…
Count_low label byte
Count dw 20h
Tidak ada komentar:
Posting Komentar