Memahami 7 cara prosesor 8086 menentukan lokasi data (operand) untuk dieksekusi.
Capaian Pembelajaran Bab Ini
Setelah mempelajari bab ini, mahasiswa mampu menjelaskan dan menulis sintaks assembly untuk ketujuh mode pengalamatan data 8086, serta memilih mode yang paling efisien sesuai kebutuhan akses data (konstanta, variabel tunggal, array, atau struct).
Sebelum mempelajari mode-mode pengalamatan, kita harus memahami istilah Effective Address (EA). EA adalah alamat offset 16-bit yang dihasilkan oleh EU dan dikirimkan ke BIU untuk dihitung menjadi alamat fisik 20-bit.
Menggunakan register (BX/BP) ditambah angka konstan (Displacement). Sangat cocok untuk akses Struct/Record. (Asumsi DS = 3000H)
Sebelum Eksekusi
AL00H
BX (Base)1000H
EA = 1000H + 2 = 1002H
Mem[31002H]FFH
Setelah Eksekusi
ALFFH
BX1000H (Tetap)
Mem[31002H]FFH
MOV AL, [BX + 2]
Displacement = 2. Fisik = (DS×16) + EA = 31002H
5.7 Based Indexed Addressing
Menggabungkan Base + Index + Displacement. Paling sering dipakai untuk Array 2 Dimensi (Matriks). (Asumsi DS = 1000H)
Sebelum Eksekusi
AX0000H
BX (Base)0010H
SI (Index)0002H
EA = 0010H + 0002H + 1 = 0013H
Mem[10013H]44 55
Setelah Eksekusi
AX4455H
BX0010H
SI0002H
Mem[10013H]44 55
MOV AX, [BX + SI + 1]
Fisik = (DS×16) + EA = 10013H
5.8 Tabel Ringkasan Mode Pengalamatan
Mode
Sintaks Contoh
Rumus EA
Kegunaan Utama
Immediate
MOV AX, 1234H
Tidak ada
Konstanta
Register
ADD AX, BX
Tidak ada
Eksekusi tercepat
Direct
MOV AX, [2000H]
2000H
Variabel tunggal
Reg Indirect
MOV AX, [BX]
BX
Array / Pointer
Based
MOV AL, [BX+5]
BX + 5
Struct / Record
Indexed
MOV AL, [SI+10]
SI + 10
Lookup Table
Based Indexed
MOV AX, [BX+SI+2]
BX + SI + 2
Matriks / Array 2D
5.9 Soal Latihan & Kuis
Soal 1. Apa perbedaan utama antara Register Indirect Addressing ([BX]) dan Based Addressing ([BX + 04H])?
▶ Lihat jawaban
Register Indirect mengakses alamat memori persis di dalam register (misal BX=1000H, berarti mengakses 1000H). Based Addressing menambahkan suatu nilai konstan (displacement) ke register terlebih dahulu sebelum mengakses memori (misal BX=1000H + 04H, berarti mengakses 1004H). Based sangat berguna untuk mengakses field spesifik di dalam sebuah record/struktur data.
Soal 2. Mengapa register CX dan DX tidak bisa digunakan untuk Register Indirect Addressing (misal: MOV AX, [CX])?
▶ Lihat jawaban
Karena keterbatasan desain hardware pada Intel 8086. Prosesor hanya memiliki rangkaian decoder alamat (Address Generation Unit) yang terhubung secara fisik ke pin BX, BP, SI, dan DI. Menggunakan [CX] atau [DX] akan menyebabkan error assembler karena CPU secara fisik tidak bisa membaca alamat dari register tersebut untuk keperluan memori.
Soal 3. Jika DS = 2000H, BX = 1000H, SI = 0500H, berapa alamat fisik yang diakses oleh instruksi MOV AX, [BX + SI + 0010H]?
Soal 4. Kapan kita menggunakan Based Indexed Addressing dibandingkan Based Addressing biasa?
▶ Lihat jawaban
Based Indexed (misal [BX+SI]) digunakan saat kita ingin mengakses data 2 dimensi, seperti matriks atau tabel di dalam array (contoh: tabel nilai mahasiswa per kelas). Berdasarkan Addressing biasa ([BX+disp]) hanya cocok untuk data 1 dimensi atau mengakses field tunggal di dalam sebuah struct.
Kuis Bab 5
1. Mode pengalamatan manakah yang paling cepat eksekusinya dan tidak melibatkan akses memori eksternal?
Register Addressing (contoh: MOV AX, BX) hanya memindahkan data antar register di dalam CPU. Tidak ada komunikasi dengan RAM, sehingga hanya membutuhkan 1-2 siklus clock.
2. Apa yang dimaksud dengan 'Displacement' pada Based atau Indexed Addressing?
Displacement adalah angka tetap (konstanta) yang ditambahkan ke nilai register (Base/Index) untuk menghitung Effective Address sebelum dikirim ke BIU.
3. Instruksi MOV AX, [BP + 10H] secara default menggunakan register segmen mana untuk menghitung alamat fisik?
Secara default, penggunaan register BP selalu mengasumsikan segmen Stack (SS). Ini memudahkan akses parameter fungsi yang diletakkan di stack tanpa perlu menulis instruksi override segmen (seperti SS:[BP+10H]).
4. Manakah yang BUKAN merupakan register yang valid untuk Register Indirect Addressing?
Hanya BX, BP, SI, dan DI yang diizinkan oleh arsitektur 8086 untuk menunjuk alamat memori secara tidak langsung. DX digunakan untuk port I/O (IN/OUT), bukan alamat memori.
5. Jika ingin mengakses elemen ke-5 dari sebuah array of words (dimulai dari indeks 0) yang alamat awalnya ditunjuk oleh SI, instruksi yang tepat adalah...
Tipe data 'word' berukuran 2 byte. Elemen ke-5 memiliki offset 4 elemen × 2 byte = 10 byte dari awal. Oleh karena itu, displacement yang ditambahkan ke SI adalah 10 (atau 0AH).