Selasa, 21 Juni 2011

INSTRUKSI DEFINISI DATA

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
Deklarasi                                                 Isi                 AList db ‘ABCD’                  Offset
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