Rabu, 22 Juni 2011

periintah record

Perintah RECORD
Perintah RECORD merupakan penjelasan kumpulan bit dalam suatu operand byte atau word. Kita menggunakan perintah ini untuk membuat masking bit dan penggeseran bit lebih mudah. Pertama, record harus didefinisikan dengan nama record dan nama dan lebar setiap field. Sintak untuk pendefinisian record adalah :
Recordname RECORD field [,field] …
Sintak untuk field adalah:
Fieldname : width [= ekspresi]
Fieldname adalah nama filed tertentu dalam record; dan field awal disimpan dalam bit yang paling berarti dari byte atau word.
Berikut ini contoh penggunaaan perintah RECORD untuk mendefinisikan susunan bit tanggal 16-bit yang disimpan dalam direktori disk. Tanggal dalam bit-terpetakan, dengan 7-bit untuk tahun, 4 bit untuk bulan dan 5 bit untuk hari:
1111111 1111 11111
Tahun bulan hari
Penggunaan yang sesuai dengan perintah RECORD untuk tanggal adalah:
Date_record record year:7=0, month:4=1, day:5=1
Jika kita mendefinisikan record yang mengandung 8 bit atau kurang, record secara otomatis akan mengacu pada byte-selebihnya, akan mengacu pada word. Jika semua posisi bit tidak digunakan, field bit adalah rapat kanan. Contoh, record berikut hanya mendefinisikan 12 bit. Assembler menset bit posisi rendah dalam field dan menset 4 bit atas tidak bertanda dengan nol:
Bitrec record field1:6=111111b, field2:6=111111b
Nilai seluruh 16 bit adalah:
0000111111111111
Pembuatan Variabel Record. Ketika record telah didefinisikan, mungkin digunakan untuk membuat variabel record. Sintaknya adalah:
[name] recordname <[innitialvalue[,innitialvalue]]…>
Kita dapat memberikan nilai awal pada field tertentu. Jika nilai yang diberikan terlalu besar maka assembler akan menampilkan pesan kesalahan.
Berikut ini contoh variabel record menggunakan definisi date_record di atas, sebagai berikut:
Date_record record year:7=0, month:4=1, day:5=1


Daterec date_record<>
Dengan cara lain, kita dapat menginisialisasikan daterec dengan 30 May 1990:
Daterec date_record<10, 5, 30>
Penggeseran dan Masking. AKhir dari semuanya, nama field dalam record membantu kita untuk menggeser dan mask dengan lebih mudah. Contoh penyimpanan record 10 Maret 1989:
0001001 0011 01010
Tahun=9 bulan=3 hari=10
Misalnya tanggal dipindah ke AX, kita dapat mengisolasi bit yang membuat bulan dengan meng_AND-kan AX kemudian menggesernya ke kanan:
And ax, 0000000111100000b
Mov cl, 5
Shr ax, cl
Operator MASK. Jika kita menggunakan perintah RECORD untuk mendefinisikan date_record kita dapat meningkatkan perintah sebelumnya. Operator MASK membuat mask terhadap bit : semua bit yang berkorespondensi dengan posisi bit diset, dan semua bit lain di nolkan:
Mov ax, file_date
And ax, mask month
Mov cl, month
shr ax,cl
Pada saat date_record didefinisikan, assembler otomatis membuat nilai angka pada masing masing field, tergantung pada nilai penggeserannya. Ini dapat diinterprestasikan sebagai offset bit filed dari posisi nol. Pada contoh sebelumnya, month dipindah ke CL, menyebabkan jumlah penggeseran. Tabel berikut menunjukan nilai geser setiap field:
0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0
Tahun=9 bulan=3 hari=10
Field Nilai geser
Year 9
Month 5
Day 0
Operator WIDTH. Operator WIDTH mengembalikan jumlah bit dalam field record. Contoh berikut mengakses lembar masing masing field dalam date_record dalam berbagai cara. Berikut ini nilai nilai pada saat assembly :
Date_record record year;7=0, month:4=1, day:5=1

Daterec date_record<>
Size_of_year equ width year
Size_of_month equ width month


Mov ax, width day
If(width,date_record) gt 8
Mov ax, daterec
Else
Mov al, daterec
Endif

Tidak ada komentar:

Posting Komentar