Minggu 5 Arsitektur

Bab 5: Mode Pengalamatan (Addressing Modes)

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).

5.1 Pengertian Effective Address (EA)

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.

Rumus Alamat Fisik (Kembali Lagi)

Alamat Fisik = (Segment × 16) + Effective Address (EA)

Mode pengalamatan pada bab ini hanya menentukan bagaimana EA dihitung. Segmen default (biasanya DS) tetap digunakan kecuali di-override.

5.2 Immediate Addressing

Data sumber langsung tertanam di dalam instruksi (di dalam Queue).

Sebelum Eksekusi
AX0000H
Setelah Eksekusi
AX1234H
MOV AX, 1234H
Data diambil langsung dari byte instruksi di Instruction Queue

5.3 Register Addressing

Data berpindah antar register di dalam CPU (Tidak ada komunikasi dengan RAM).

Sebelum Eksekusi
AX0000H
BX (Sumber)5555H
Setelah Eksekusi
AX (Tujuan)5555H
BX5555H
MOV AX, BX

5.4 Direct Addressing

Offset alamat memori ditulis langsung di instruksi. (Asumsi DS = 1000H)

Sebelum Eksekusi
AX0000H
DS1000H
Mem[11000H]AA BB (Little Endian)
Setelah Eksekusi
AXAABBH
DS1000H
Mem[11000H]AA BB
MOV AX, [1000H]
EA = 1000H → Fisik = (DS×16) + 1000H = 11000H

5.5 Register Indirect Addressing

Alamat offset berada di dalam register (BX/BP/SI/DI). (Asumsi DS = 2000H)

Sebelum Eksekusi
AX0000H
BX (Pointer)1000H
Mem[21000H]CC DD
Setelah Eksekusi
AXCCDDH
BX1000H (Tetap)
Mem[21000H]CC DD
MOV AX, [BX]
EA = BX (1000H) → Fisik = (DS×16) + 1000H = 21000H
RegisterSegmen DefaultUse Case Umum
[BX]DSPointer ke array/data umum
[SI]DSSource Index (instruksi string)
[DI]ESDestination Index (instruksi string)
[BP]SSMenjelajahi parameter di Stack

5.6 Based Addressing

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

ModeSintaks ContohRumus EAKegunaan Utama
ImmediateMOV AX, 1234HTidak adaKonstanta
RegisterADD AX, BXTidak adaEksekusi tercepat
DirectMOV AX, [2000H]2000HVariabel tunggal
Reg IndirectMOV AX, [BX]BXArray / Pointer
BasedMOV AL, [BX+5]BX + 5Struct / Record
IndexedMOV AL, [SI+10]SI + 10Lookup Table
Based IndexedMOV AX, [BX+SI+2]BX + SI + 2Matriks / 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]?

Lihat jawaban

Pertama, hitung Effective Address (Offset): BX + SI + Displacement = 1000H + 0500H + 0010H = 1510H. Kedua, hitung Alamat Fisik: (DS × 16) + EA = (2000H × 10H) + 1510H = 20000H + 1510H = 21510H.

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?

2. Apa yang dimaksud dengan 'Displacement' pada Based atau Indexed Addressing?

3. Instruksi MOV AX, [BP + 10H] secara default menggunakan register segmen mana untuk menghitung alamat fisik?

4. Manakah yang BUKAN merupakan register yang valid untuk Register Indirect Addressing?

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...