Dalam pemrograman Assembly x86, kita berkomunikasi dengan hardware melalui mekanisme Interupsi (INT). Setiap perangkat keras memiliki “Nomor Telepon” (Interrupt Number) sendiri, dan setiap “Nomor Telepon” memiliki daftar “Menu Layanan” (nilai register AH).
Tentu kita harus mengetahui kode-kode untuk berinteraksi dengan Interrupt tersebut
Berikut adalah tiga pilar utama yang harus dikuasai: Video, Disk, dan Keyboard.
1. Layanan Video (Video Services)
Panggilan Utama: INT 0x10
Layanan ini mengontrol apa yang tampil di monitor. Ini adalah “kartu grafis” primitif Anda.
| Kode Menu (AH) | Nama Fungsi | Deskripsi & Kegunaan |
0x00 | Set Video Mode | Mengubah mode layar. • AL=0x03: Mode Teks Standar (80×25 karakter).• AL=0x13: Mode Grafis VGA (320×200 piksel, 256 warna). Penting untuk membuat game/GUI. |
0x02 | Set Cursor Position | Memindahkan kursor ke koordinat tertentu. • DH: Baris (Row).• DL: Kolom (Column).• BH: Nomor Halaman (biasanya 0). |
0x03 | Get Cursor Position | Bertanya “Di mana kursor sekarang?”. • BIOS akan menjawab dengan mengisi DH dan DL dengan koordinat saat ini. |
0x0E | Teletype Output | (Yang Anda pakai sekarang) Mencetak karakter + geser kursor otomatis. |
0x09 | Write Character & Attribute | Mencetak karakter dengan WARNA. • AL: Karakter.• BL: Kode Warna (misal 0x04 = Merah).• Catatan: Kursor tidak geser otomatis. |
2. Layanan Penyimpanan (Disk Services)
Panggilan Utama: INT 0x13
Ini adalah layanan paling vital. Tanpa ini, bootloader Anda tidak bisa memuat Kernel (inti OS) dari hard disk ke RAM.
Peringatan: Hati-hati menggunakan fungsi tulis (
0x03). Salah parameter bisa menghapus data partisi komputer Anda. Gunakan Virtual Machine (QEMU/VirtualBox) untuk keamanan.
| Kode Menu (AH) | Nama Fungsi | Deskripsi & Kegunaan |
0x00 | Reset Disk System | Meminta disk drive untuk kalibrasi ulang (head reset). Dilakukan sebelum membaca disk untuk memastikan drive siap. |
0x02 | Read Sectors | (Sangat Penting) Membaca data dari Disk ke RAM. • AL: Jumlah sektor yang mau dibaca.• CL: Nomor Sektor (mulai dari 1).• CH: Nomor Cylinder/Track.• DH: Nomor Head.• ES:BX: Alamat RAM tujuan (Buffer). |
0x03 | Write Sectors | Menulis data dari RAM ke Disk. Parameter sama dengan Read Sectors. |
0x08 | Get Drive Parameters | Bertanya spesifikasi disk (berapa jumlah track/head). Berguna untuk mendeteksi kapasitas hard disk. |
3. Layanan Keyboard (Input Services)
Panggilan Utama: INT 0x16
Bagaimana OS Anda menerima ketikan pengguna? Lewat interupsi ini.
| Kode Menu (AH) | Nama Fungsi | Deskripsi & Kegunaan |
0x00 | Read Key (Blocking) | Komputer akan BERHENTI (Pause) sampai user menekan tombol. • Jika tombol ditekan, kode tombol (ASCII) disimpan di AL. |
0x01 | Get Key Status (Non-Blocking) | Mengecek “Apakah ada tombol yang ditekan?” tanpa menghentikan program. • Berguna untuk membuat game (agar karakter tetap bergerak meski tombol tidak ditekan). |
4. Layanan Sistem (System Services)
Layanan serba-serbi untuk mengontrol motherboard.
| Panggilan (INT) | Kode Menu (AH) | Nama Fungsi | Deskripsi |
INT 0x19 | – | Reboot System | Memaksa komputer restart (Warm Boot). Berguna jika OS mengalami error fatal. |
INT 0x15 | 0x86 | Wait (Sleep) | Menyuruh prosesor tidur selama sekian mikrodetik. • CX:DX: Durasi waktu tunggu. |
INT 0x12 | – | Get Memory Size | Mengetahui berapa banyak RAM (Conventional Memory) yang tersedia. |
Tips Profesional: Referensi Pamungkas
Di dunia pemrograman sistem, tidak ada orang yang menghafal semua kode ini di luar kepala. Para profesional menggunakan “Kitab Suci” yang disebut RBIL (Ralf Brown’s Interrupt List).
Jika Anda ingin mencari fungsi yang aneh-aneh (misalnya mendeteksi Mouse atau memutar suara speaker beep), struktur pencariannya selalu sama:
- Tentukan Perangkat (
INTberapa?) - Tentukan Fungsi (
AHberapa?) - Siapkan Parameter (Isi register
AL,BX,CX, dll sesuai buku manual).
