Friday 24 October 2014

Pengalamatan Pada Instruction Set Design

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:
a.      Immediate
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