Memanggil Interupsi BIOS dan DOS Menggunakan Teknik Inline Assembly
Teknik inline assembly adalah teknik menuliskan kode-kode bahasa assembly diantara kode-kode bahasa pemrograman yang lain seperti Pascal dan C/C++. Tidak semua kompilator memiliki kemampuan mengkompilasi kode inline assembly. Borland C++ dan Turbo C/C++ memiliki kemampuan ini. Cara menggunakan teknik inline assembly pada Borland C++ 5.02 adalah dengan menggunakan kata cadangan asm dan diikuti oleh kode program bahasa assembly serta diakhiri dengan tanda semicolon/titik koma (;).
Berikut sintaks penggunaan kata kunci asm:
Berikut ini adalah contoh program sederhana dengan tujuan yang sama seperti pada contoh sebelumnya untuk mencetak huruf B di layar. Hanya saja perbedaannya adalah pada fungsi int86 yang digantikan dengan kode-kode inline assembly.
Berikut sintaks penggunaan kata kunci asm:
asm
<opcode> <operand>; /* Komentar bahasa C/C++ */
|
Kata kunci asm bisa juga diketikan sebagai blok pernyataan, seperti berikut ini:
asm {
<opcode> <operand>; /*
Komentar bahasa C/C++ */
<opcode> <operand>; /*
atau baris baru */
}
|
Berikut ini adalah contoh program sederhana dengan tujuan yang sama seperti pada contoh sebelumnya untuk mencetak huruf B di layar. Hanya saja perbedaannya adalah pada fungsi int86 yang digantikan dengan kode-kode inline assembly.
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#define VIDEO_INT 0x10 // BIOS Video Interrupt
int main(void)
{
clrscr();
asm mov ah, 0x09; //
AH = 9 heks
asm mov al, 0x42; //
AL = 42 heks, huruf B
asm mov bh, 0x00; //
BH = 0 heks, halaman layar
asm mov bl, 0x09; //
BL = 9 heks, warna huruf
asm mov ch, 0x00; //
CH dan CL menentukan banyak
asm mov cl, 0x09; //
huruf yang akan dicetak
asm int VIDEO_INT; //
Interrupsi BIOS 10h
getch();
return EXIT_SUCCESS;
}
|
Keterangan:
Pada instruksi mov ah, 0x09 artinya menyimpan nilai 9 heksadesimal kedalam register AH. Begitu 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 untuk 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.
Berikut adalah script coding diatas yang dikerjakan pada lembar project Borlan C++:
Pada instruksi mov ah, 0x09 artinya menyimpan nilai 9 heksadesimal kedalam register AH. Begitu 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 untuk 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.
Berikut adalah script coding diatas yang dikerjakan pada lembar project Borlan C++:
Hasil output dari program tersebut saat berhasil runnng adalah sebagai berikut:
Output dari program tersebut adalah tampilan variabel huruf "B" sebanyak 9 digit dengan warna huruf biru.
Conversion Conversion Emoticon Emoticon