Panduan Detail Register x86: Peran, Contoh, dan Penjelasan

Dalam arsitektur x86, register tidak bekerja sendirian. Keberhasilan CPU dalam menjalankan instruksi bergantung pada koordinasi antara Register Segmen sebagai penentu wilayah dan Register Pointer/Index sebagai penunjuk lokasi spesifik.


1. Register Segmen (Penentu Wilayah)

Register ini bertugas menentukan “Blok” atau “Lantai” memori mana yang sedang diakses. Semua nilai di sini akan otomatis dikali 16 (geser 4 bit ke kiri) oleh CPU.

CS (Code Segment)

  • Tugas: Menunjuk ke wilayah memori yang berisi instruksi program (kode).
  • Contoh: jmp 0x07C0:0x0000
  • Penjelasan: Perintah ini memaksa CS berisi 0x07C0. CPU kemudian akan mencari instruksi selanjutnya di alamat fisik 0x07C00. Anda tidak bisa mengubah CS secara langsung dengan mov, hanya bisa melalui instruksi “lompatan” seperti jmp.

DS (Data Segment)

  • Tugas: Menunjuk ke wilayah tempat variabel, konstanta, dan data teks disimpan.
  • Contoh:

Cuplikan kode

mov ax, 0x07C0 mov ds, ax ; Sekarang DS menunjuk ke wilayah Bootloader

mov al, [0x0010] ; Mengambil data di alamat DS:0x0010

  • Penjelasan: Tanpa mengatur DS, CPU mungkin akan mencari data di wilayah yang salah (seperti wilayah BIOS), sehingga program Anda akan mengambil data sampah.

SS (Stack Segment)

  • Tugas: Menunjuk ke wilayah memori “Tumpukan” (Stack), tempat penyimpanan data sementara dan alamat balik fungsi.
  • Contoh:Cuplikan kodemov ax, 0x0000 mov ss, ax ; Stack diletakkan di wilayah paling bawah (Low RAM) mov sp, 0x7C00 ; Ujung stack berada tepat di bawah posisi bootloader
  • Penjelasan: SS memastikan bahwa saat Anda melakukan push atau pop, data disimpan di area RAM yang aman dan tidak menabrak kode program Anda.

ES (Extra Segment)

  • Tugas: Register serbaguna tambahan, sangat sering digunakan untuk mengakses memori di luar segmen data utama, terutama Video RAM.
  • Contoh:Cuplikan kodemov ax, 0xB800 mov es, ax ; ES menunjuk ke wilayah monitor (VGA Text Buffer)
  • Penjelasan: Dengan ES yang menunjuk ke 0xB800, Anda bisa menulis ke layar tanpa harus mengubah DS (Data Segment) yang sedang menunjuk ke variabel program Anda.

2. Register Pointer & Index (Penunjuk Jarak/Offset)

Register ini memberikan jarak detail dari titik nol yang ditentukan oleh Register Segmen.

IP (Instruction Pointer)

  • Tugas: Menunjuk ke offset instruksi yang akan dijalankan berikutnya.
  • Penjelasan: Jika CS adalah jalan rayanya, IP adalah nomor kilometernya. CPU memperbarui IP secara otomatis setiap kali satu instruksi selesai dijalankan.

SI (Source Index)

  • Tugas: Penunjuk alamat sumber data, biasanya saat membaca string (teks).
  • Contoh:

Cuplikan kode

mov si, pesan_teks ; SI menunjuk ke lokasi awal kata "Hello"

lodsb ; Ambil satu huruf dari alamat yang ditunjuk DS:SI

  • Penjelasan: SI bekerja sama dengan DS untuk menyisir data dari memori satu per satu.

DI (Destination Index)

  • Tugas: Penunjuk alamat tujuan data, biasanya saat menulis ke memori lain.
  • Contoh:
  • Cuplikan kode
  • mov di, 0x0000 ; DI menunjuk ke pojok kiri atas layar stosb ; Kirim karakter di AL ke alamat ES:DI (layar)
  • Penjelasan: DI sering dipasangkan dengan ES untuk menentukan di mana sebuah karakter harus muncul di monitor.

SP (Stack Pointer) & BP (Base Pointer)

  • Tugas:
    • SP: Menunjuk ke “Puncak” tumpukan saat ini.
    • BP: Menunjuk ke “Dasar” tumpukan dalam sebuah fungsi (Frame Pointer).
  • Penjelasan: Saat Anda melakukan push ax, nilai SP akan berkurang untuk memberi ruang. BP digunakan agar Anda tetap bisa mengakses data di dalam tumpukan tanpa kehilangan jejak meskipun nilai SP terus berubah-ubah.

BX (Base Register)

  • Tugas: Register umum yang punya kemampuan spesial sebagai penunjuk alamat memori (Indirect Addressing).
  • Contoh: mov al, [bx]
  • Penjelasan: Berbeda dengan AX, CX, atau DX, register BX bisa digunakan di dalam kurung siku [] untuk bertindak sebagai penunjuk lokasi memori, mirip dengan SI atau DI.

Ringkasan Kolaborasi Register

SkenarioRegister Segmen (Blok)Register Offset (Jarak)Alamat Fisik yang Terbentuk
Menjalankan KodeCS (0x07C0)IP (0x0005)0x07C05
Membaca TeksDS (0x07C0)SI (0x0010)0x07C10
Menulis ke LayarES (0xB800)DI (0x0000)0xB8000
Menyimpan StackSS (0x0000)SP (0x7C00)0x07C00

Kunci utama dari kehebatan arsitektur 16-bit adalah Segmentasi. Dengan membagi tugas menjadi “Pemberi Bobot” (Segment) dan “Pemberi Detail” (Offset), CPU bisa mengelola memori yang luas meskipun setiap registernya hanya memiliki 16 kotak (16-bit).