Plazma sayı 5, sayfa 48

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 48

5. A registerindeki değer Data Tamponuna kopyalanır.

6. Adres Tamponuna 100 yazılır. Yazma modu seçilir. Değer belleğe yazılmış olur.

Komutlar (Instructions)

Şu ana kadar bellekten bahsederken hep data saklamak amacı ile bahsettik. Ama bellekte saklanabilen bir diğer veri de komutlardır. Komutlar da aslında sayısal değerlerdir diye düşünebilirsiniz. Sadece onları komut gibi yorumladığımızı düşünelim. Mesela 20 sayısını topla komutu diye yorumlayabiliriz. Komutlar çoğu zaman bir komut ve arkasından gelen komutla ilgili argümanlar olarak gelirler. Mesela "(A registerini yükle)(30)" gibi bir komut düşünülebilir. Eğer bu komutun numarası diyelim ki 25 ise biz belleğe arka arkaya 25 ve 30 sayılarını saklarsak bu komutu belleğe saklamış oluruz.

Program sayacı (Program Counter)

Bellekte ardarda duran komutların işletilmesi işini çözmek üzere CPU'muza bir register daha ekliyoruz. Bu register içinde saklanan sayı bellekten okunacak olan komutun adresini gösteriyor. Bellekten her komut okuyuşumuzda, komutu işledikten sonra program sayacı bellekte bir sonraki komutun olduğu yeri gösteriyor.

Kontrol Devresi

Şimdi kafanız karışmış olabilir. Program sayacının değerini kim artırıyor? Ya da bellek erişimlerinde Adres ve Data Tamponlarına kim değerleri koyuyor? Ya da ALU'ya hangi işlemin yapılacağını kim söylüyor? İşte bütün bu işleri CPU içinde yöneten bir bölüm var ki buna Kontrol Devresi deniyor (Control Logic). Bu devre bellekte program sayacının gösterdiği yerdeki komuta göre registerların arasındaki dijital anahtarları açıp kapatarak CPU içinde datanın nereden nereye gideceğini yönlendirmekle kalmaz, ALU'nun yönetimini, belleğe giden okuma/yazma pininin durumunu vs. kontrol eder. Bir komutu tamamladıktan sonra program sayacını değiştirip bir sonraki komuta bakmasını sağlar. Bir CPU'nun mimarisindeki en önemli ögelerden biridir.

Jump komutu

Bu komut ile program sayacı bellekteki bambaşka bir noktaya bakacak şekilde set edilerek program akışının oradan devam etmesi sağlanabilir.

Durum Registeri

Şimdi CPU'muza bir register daha ekliyoruz. ALU ile yaptığımız işlemlerin sonucunda ortaya çıkan durumlarla ilgili bazı faydalı bilgileri kontrol devresi buraya da yansıtır. Bu iş şöyle yapılır. Bu registerdaki bitlere özel anlamlar yüklenir. Örneğin bir tanesine Zero-flag denir. Bu bit ALU'daki işlemin sonucu sıfır çıkarsa 1 olur. Bir diğer bite Carry-flag denir. Bu da ALU'daki toplama işleminde sonuç 255'i geçerse 1 olur. Bir diğer bite Negative-flag'dir. Bu da ALU'daki işlemin sonucu negatif çıkarsa (mesela 2 - 30) 1 olur.

Bu bayraklar bizim için çok önemlidir. Çünkü bu bayrakların durumuna bakarak hareket eden komutlar vardır. Bunlara Koşullu Dallanma (Conditional Branching) komutları denir. Bu komutlar sayesinde programlara karar mekanizmaları eklenebilir. Örneğin şöyle kodlar yazılabilir:

1. bellekte N adresindeki değeri A'ya yükle

2. Adaki değer ile 30'u karşılaştır (ALU ile A'dan 30'u çıkar)

3. Sonuç 0 ise 6. basamağa atla (işte burası koşullu dallanma komutu. Eğer koşul sağlanmazsa program bir sonraki komuttan devam edecek)

4. N adresindeki değer 30 olmadığında neler yapacaksan onu yap

5. Programdan çık

6. N adresindeki değer 30 olduğu zaman neler yapacaksan onu yap.

7. Programdan çık

Şekil 3.

Komutlara özet bakış

Şu ana kadar incelediğimiz makine dili komutları dikkat ederseniz sadece aşağıdakilerden birini yapabilir. 1. Bellekten bir registera değer kopyalama 2. Bir registerdan belleğe değer kopyalama 3. Jump ile bellekte herhangi bir yerdeki bir komuta atlama

4. İki register arasında değer kopyalama

Klavyeyle gezinmek için ← ve → tuşları.