Plazma sayı 5, sayfa 46

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 46

Bu yazıda her programcının bilmesi gerektiğine inandığım bazı temel kavramlardan bahsedeceğim. Bu kavramlar programcılık üzerine çalışmak isteyen ve yeni başlayan kişilerin daha hızlı öğrenmelerini sağlarken, uzun süredir programcılık yapan fakat elektronik tabanı fazla olmayan kişilerin de bilgi dağarcıklarında kalan olası boşlukları doldurmakta yardımcı olabilir. Kısa kısa değineceğim konu başlıkları şunlar:

1. Register (yazmaç) nedir? 2. CPU nelerden oluşur? 3. Bellek nedir? 4. Bir CPU bellekteki programı nasıl çalıştırır? 5. Komutlar (instruction) neye benzer?

6. Makine kodu komutlardan Assembler'a geçiş

Register Nedir

Bilgisayar mimarisinden bahsederken önce registerları incelemek lazım. Dijital elektronikte en küçük bilgi saklayabilen birim flip flop adı verilen devredir. Bu devreye 1 veya 0 değerlerinden birini verirseniz, siz başka bir şey yapana kadar bu değeri saklamayı becerir. Böylece bir bitlik bir bilgiyi saklamış olursunuz. Eğer 2 flip flopunuz varsa bu ikisine 1'ler ve 0'lar saklayarak toplam 4 farklı değeri taşıyabilen bir hafıza devresi elde edebilirsiniz. İşte registerlar bu şekilde 4 veya 8 veya başka sayıda flip flopların yan yana getirilmesiyle oluşturulur. Biz genelde 8 bitlik (yani 8 flip flopluk) registerlarla uğraşacağız.

8 bitlik bir registerdaki her bit'e 1 veya 0 yazarak toplam 256 değişik değer yazabiliyoruz. Bu değerler genelde ikilik sayı düzeninde 8 basamaklı bir sayı olarak ifade edilir. 10010111 veya 01101111 gibi... Bunları genelde onluk düzendeki 0'dan 255'e kadar olan sayılar olarak yorumluyoruz. Bazen de -128'den 127'ye kadar ki sayılar olarak yorumlayabiliriz. Programdaki amacımıza göre bu bit dizilerine farklı anlamlar yükleyebiliriz. Ama her koşulda toplam 256 değişik değerden fazlasını yazamıyoruz, bunu unutmayalım. Böyle 256 değişik değer alabilen bir bilgi kutucuğuna bayt (byte) adı verilir. Yani 64 kilo byte'lık bir dosya yaklaşık 64000 tane 0 ile 255 arası sayının oluşturduğu bir bilgi grubudur.

Yeniden bir toparlayalım. Register nedir? Register içine 255'e kadar bir sayı yazılabilen ve bu değeri unutmayan kutucuklardır. Şimdi CPU yaparken registerların oynadığı rolü inceleyelim. (Not: registerların tek görevi bilgi saklamak değildir aslında ama şimdilik konuyu karıştırmayalım.)

CPUlişlemci)

Bu noktada bir CPU tasarımı yaptığımızı farz edelim. İşleri basit tutmak için ilk etapta 8-bitlik (bunun tam olarak ne demek olduğunu sonra anlayacaksınız) bir CPU tasarlayacağız. Bu basit CPU'muza 3 tane 8 bitlik register koyalım ve bunlara A, X, Y adlarını verelim. Bu CPU herhangi bir anda içinde 3 tane 8-bitlik değer (yani 3 bayt) saklayabiliyor. Gerçekte bir CPU'da bundan fazlası var ama şimdilik devam edelim.

Şekil 1.

Dikkat ederseniz şu ana kadar registerlarla yapabildiğimiz tek işlem içlerine bilgi saklamak. Fakat bir CPU yapmaya kalkıştığınızda CPU'nuzun bir takım bilgi işleme özellikleri de olmalıdır. Mesela toplama, çıkarma gibi aritmetik işlemler ya da VE / VEYA gibi mantıksal işlemler yapabilmemiz için registerlardan fazlasına ihtiyaç var. İşte bu noktada yardımımıza ALU koşuyor. ALU birtakım aritmetik işlemleri yapabilen kombinasyonel bir devredir.

Kombinasyonel devre nedir?

Dijital elektronikte bütün devreler iki gruptan birisine mensuptur. Kombinasyonel devreler ve durumlu (state) devreler. Kombinasyonel devreler, içlerinde herhangi bir durum bilgisi taşımayan devrelerdir. Bu devrelerin girişleri ve çıkışları arasında bir bağıntı olur. Giriş değerlerinin herhangi bir andaki değerini bilirseniz çıkış değerini de bilirsiniz. Mesela mantık kapıları bu sınıfa girer.

Örneğin 2 girişli bir VE kapısını ele alalım. Girişlerden her ikisi de 1 olursa çıkış 1'dir. En az bir giriş 0 ise çıkış 0'dır. Dolayısıyla biz iki girişe 1 veya 0 yazdığımızda sonucun ne olacağını biliriz. Girişlerin değerlerinin daha önce ne olduğunun önemi yoktur. Başka bir deyişle, devrenin bir durumu ya da hafızası yoktur.

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