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 fisik0x07C00. Anda tidak bisa mengubah CS secara langsung denganmov, hanya bisa melalui instruksi “lompatan” sepertijmp.
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 kode
mov 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
pushataupop, 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 kode
mov 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
| Skenario | Register Segmen (Blok) | Register Offset (Jarak) | Alamat Fisik yang Terbentuk |
| Menjalankan Kode | CS (0x07C0) | IP (0x0005) | 0x07C05 |
| Membaca Teks | DS (0x07C0) | SI (0x0010) | 0x07C10 |
| Menulis ke Layar | ES (0xB800) | DI (0x0000) | 0xB8000 |
| Menyimpan Stack | SS (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).
