close
İçeriğe atla

Program sayacı

Vikipedi, özgür ansiklopedi
1952'de tanıtılan IBM 701'in ön paneli; ortadaki ışıklar çeşitli yazmaçların içeriğini gösterir, program sayacı sol alttadır.

Program sayacı (İngilizce: program counter, PC), bir işlemcinin bir sonraki getireceği buyruğun bellek adresini tutan özel bir yazmaçtır.[1] Buyruk işaretçisi (İngilizce: instruction pointer) olarak da anılır. Program sayacı, buyruk döngüsünün getirme aşamasında okunacak buyruğun adresini sağlayarak programın hangi noktada yürütülmekte olduğunu belirler.

Çalışma ilkesi

[değiştir | kaynağı değiştir]

Bir buyruk bellekten getirildikten sonra program sayacı, kendiliğinden bir sonraki buyruğun adresini gösterecek biçimde artırılır. Artış miktarı mimariye bağlıdır: sabit uzunlukta buyruk kullanan indirgenmiş buyruk kümeli mimarilerde her adımda sabit bir değer (çoğunlukla 4 bayt) eklenir; değişken uzunlukta buyruk kullanan mimarilerde ise artış, getirilen buyruğun uzunluğu kadardır.[1] Böylece olağan akışta buyruklar bellekte sıralı olarak yürütülür.

Dallanma ve atlamalar

[değiştir | kaynağı değiştir]

Programın akışını değiştiren buyruklar, program sayacına sıradaki adres yerine başka bir hedef adres yükler:

  • Dallanma ve atlama buyrukları, yürütmenin bellekte başka bir konuma geçmesini sağlar; koşullu dallanmalarda bu, yalnızca belirli bir koşul gerçekleştiğinde olur.
  • Altyordam çağrılarında, çağrının bittiği yere dönülebilmesi için program sayacının o anki değeri (dönüş adresi) bir yazmaça ya da yığına kaydedilir.
  • Kesmelerde ve özel durumlarda işlemci, dönüş adresini saklayıp program sayacını ilgili işleyici yordamın başlangıç adresine yükler.[2]

Genişlik ve başlangıç değeri

[değiştir | kaynağı değiştir]

Program sayacının bit genişliği, işlemcinin doğrudan adresleyebileceği bellek alanının büyüklüğünü belirler. Birçok mimaride buyruklar belirli bir sınıra hizalı olduğundan program sayacının en düşük bitleri her zaman sıfır kalır. İşlemci açıldığında veya sıfırlandığında program sayacı, önceden tanımlı bir başlangıç adresine (sıfırlama vektörü) yüklenir ve yürütme bu adresten başlar.[3]

Mimarilere göre adlandırma

[değiştir | kaynağı değiştir]

Program sayacının adı ve gerçeklenişi mimariden mimariye değişir. Intel x86 ailesinde bu yazmaç buyruk işaretçisi (İngilizce: instruction pointer) olarak adlandırılır ve genişliğine göre ayrı adlar alır: 16 bitlik kipte IP, 32 bitlik kipte EIP, 64 bitlik kipte RIP.[4] RISC-V, ARM ve MIPS gibi mimariler ise genellikle program counter (pc) adını kullanır. ARM'ın 32 bitlik sürümlerinde program sayacı, genel amaçlı yazmaç kümesinin bir üyesi (R15) olarak doğrudan erişilebilmesiyle ayrılır; çoğu mimaride ise program sayacı, yazılımın ancak dallanma ve atlama türü buyruklarla dolaylı olarak değiştirebildiği ayrı bir yazmaçtır.[1]

Ayrıca bakınız

[değiştir | kaynağı değiştir]
  1. 1 2 3 Patterson, David A.; Hennessy, John L. (2020). Computer Organization and Design RISC-V Edition: The Hardware/Software Interface (2 bas.). Morgan Kaufmann. ISBN 978-0128203316.
  2. Tanenbaum, Andrew S.; Austin, Todd (2012). Structured Computer Organization (6 bas.). Pearson. ISBN 978-0132916523.
  3. Hennessy, John L.; Patterson, David A. (2019). Computer Architecture: A Quantitative Approach (6 bas.). Morgan Kaufmann. ISBN 978-0128119051.
  4. Intel Corporation (2023). Intel 64 and IA-32 Architectures Software Developer's Manual, Cilt 1. Intel.