Penggunaan int86 untuk mencetak karakter menggunakan interupsi BIOS 10 heksadesimal servis 09 heksadesimal
Berikut
adalah kode programnya :
Baris 1
sampai baris 3 pada program diatas merupakan penentuan header yang akan
digunakan, yaitu conio.h, dos.h dan stdlib.h. Header conio.h digunakan karena
pada baris 18 kita akan menggunakan fungsi clrscr dan pada baris 20 kita akan
menggunakan fungsi getch. Header dos.h digunakan karena pada baris 9 kita
mendeklarasikan variabel in dan out menggunakan tipe union REGS serta pada
baris 19 kita akan memanggil fungsi int86. Header stdlib.h digunakan karena
pada baris 22 kita akan menggunakan nilai konstanta EXIT_SUCCESS.
Pada baris 5
kita mendeklarasikan konstanta dengan nama VIDEO_INT yang bernilai 10
heksadesimal. Konstanta ini digunakan saat memanggil fungsi video int86 untuk
menjalankan interupsi 10 heksadesimal servis 9 heksadesimal. Cobalah untuk mengganti
nilai pada in.h.bl dari yang semula 0x07 menjadi nilai lain, misalnya 0x0a,
0x09 atau 0x04 kemudian jalankan program. Apa yang terjadi?
Pada contoh diatas variabel yang digunakan
bernama in dan out. Perhatikanlah cara memberikan nilai pada variabel in yang
merupakan union REGS pada baris 11 sampai baris 16. Pada contoh diatas in.h.ah,
atau in.h.al dan sebagainya berarti memberikan nilai union REGS pada struktur
BYTEREGS dengan nama h dan field ah atau al yang bertipe unsigned character.
Dan berikut hasil outputnya:
Berikut ini adalah program dengan tujuan yang
sama seperti pada contoh diatas untuk mencetak huruf A di layar. Perbedaannya
adalah fungsi int86 digantikan dengan kode-kode inline assembly, berikut ini
adalah kode programnya ;
baris 11 sampai
dengan baris 16 berisi Instruksi mov ah, 0x09 artinya menyimpan nilai 9
heksadesimal kedalam register AH. Demikian juga dengan instruksi mov bh,
0x00 atau mov cl, 0x01. Dalam pemrograman bahasa assembly opcode mov
digunakan untuk memberikan nilai kedalam suatu operand, dalam hal ini register
AH, AL, BH, BL dan sebagainya. Kemudian amati pula baris 17. Pada baris 17
instruksi int VIDEO_INT bukan berarti mendeklarasikan variabel VIDEO_INT
dengan tipe data integer, melainkan menjalankan interupsi yang nilai
interupsinya disimpan dalam konstanta VIDEO_INT, yaitu 0x10
atau 10 heksadesimal. Dalam pemrograman bahasa assembly opcode int digunakan
untuk menjalankan interupsi sesuai dengan nomor interupsi sesudah kata kunci
int.
0 komentar:
Posting Komentar