A.
Pembuatan
Project dan Kode Program
Untuk bisa membuat program
menggunakan fungsi int86(...) dan teknik inline assembly, maka kode
program C++ yang akan dibuat harus merupakan bagian dari sebuah project file,
tidak bisa hanya sebuah file kode sumber saja.
1. Klik menu File pada menu bar, kemudian pilih dan klik menu New dan pilih menu Project, maka akan muncul jendela New Target
2. Klik tombol Browse untuk menentukan nama file dan lokasi penyimpanan project.
3. Ketikan nama project pada textbox File name dan klik tombol Open. Textbox Project Path and Name pada jendela New Target akan berisi nama direktori dimana project disimpan dan Target Name akan berisi nama project.
4. Pada listbox Target Type pilihlah Application (.exe).
5. Pada combo box Platform pilihlah DOS (Standard).
6. Pada combo box Target Model pilihlah Small.
7. Berilah tanda cek pada check box Class Library.
8.Pada radio button Math Support pilihlah sesuai dengan kondisi.
9. Kosongkan semua check box pada pilihan Libraries.
10.Klik tombol OK untuk mulai membuat program. Borland C++ 5.02 akan menampilkan Project Window.
11. Pada Project Window terdapat node nama project (berakhiran .exe) dan node kode program (berakhiran .cpp) dibawah node nama project. Klik kanan pada node kode.
12. Borland C++ 5.02 akan memunculkan Edit Window seperti diperlihatkan pada gambar I.5. Pada Edit Window inilah kode program mulai diketikan.
13. Untuk menutup project dapat dilakukan dengan memilih menu Project dari menu bar kemudian pilih submenu Close Project.
14. Untuk membuka kembali file project yang sudah ada dapat dilakukan dengan memilih menu Project dari menu bar dan memilih menu Open Project, maka akan ditampilkan jendela Open Project File.
15.Untuk membuka project, kliklah nama file project dari listbox File Name dan klik tombol OK.
B. Memanggil
Interupsi BIOS atau DOS Menggunakan Fungsi int86
Borland
C++ 5.02 menyediakan sebuah fungsi untuk menjalankan interupsi BIOS atau DOS,
yaitu fungsi int86. Nama fungsi ini dideklarasikan di file header dos.h,
berikut ini adalah sintaks dari fungsi int86:
int int86(int nomor, union REGS *inregs,
union REGS *outregs)
Keterangan:
int nomor, nomor
interupsi yang akan dijalankan.
union REGS *inregs,
representasi register pada mikroprosesor yang berisi nilai yang akan digunakan
untuk menjalankan interupsi.
union REGS *outregs,
representasi register pada mikroprosesor setelah interupsi dijalankan.
Pada
fungsi int86, parameter nomor bertipe integer dan dikirimkan secara nilai (by
value), sedangkan parameter inregs dan outregs merupakan tipe data union
REGS yang telah didefinisikan pada header dos.h dan dikirimkan secara acuan (by
reference). Diharapkan pembaca telah memahami tipe data union dan struktur
serta pengiriman parameter secara acuan atau secara nilai. Fungsi int86
mengembalikan nilai bertipe integer dari register AX setelah interupsi
dijalankan. Tipe data union REGS yang didefinisikan pada file header dos.h
merupakan union yang terdiri dari struktur WORDREGS dan BYTEREGS. Berikut ini
adalah deklarasi union REGS pada file header dos.h:
Contoh
1:
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#define VIDEO_INT 0x10 // BIOS Video Interrupt
int main(void)
{
union REGS in, out; // Deklarasi variabel
in.h.ah = 0x09; // AH = 9 heksadesimal
in.h.al = 'A'; // AL = 41 heksadesimal, huruf A
in.h.bh = 0x00; // BH = 0, halaman video
in.h.bl = 0x07; // BL = 7, warna huruf dan dasar
in.h.ch = 0x00; // CH dan CL menentukan banyak
in.h.cl = 0x01; // huruf yang akan dicetak
clrscr();
int86(VIDEO_INT, &in, &out);
getch();
return EXIT_SUCCESS;
}
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.
C.
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:
Contoh
2:
#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, 0x41; // AL = 41 heks., huruf A
asm mov bh, 0x00; // BH = 0 heks., halaman layar
asm mov bl, 0x07; // BL = 7 heks., warna huruf
asm mov ch, 0x00; // CH dan CL menentukan banyak
asm mov cl, 0x01; // huruf yang akan dicetak
asm int VIDEO_INT; // Interupsi BIOS 10h
getch();
return EXIT_SUCCESS;
}
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 10
0x10 atau 10 heksadesimal. Dalam
pemrograman bahasa assembly opcode int digunakan untuk menjalankan
interupsi sesuai dengan nomor interupsi sesudah kata kunci int.

Tidak ada komentar:
Posting Komentar