Bu sayfadaki yazılar
Sayfanın metni
Sayfa 7
İKİLİ (BİNARY) SAYI SİSTEMİ İkili sayı sisteminde sadece iki sayı kullanılır “0” ve “1”. İşlemciler bu 0 ve 1’lerin bir araya gelmesiyle bazı işlemler yaparlar. 0 ve 1 durumu alabilen en küçük bilgi birimine BİT denir. İşte bu bitlerin 4 tanesi bir araya gelirse NİBBLE olur. Sekiz bit ise bir BAYT eder. 1024 BAYT = 1 KBAYT eder. Commodore 64’ün işlemcisi 8 bitlik olduğu için bir seferde işlem yapacağı sayı 8 bitlik olacaktır. Peki ama 8 bitlik bir sayı kaçtır? 10, 50, 300 belki de 1000. Acaba gerçekten öyle mi? Kullanacağımız sayılar hep 8 bitlik olacaktır. Bu nedenle önce sayı sistemleri arasındaki hesaplamaları öğrenmek gerekmektedir. Assembler ile bir program yazarken kullanacağınız bazı özel adreslerde BİT düzeyinde işlem yapıldığı için hesaplama yapmak gerekebilir. Bir baytlık sayı 8 bitten oluşur demiştik. Bu bitler soldan sağa doğru 7 6 5 4 3 2 1 0 nolu bit olarak dizilirler. Her bitin gerçekte karşılık geldiği sayı ise 2 BİT NUMARASI şeklindedir. Bu sayıya çarpan değeri diyebiliriz. Aşağıdaki tabloyu inceleyin.
BİT NUMARASI 7 6 5 4 3 2 1 0 ÇARPAN DEĞERİ 128 64 32 16 8 4 2 1 İKİLİ SİSTEMDEN ONLU SİSTEME GEÇİŞ: İkili sistemdeki bir sayıyı onlu sayıya çevirmek için her bitin durumu (0 veya 1) o bitin çarpan değeri ile çarpılır ve çıkan sonuçlar toplanır. Örneklere bakın. İkili sistemdeki sayıları belirtmek için sayının önüne % işaretini koyacağız.. %00000000 = 128*0 + 64*0 + ........+ 2*0 + 1*0 = 0 En küçük sayımız 0’dır. %11010011 = 128*1 + 64*1 + 32*0 + 16*1 + 8*0 + 4*0 + 2*1 + 1*1 = 211 %11111111 = 128*1 + 64*1 + .........+ 2*1 + 1*1 = 255 En büyük sayımız ise 255’tir. 255’ten büyük sayıları ise 2 bayt olarak tanımlayacağız ve hesaplayacağız. Ama önce ONALTILI (HEXADECİMAL – kısaca HEX diyebiliriz.) sayı sistemini göreceğiz.
ONALTILI (HEXADECİMAL) SAYI SİSTEMİ HEXADECİMAL sayı sisteminde 0 1 2 3 4 5 6 7 8 9 rakamları ile A B C D E F harfleri kullanılır. A=10 B=11 C=12 D=13 E=14 F=15 sayılarının yerine kullanılır. Şimdiden söylemekte fayda görüyorum. Assembler ile program yazarken her zaman onaltılı sayı sistemini kullanacağız. Hatta ikili sistemden daha çok kullanacağız. Bu nedenle iyi öğrenilmesi gerekmektedir. Onaltılı sistemde bir sayı yazarken sayının önüne $ işaretini koyacağız. Onlu sistemdeki sayılar için işaret kullanmayacağız. Program yazarken kullanacağımız onaltılı sistemdeki bir sayı için 2 veya 4 karakter gereklidir. İki karakter kullanırsak sayı bir baytlık, 4 karakter kullanırsak sayı iki baytlıktır.
KARAKTER 0 1 2 3 4 5 6 7 8 9 A B C D E F SAYI DEĞERİ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ONALTILI SİSTEMDEN ONLU SİSTEME GEÇİŞ: Eğer sayı bir baytlık ise sayının soldaki basamağındaki karakterin sayı değeri 16 ile çarpılır sağdaki karakterin sayı değeri ile toplanır. Örneklere bakın. $00 = 16*0 + 0 = 0 $1A = 16*1 + 10 = 26 $88 = 16*8 + 8 = 136 $B3 = 16*11 + 3 = 179 $FF = 16*15 + 15 = 255 Gördüğünüz gibi en küçük sayımız 0 en büyük sayımız ise 255’tir. Eğer sayı 255’ten büyükse sayımız iki baytlık demektir ve 4 adet karakter kullanılır. İki baytlık bir HEX sayıyı onlu sayıya çevirmek için iki yol vardır.
1-HEX sayı ikiye ayrılarak iki adet bir baytlık sayı haline getirilir. Sonra her biri onlu sayıya çevrilir. Daha sonra ise soldan itibaren ayrılmış olan kısmın sonucu 256 ile çarpılır ve diğer sonuca eklenir. Örneğe dikkat edin.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 6
Yeni yazı dizimize hoş geldiniz. Bir bilgisayarda birçok programlama dili ile çalışabilirsiniz. İlk zamanlarda PASCAL, COBOL, FORTRAN, LISP, C, ADA, FORTH ve BASIC gibi birçok programlama dilleri bilgisayarlar için kullanılmaktaydı. Bu dediklerimden BASIC standart olarak COMMODORE 64’te ve diğer ev bilgisayarlarında çeşitli versiyonlar şeklinde bulunmaktaydı. Diğer diller ise ayrı bir program olarak bilgisayara yükleniyordu. Hangi dili kullanırsanız kullanın aslında bir bilgisayarın anladığı tek dil makine dilidir. Yazılan her komut ROM bellekte bulunan bir YORUMLAYICI (İNTERPRETER) tarafından yorumlanır ve ne yapması gerektiğine karar verilerek komut işletilir. YORUMLAYICI ise tamamen makine dili ile yazılmış bir programdır. Eğer komut yanlış yazılmışsa gerekli hata mesajını yazarak çalışmayı durduracaktır. Aşağıdaki örnek ile ne demek istediğimi daha iyi anlayacaksınız. Çok basit bir örnek vereceğim. PRINT “DENEME” yazıp RETURN tuşuna basınca neler oluyor inceleyelim. 1 – İşletim sistemi (yorumlayıcıdan ayrıdır ve basit olarak her türlü giriş çıkış işlemleriyle uğraşır; klavye, ekran, disket vs.) basılan her tuşu okuyarak hafızada klavye tamponu denilen özel bir yere kaydeder. 2 – Eğer RETURN tuşuna basıldıysa klavye tamponundaki karakterler tek tek okunur ve bir komut olup olmadığı kontrol edilir. Eğer komut değilse SYNTAX ERROR hatası verir. Eğer bir komutsa bu sefer o komuta ait alt programlar çağrılır ve komuttan sonra gelen ifade çözümlenir. Bu örnekte tırnak işareti kontrol edilir ve tırnak içindeki ifadede yer alan karakterler tek tek kontrol edilir. Çünkü C64 bu karakterleri okuyarak ekranı silme, yazı rengi değiştirme, yukarı, aşağı vs. kursör pozisyonu değiştirme gibi işlemleri de yapabilir. Eğer biz PRINT DENEME yazsaydık komut yine çalışacaktı ama bu sefer DENEME ifadesini bir yazı olarak değil bir değişken olarak kabul edecek ve değişkenin değerini ekrana basacaktı. 3 – Komuttan sonra gelen ifadeyi çözümlemek yorumlayıcının işidir. Buraya kadar her şey normal. Bundan sonra işlem bu yazıyı nereye göndereceğimizdir. Bunun için de o anki aktif çıkış kanalı kontrol edilir ve işlem yapılır. Çıkış kanalı normalde ekrandır ama siz bunu printer, disket olarak da tanımlayabilirsiniz. Bunun için ise işletim sistemini kullanarak birkaç değişiklik yapmanız gereklidir.
Gördüğünüz gibi basit bir komut bile ne kadar çok işlem gerektiriyor. Bütün bu işlemler ise sadece makine dili ile yazılmış yorumlayıcı ile işletim sistemi tarafından yapılıyor. Tek komut için belki sorun yok ama aynı işi 256 kez yapmaya kalkarsanız çok zaman harcarsınız.
FOR A=0 TO 256 : PRINT “DENEME” : NEXT Çünkü yukarıdaki işlemler 256 kez tekrarlanacaktır. İşte burada HIZ kavramı işin içine giriyor. Gerçekten de assembler ile yazılan programlar BASIC ile yazılanlara göre neredeyse 1000 kat hızlı çalışır. Ama bu her programı tamamen ASSEMBLER ile yazabiliriz anlamına gelmez. Mesela (12345 + 67890) * (1/4096) – (SİN 5 * COS 1) gibi bir hesaplamayı assembler ile yapmak için bir program yazmak kafayı sıyırmanıza yol açabilir. Ama BASIC kullanarak hem sprite hareket ettirin hem müzik çaldırın hem de ekranı kaydırın dediğimiz zaman orada kalırsınız. Bu nedenle yerine göre BASIC yerine göre ASSEMBLER kullanmanız gerekir. Fakat bu yazı dizimiz bittiğinde assembler ile ufak tefek programlar yapmaya başlayınca assemblerin diğer adıyla makine dilinin zor ama çok güzel olduğunu fark edeceksiniz. Zaman zaman dergide ufak tefek makine dili rutinlerine yer vereceğim.
Konuyu fazla dağıtmadan ilk dersimize başlıyoruz. İlk dersimiz SAYI SİSTEMLERİ olacak. Günlük yaşantımızda her ne kadar onlu sayı sistemini kullanıyor olsak da makine diliyle uğraşacaksanız bu sayı sistemini unutun. Her şeyi ikili (BİNARY) ve onaltılı (HEXADECİMAL) sistemde BİT ve BAYT seviyesinde düşüneceksiniz. Korkmanıza gerek yok. Gerçekten çok basittir.