Sabtu, 08 April 2017

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:

1:  asm <opcode> <operand>; /* Komentar bahasa C/C++ */  


Kata kunci asm bisa juga diketikan sebagai blok pernyataan, seperti berikut ini:

1:  asm {   
2:       <opcode> <operand>; /* Komentar bahasa C/C++ */   
3:       <opcode> <operand>; /* atau baris baru */   
4:  }  

Berikut ini adalah program dengan tujuan yang sama seperti pada contoh01.cpp untuk mencetak huruf A di layar. Perbedaannya adalah fungsi int86 digantikan dengan kode-kode inline assembly, berikut ini adalah kode programnya yang disimpan dengan nama file project contoh02.ide dan file kode program contoh002.cpp.

contoh02.cpp
1:  #include <conio.h>  
2:  #include <dos.h>  
3:  #include <stdlib.h>  
4:  #define VIDEO_INT 0x10 // BIOS Video Interrupt  
5:  int main(void)  
6:  {  
7:       clrscr();  
8:       asm mov ah, 0x09; // AH = 9 heks.  
9:       asm mov al, 0x86; // AL = 86 heks., huruf a  
10:       asm mov bh, 0x00; // BH = 0 heks., halaman layar  
11:       asm mov bl, 0x07; // BL = 7 heks., warna huruf  
12:       asm mov ch, 0x00; // CH dan CL menentukan banyak  
13:       asm mov cl, 0x07; // huruf yang akan dicetak  
14:       asm int VIDEO_INT; // Interupsi BIOS 10h  
15:       getch();  
16:       return EXIT_SUCCESS;  
17:  }  

Perhatikanlah baris 11 sampai dengan baris 16! 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.

Hasil:


Tidak ada komentar:

Posting Komentar