Bagian alamat
dalam sebuah format instruksi pada umumnya relatif berukuran kecil.Dilain
pihak, kita menginginkan agar bagian ini cukup besar untuk mereferensi lokasi
pada memoriutama atau memori virtual (pada beberapa sistem).Untuk mencapai
tujuan ini, beberapa jenis teknik pengalamatan telah digunakan. Teknik-teknik
tersebut berdasar pada kecenderungan untuk memilih opsi pengelamatan dengan
rentang alamat yang lebar/fleksibel dengan proses perhitungan alamat yang
kompleks atau memilih rentang alamat yang terbatas namun dengan kalkulasi
alamat yang lebih mudah. Pada sesi ini kita akanmembahas jenis pengalamatan
yang umum digunakan:
b. Direct
c. Indirect
d. Register
e. Register Indirect
f. Displacement
g. Stack
Gambar 1. Jenis Pengalamatan
A = Isi dari alamat dalam bagian alamat sebuah instruksi
R = Isi dari alamat dalam bagian alamat sebuah instruksi
yang menunjuk pada register
EA = Alamat efektif/sebenarnya yang berisi nilai operan
(X) = Isi dari sebuah lokasi pada memori atau register
Sebelum
membahas lebih lanjut, ada dua hal yang perlu digaris bawahi.Pertama, secara
virtual semua arsitektur komputer memiliki lebih dari satu jenis
pengalamatan.Lalu bagaimana processor mengetahui jenis mana yang digunakan? Ada
beberapa metode yang digunakan, yang pertama, biasanya setiap opcode
didefinisikan dengan jenis pengalamatan tertentu, atau yang kedua, jenis
pengalamatan dapat dikenali melalui sebuat bit khusus yang menyatakan jenis
alamat dari operan.Hal kedua yang harus diperhatikan adalah berkaitan dengan Effective
Address (EA)/Alamat efektif.Dalam sistem tanpa memori virtual, Alamat efektif
merupakan alamat fisik sebuah memoriutama atau register.Namun pada sistem
dengan memori virtual, Alamat efektif bisa jadi merupakan alamat register atau
alamat virtual.Nilai alamat fisik yang sebenarnya didapatkan melalui Memori
Management Unit (MMU) dan bersifat invisible terhadap programmer.
a.
Immediate Addressing
Immediate
Addressing merupakan jenis pengalamatan yang paling sederhana. Pada kenyataanya
jenis ini sebenarnya tidak menyimpan alamat sama sekali, nilai sebenarnya
merupakan nilai operand itu sendiri.
Operand
= A
Jenis ini
biasanya digunakan untuk mendefinisikan konstan atau nilai awal dari sebuah
variabel.Jenis pengalamatan ini tidak memiliki referensi ke memori, sehingga
instruksi dengan operand bertipe immediate addressing dapat seketika itu juga
diproses. Namun karena keterbatasan bagian alamat pada format instruksi, nilai
yang mampu disimpan juga terbatas pada jumlah bit dari bagian tersebut.
b.
Direct Adressing
Direct
addressing merupakan bentuk lain pengalamatan yang sederhana. Alamat efektif
dari operand merupakan nilai operand itu sendiri.
EA = A
Teknik ini
umum digunakan pada komputer generasi terdahulu.Direct Addressing hanya
memiliki satu referensi memori, sehingga tidak memerlukan kalkukasi
khusus.Sebagai batasanya, teknik ini memiliki ruang pengalamatan yang terbatas
karena biasanya panjang bagian alamat kurang dari ukuran word.
c.
Indirect Addressing
Untuk
mengatasi kekurangan direct addressing, indirect addressing memanfaatkan bagian
alamat hanya untuk menyimpan referensi yang mengacu kepada alamat lainya yang
berisi sebuah alamat berukuran word, dengan demikian maka jenis ini dapat
memiliki rentang alamat yang lebih lebar.
EA = (A)
Tanda
kurung dibaca sebagai nilai dari,contoh
(A) dibaca nilai dari A.Keuntungan dengan pendekatan ini adalah, dengan panjang
word = N, maka ruang alamat yang tersedia menjadi 2N. Kerugianya,
untuk setiap eksekusi instruksi, dibutuhkan 2 kali referensi memori untuk
mengambil nilai operan, pertama untuk mendapatkan alamat sebenarnya, kedua
untuk mendapatkan nilai sebenarnya.
Meskipun
secara teoritis jumlah ruang alamat yang dimiliki adalah 2N, namun
jumlah alamat efektif yang bisa di referensikan dalam satu waktu terbatas pada
2K, dimana K merupakan jumlah bit bagian alamat. Bentuk indirect
addressing dapat ditingkatkan (meskipun jarang digunakan) ke bentuk multilevel
atau bersarang.
EA = (...(A)...)
Pada kasus
ini, sebuah bit dalam word alamat digunakan sebagai flag, dimana ketika flag
ini bernilai 0 berarti merupakan EA dan ketika bernilai 1 berarti diperlukan
referensi tambahan ke memori untuk mendapatkan EA.
d.
Register Addressing
Register
addressing memiliki pola yang mirip dengan direct addressing, perbedaanya bagian
alamat mengacu pada register, bukan alamat memori.
EA = R
Sebagai
contoh, jika nilai yang miliki oleh bagian alamat adalah 5, maka register yang
dimaksud adalah R5, dan nilai operan adalah nilai yang berada pada R5.Pada
umumnya, bagian alamat yang digunakan untuk mengacu pada register berukuran 3-5
bit, artinya terdapat 8-32 buah register umum yang bisa direferensikan.
Keuntungan
menggunakan register addressing adalah, pertama, hanya membutuhkan ukuran bagian
alamat yang kecil dan kedua, tidak memerlukan referensi ke memori yang
membutuhkan lebih banyak waktu.Kerugianya, jumlah register yang bisa digunakan
sangat terbatas.
Karena
keterbatasan jumlah register, penggunaan register hanya akan menguntungkan jika
digunakan dengan benar. Jika setiap operan dari memori disimpan kedalam
register, diolah sekali, kemudian dikembalikan ke memori, maka hal ini sama
artinya dengan menambahkan langkah tak berguna. Sebaliknya, jika operan yang
disimpan digunakan secara berulang-ulang sebagai penampung sementara untuk
beberapa operasi sebelum akhirnya dikembalikan ke memori, maka kita dapat
menghemat proses referensi ke memori. Keputusan untuk menggunakan register atau
memori utama untuk menyimpan sebuah operan sendiri diserahkan pada programmer
atau kompiler.
e.
Register Indirect Addressing
Seperti halnya
register addressing yang mirip dengan direct addressing, register indirect addressing
juga mirip dengan indirect addressing.
EA = (R)
Isi yang
dikandung oleh R merupakan alamat memori. Dengan register indirect addressing,
referensi ke memori hanya diperlukan untuk memuat nilai operan sebenarnya.
f.
Displacement Addressing
Displacement
addressing merupakan jenis pengalamatan memori yang sangat luarbiasa yang
menggabungkan kemampuan direct addressing dan register indirect addressing.
EA = A+(R)
Jenis
pengalamatan ini memerlukan 2 bagian alamat, minimal satu eksplisit. Nilai yang
dimiliki oleh sebuah bagian alamat ( nilai = A) digunakan secara langsung,
sementara nilai pada bagian alamat lainya (implisit tergantung opcode) mengacu
pada sebuah register yang nilainya akan ditambahkan ke A untuk mendapatkan Alamat
efektif.
Contoh penerapan displacement
addressing adalah :
·
Relative adddressing
·
Base-register addressing
·
Indexing
Relative Addressing
Pada relative
addressing (disebut juda PC-relative addressing), refensi register implisit
yang digunakan adalah program counter (PC). Nilai EA didapat dengan menambahkan
isi bagian alamat dengan alamat instruksi selanjutnya (dalam PC).Pada umumnya
isi bagian alamat diberlakukan sebagai bilangan komplemen dua pada operasi ini.
Jenis ini
mengandalkan konsep lokalitas referensi, dimana jika hampir semua referensi
memori berdekatan dengan alamat instruksi yang sedang di eksekusi, maka
penggunaan jenis ini akan menghemat bit alamat yang diperlukan dalam instruksi.
Base-Register Addressing
Pada jenis
ini, register berisi alamat memori, sedangkan bagian alamat berisi besar
perpindahan (biasanya integer tak bertanda).Pada beberapa penerapan, sebuah
segment tunggal base register digunakan untuk menampung alamat memori dan
bersifat implisit. Pada penerapan lainya, programmer diberi kebebasan untuk
memilih register mana yang akan digunakan untuk menampung alamat memori.
Indexing
Untuk
indexing, bagian alamat berisi referensi ke alamat memori, sedangkan register
digunakan sebagai besar perpindahan positif dari alamat tersebut (kebalikan
dari base register addressing). Karena bagian alamat digunakan sebagai alamat
memori pada indexing, secara umum jenis ini memiliki jumlah bit yang lebih
banyak dibadingkan pada instruksi base register.
Kegunaan
penting dari indexing adalah untuk menyediakan mekanisme efesien pada saat
mengerjakan operasi iteratif.Sebagai contoh, sejumlah bilangan disimpan
berurutan mulai dari lokasi A, kita ingin menambahkan angka 1 kesetiap bilangan
dalam list. Dengan indexing, hal ini dapat dilakukan dengan cara: nilai A ditampung
dalam bagian alamat, sebuah register (disebut index register) mula-mula
bernilai 0; setelah setiap operasi, naikkan nilai index register sebanyak 1;
Karena index
register umumnya digunakan untuk operasi iteratif sepertin contoh diatas,
umumnya dibutuhkan proses menaikkan atau menurunkan nilai index register pada
setiap akhir referensi padanya. Karena operasi ini bersifat umum, beberapa
sistem akan secara otomatis melakukan tugas tersebut sehingga disebut
autoindexing.
EA = A + (R)
(R) <- (R) + 1
g.
Stack Addressing
Stack berisi
sejumlah lokasi yang tersusun secara linear, secara umum bersifat
last-in-first-out. Penggunaan jenis pengalamatan ini mengacu pada penggunaan
isi teratas stack yang ditunjuk oleh stack pointer. Alternatif lainya, dua
elemen teratas berada pada register sehingga operasi pada stack bisa jadi tidak
memerlukan alamat eksplisit.
No comments:
Post a Comment