Mengenal INT 0x12: Cara Komputer Melakukan “Absensi” Memori RAM

Pernahkah Anda membayangkan apa yang pertama kali dilakukan komputer saat tombol Power ditekan? Selain menguji perangkat keras, salah satu tugas paling krusial bagi sistem adalah mengetahui seberapa besar kapasitas memori RAM yang tersedia. Tanpa informasi ini, sistem operasi tidak akan tahu di mana ia boleh meletakkan datanya.

Di dalam arsitektur komputer berbasis x86 (Real Mode 16-bit), terdapat sebuah mekanisme klasik dan sangat sederhana untuk tugas ini, yaitu melalui BIOS Interrupt 0x12.


Apa Itu INT 0x12?

INT 0x12 adalah sebuah instruksi perangkat lunak (software interrupt) yang disediakan oleh BIOS (Basic Input/Output System) untuk melaporkan jumlah memori dasar atau memori konvensional yang terpasang pada komputer.

Ketika instruksi ini dijalankan, BIOS akan memeriksa tabel data internalnya dan memberikan jawaban kepada CPU mengenai total RAM yang bisa digunakan oleh pengguna sebelum menyentuh area sistem.


Cara Kerja Teknis

Proses penggunaan INT 0x12 sangatlah singkat dan efisien. Tidak seperti fungsi BIOS lainnya yang memerlukan banyak pengaturan pada berbagai register, INT 0x12 hanya berfokus pada satu register tujuan: AX.

  1. Eksekusi: CPU menjalankan perintah int 0x12.
  2. Proses BIOS: BIOS melihat alamat memori 0x0413 (sebuah area di BIOS Data Area) yang menyimpan catatan jumlah memori.
  3. Output: BIOS menaruh nilai kapasitas memori tersebut ke dalam register AX.

Satuan yang Digunakan

Hasil yang dikembalikan dalam register AX menggunakan satuan Kilobyte (KB). Jika register AX berisi angka 640, itu berarti sistem memiliki 640 KB memori konvensional.


Mengapa Hanya Melaporkan 640 KB?

Bagi pengguna komputer modern yang terbiasa dengan RAM berkapasitas 8 GB atau 16 GB, angka 640 KB tentu terdengar sangat kecil. Ada alasan historis di balik hal ini:

  • Batas Memori Konvensional: Pada masa awal arsitektur IBM PC, memori sebesar 1 MB pertama dibagi menjadi dua bagian. 640 KB pertama disediakan untuk sistem operasi dan program pengguna (Conventional Memory), sementara 384 KB sisanya dicadangkan untuk keperluan perangkat keras seperti kartu grafis dan BIOS itu sendiri.
  • Keterbatasan Real Mode: INT 0x12 dirancang untuk berjalan di Real Mode, sebuah mode operasi di mana CPU hanya bisa “melihat” memori hingga 1 MB.

Oleh karena itu, meskipun komputer Anda memiliki RAM 32 GB, jika Anda memanggil INT 0x12, ia akan tetap melaporkan angka di kisaran 639 atau 640 KB. Untuk mendeteksi memori yang lebih besar (Extended Memory), diperlukan instruksi yang lebih modern seperti INT 0x15.


Implementasi dalam Kode Assembly

Berikut adalah contoh bagaimana pengembang bootloader atau kernel mengambil data memori dan menyimpannya ke dalam Stack untuk digunakan kemudian:

; --- Program Deteksi Memori Sederhana ---

[bits 16]           ; Berjalan di mode 16-bit
[org 0x7c00]        ; Lokasi bootloader

start:
    ; 1. Panggil interupsi untuk cek memori
    int 0x12        ; Hasil masuk ke register AX (dalam KB)

    ; 2. Amankan data ke dalam Stack
    ; Kita menyimpannya agar tidak hilang saat melakukan tugas lain
    push ax         

    ; ... di sini Anda bisa menambahkan kode kernel lainnya ...

    ; 3. Ambil kembali data dari stack saat dibutuhkan
    pop dx          ; Sekarang jumlah memori ada di register DX

    jmp $           ; Mengunci CPU

; Tanda tangan Bootloader
times 510-($-$$) db 0
dw 0xaa55


Kesimpulan

INT 0x12 adalah saksi sejarah dari arsitektur komputer yang masih relevan hingga saat ini dalam tahap awal pembuatan sistem operasi. Meskipun sederhana dan memiliki batasan kapasitas, instruksi ini memberikan landasan bagi sistem untuk memahami keterbatasan fisiknya sebelum mulai bekerja lebih jauh.

Memahami INT 0x12 memberikan kita wawasan bahwa di balik sistem operasi yang canggih, selalu ada instruksi-instruksi kecil yang memastikan setiap byte memori terdata dengan baik.


Langkah Selanjutnya

Setelah sistem mengetahui berapa kapasitas memori dasar yang tersedia, langkah berikutnya yang biasanya dilakukan oleh seorang pengembang kernel adalah melakukan Memory Mapping yang lebih kompleks untuk mendeteksi seluruh RAM (dalam satuan Gigabyte).