
Bilgisayar donanım olarak karşımızda duruyor diyelim. Bu donanıma ne yapacagını anlatmazsanız öylece duraya devam eder. Çünkü birşeyler yapması için gerekli olan emirler yoktur. Ne yapacagını bilemez. Bu şu örneğe benzer; bir askeri birliğiniz var diyelim, ne yapacaklarını söylemediğiniz sürece öylece kışlada beklemeye devam ederler, taki siz emirler dizisi verirsiniz askerler bir düzen içinde verdiğiniz emirleri yaparlar. bu emirlere göre ne yapması gerektiğini anlar ve yapar. İşte bilgisayar içinde program olmayınca yani emeirler dizisi olmayınca demir yıgınından öteye gidemez. Bilgisayarı bilgisayar yapan içindeki programlardır. Gününüz bilgisayarlarında yüzlerce program dizisi koşar. bu programlar ile bilgisayar ne yapması gerektiğini anlar ve icra eder. bu programlar donanımların nasıl ve ne için çalışacağı emirlerini verir.

Bu emirleri ise CPU denilen yapı icra eder. Central Processor Unit kısaltılması, peki bu programlar CPU tarafından nasıl anlaşılır. İşte burada buna değineceğiz.
Makina dili 1 ve 0 dan oluşan binary sayılardan ibarettir. bizler 10 Luk taban kullanırız decimal değer denilir. makina ise ‘lik taban kullanır yani binary denilen. 2’lik taban kullanılması ise çok anlamlıdır. Çünkü makine açık veya kapalı şeklinde işlemleri yürütür. bu durmda açık 1 kapalı 0 şeklinde simgelendiğinde bütün işlemleri 1 ve 0 lar dizisi ile rahatlıkla yaptırabiliriz.
Peki bu 1 ve 0 dizisini CPU nasıl anlar. Bir formata sokularak anlayabilir tabi ki. şöyle ki
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
şeklinde bir dizi gönderilir. bu tamamen örnektir. çünkü her bir CPU kendine has formatta 1 ve 0 lardan oluşan bir dizi gönderir.
araya belki bilmeyenler olur diye bit ve byte terimlerini sokuyorum. bit 1 veya 0 değerine verilen addır. byte ise 1 ve 0’lardan oluşan 8 öğeli dizeye verilen addir. yani örneğin 1 bit -> 0 , 1 byte -> 01101110 gibi.

ilk 8 bit yani 1 byte 1 veya 0 değeri CPU’ya hangi kodu icra ettireceğinizi belirtir. diyelim ki 00000001 toplama komutu olsun “ADD” diye assambly kodu olarak simgelensin. 2 ve 3 byte’larda sırası ile 00000011=>3 ve 00000111=>7 olsun yani aşagıdaki gibi bir dizi CPU’ya gönderilirse
00000001 00000011 00000111

bunu CPU 3 ile 7’yi toplayacağım şeklinde anlar. çünkü ilk byte operational kod idi yani CPU’nun ne yapacağını anladığı yer 2. ve 3. byte’lar ise bu 2 değerin 1. byte da ki komuta göre işlenmesi için gönderilen kodlardı. yukarıdaki örneğe göre CPU’ya “ADD 3 7” gönderilmiş oldu. CPU’ da 3 ve 7’yi toplaması gerektiğini anladı ve bu işlemi döndürdü.


peki biz CPU sadece bit dizisini anlar yani 1 ve 0’lar dizisini demiştik. şimdi ise “ADD 3 7” gibi birşeyden bahsettik. hani 1 ve 0 değiş bilgidiğimiz yazı dizisi var diyebiliriz. işte bu yazıya programcı kolaylıkla CPU’ya özel program yazsın diye assambly dili denir. programcı insan için çok daha anlaşılır bu dil ile kod yazar asambler denilen derleyici de bu komutlar satırlarını makinenin anlayacağı yukarıda verdiğimiz formatta cevirir. her bir CPU kendine has formatı olur demiştik. bu nedenler bir CPU için yazılan program bir başka CPU için calışmamaktadir. bunun için yazılım tekrar yazılması gerekmektedir. işte bu duruma low level yazılım denir. Bu tarz sıkıntıların üstesinden gelebilmek için ise C gibi kendini birçok platform ve CPU’da ispatlamış platformdan bağımsız hıgh level yazılım dili geliştirlmiştir. aslında C en çok kullanılan hıgh level yazılım dilidir. birçok farklı yazılım dili vardır.
Buradaki olay ise derleyici ile yazdığımız kod. CPU’ya uygun assamly diline çevirilip, assambler ile makine diline çevirilmesi olayıdır.

işte bilgisayar bu şekilde verilen emirlere göre çalışır.
tabi ki bilgisayar derken gömülü sistemler de aynı mantıkla çalışır. aslında embedded sistemler de birer bilgisayardır.