Adresleme Modları
Adresleme modları, bir komutun işlenenlerinin nerede bulunduğunu — bir yazmaçta, doğrudan (immediate) gömülü olarak veya yazmaçlar ve ofsetlerden hesaplanan bir adreste bellekte — belirten kurallardır.
Tanım
Bir adresleme modu, bir komut tarafından bir işlenenin konumunu belirlemek için belirtilen bir yöntem olup, doğrudan yazmaçlarda veya komutun kendisinde tutulan değerlerden, taban yazmaçları, indeks yazmaçları ve kaydırmalardan (displacement) hesaplanan adreslere kadar çeşitlilik göstermektedir.
Kapsam
Bu konu, işlenenlerin adlandırılma ve konumlandırılma şekillerini kapsamaktadır: doğrudan (immediate), yazmaç (register), yazmaç dolaylı (register-indirect), taban-artı-kaydırma (base-plus-displacement), indeksli (indexed), PC-göreli (PC-relative) ve daha karmaşık hesaplanmış modlar. Adresleme modlarının kod boyutunu, komut sayısını ve donanım karmaşıklığını nasıl etkilediğini ele almaktadır. Komutların bitler halinde nasıl kodlandığı (komut formatları ve kodlama) ve sistemin sanal-fiziksel çevirisi (sanal bellek ve sayfalama) bu kapsamın dışındadır.
Temel sorular
- Her adresleme modu, bir işlenenin etkin adresini veya değerini nasıl hesaplamaktadır?
- Gerçek programlarda en sık hangi adresleme modları kullanılmaktadır ve neden?
- Daha zengin adresleme modları, donanım ve kod çözme karmaşıklığı pahasına komut sayısını nasıl azaltmaktadır?
- Yükleme-depolama (load-store) mimarileri neden bellek erişimini birkaç basit modla sınırlamaktadır?
Anahtar kavramlar
- doğrudan adresleme (immediate addressing)
- yazmaç adresleme (register addressing)
- yazmaç dolaylı adresleme (register-indirect addressing)
- taban-artı-kaydırma (base-plus-displacement)
- indeksli adresleme (indexed addressing)
- PC-göreli adresleme (PC-relative addressing)
- etkin adres hesaplama
- yükleme-depolama kısıtlaması
Mekanizmalar
Her adresleme modu, işlemcinin bir işleneni nasıl türettiğini tanımlamaktadır. Doğrudan (immediate) işlenenler komutun içine kodlanmaktadır; yazmaç işlenenleri yazmaç dosyasından okunmaktadır; bellek işlenenlerinin etkin adresi, bir taban yazmacı, isteğe bağlı ölçeklendirilmiş bir indeks ve bir kaydırma (displacement) eklenerek hesaplanmaktadır. PC-göreli adresleme, program sayacına göre adresler oluşturmakta olup, bu da konumdan bağımsız kodu ve dallanma hedeflerini desteklemektedir.
Klinik önem
Adresleme modları, derleyicilerin kod üretme şeklini biçimlendirmektedir: taban-artı-kaydırma (base-plus-displacement) doğal olarak yapı alanlarına ve yığın değişkenlerine eşlenmekte, indeksli modlar dizi erişimine ve PC-göreli adresleme konumdan bağımsız çalıştırılabilir dosyalara ve paylaşımlı kütüphanelere karşılık gelmektedir. RISC yükleme-depolama (load-store) tasarımları, boru hattını (pipelining) kolaylaştırmak için bellek adreslemeyi kasıtlı olarak basit tutarken, CISC makineleri kod yoğunluğu için daha zengin modlar sunmaktadır.
Tarihçe
Erken dönem ve CISC mimarileri, bellek dolaylı (memory-indirect) ve otomatik artırma (auto-increment) biçimleri de dahil olmak üzere birçok ayrıntılı adresleme modu biriktirmiştir. Komut kullanımına ilişkin ampirik çalışmalar, basit modlardan oluşan küçük bir kümenin çoğu erişimi karşıladığını göstermiş, bu da RISC'in yalnızca birkaç modu destekleme ve bellek erişimini yükleme (load) ve depolama (store) komutlarıyla sınırlama kararına yol açmıştır.
Öne çıkan isimler
- John L. Hennessy
- David A. Patterson
İlgili konular
Temel eserler
- hennessy2019
- patterson2020
Sıkça sorulan sorular
- RISC mimarileri neden bu kadar az adresleme modunu desteklemektedir?
- Çalışmalar, programların büyük çoğunlukla birkaç basit mod kullandığını göstermiştir. Bellek erişimini yazmaç dolaylı (register-indirect) ve taban-artı-kaydırma (base-plus-displacement) ile sınırlamak, boru hattını basit ve etkin adres hesaplamasını hızlı tutmakta, derleyiciler ise daha zengin erişim kalıplarını bu temel öğelerden sentezlemektedir.
- PC-göreli adresleme ne için kullanılmaktadır?
- PC-göreli adresleme, program sayacından bir ofset olarak bir adres hesaplamaktadır. Dallanma ve atlama hedefleri ile yakındaki verilere erişim için kullanılmakta, bellekte nerede yüklendiğinden bağımsız olarak doğru çalışan konumdan bağımsız kodu mümkün kılmaktadır.