Bu sayfadaki yazılar
Sayfanın metni
Sayfa 62
PASCAL, COBOL gibi tüm diller. Bu dillerin genel özelliği belli bir problemin çözülmesi için geliştirilmiş olmaları. Makina dili ise bu dillerin tam tersine aletin donanım yapısına hitap eder. BASIC'i iyi biliyorsunuz dedik (zaten başka türlü, makina dilini düşünmek hayal olurdu). Yalnız Commodore 64'ünüz esasında BASIC bilmiyor. Peki nasıl oluyor da, BASIC komutlarını böyle düzenli ve hızlı yürütebiliyor. Bu özellikleri sağlayan şey, işletim sisteminin bir parçası olan BASIC-INTERPRETER (yorumlayıcı)'dır. Yorumlayıcının görevi, yazı karakterlerini kullanarak verdiğiniz BASIC komutlarını yorumlayıp bunlara ait (hazır olan) makina dili altprogramları yürütmek. Şimdi bir örnek üzerinde bu olayı daha detaylı olarak kavramaya çalışalım:
Bu emri ekrana yazıp 'RETURN' tuşuna bastığınızda, yorumlayıcı bu satırı harf harf okur ve kendine ait komutları arar. Bu işlemi, okuduğu kelimeyi belleğinde belli bir bölgede bulunan komut tablosuyla karşılaştırıp yapar (GOTO, FOR, INPUT gibi). Şayet kendine ait bir komuta rastlarsa, bu komutun numarasına dikkat eder. Bu numarayı ise başka bir tablodan o komutun adresini bulmak için kullanır. Artık komutun uygulanmasına gelmiştir sıra, PRINT emrine ait altprogram çağırılır. Bu altprogram da karakterleri tek tek okur. Tırnağa rastladığı zaman sonra gelen karakterleri ekrana basmaya başlar. Bu işlem ikinci tırnağa rastlayana kadar sürer. Daha sonra ise satır bitmektedir. PRINT altprogramı yorumlayıcıya geri döner. Bu da yapacağı işin bittiğini anlayınca yeni komut almak için 'READY' yazdır ve CURSOR yanıp sönmeye başlar. Şimdi diyeceksiniz ki bu kadarcık iş için aletimiz böyle mi uğraşıyor?.. Bu kadar uğraşmaktan ciddi bir şey yapmaya zaman bulamaz bu alet... Halbuki gördüğünüz gibi durum o kadar da kötü değil. Aletimiz gene de bu işlemleri oldukça hızlı yapmakta. Düşünün bir de biz aradaki birçok gereksiz işlemi atlatıp bu işleri yapan ana işlem ünitesine doğrudan hitap edebilsek. O zaman görün siz! Bir örnekle bu hız farkını daha belirgin olarak gözleyelim. Diyelim ki ekranın sol üst köşesine bir “A” harfi çıkartmak istiyoruz. Bunun için hızlı bir yöntem olarak POKE komutunu kullanalım. BASIC satırı olarak şunu girmemiz gerekmektedir:
Bunu yazar yazmaz ekranın sol üst köşesinde “A” harfi belirdi değil mi? (Bu emri yazarken ekranı kaydıracak bir yerde olmamaya dikkat edin, yoksa A harfinizi bir türlü göremezsiniz, hâlâ göremiyorsanız sizin aletiniz 1984 senesinden de eski üretilmiş demektir. O zaman uğraşmaktan vazgeçin.) Yalnız hızı gözle takip edemediniz galiba?.. Tekrar tekrar denemenin faydası yok. Oldukça hızlı oluyor galiba bu iş. Bütün bu işlemin toplam süresi 2 milisaniye civarı bir şey (bir milisaniye, saniyenin binde biridir). Şimdi bir de makina dilinde aynı işi yaptıralım:
Bunu yazıp zamanı ölçmeye falan kesinlikle kalkışmayın. Çünkü işlemimiz yalnızca 8 mikrosaniye sürüyor (bir mikrosaniye, saniyenin milyonda biridir). Gördüğümüz gibi aynı işi BASIC'te ve makina dilinde yapmak arasında 200 kat kadar zaman farkı keşfettik. Aslında genel bir yargı olarak belirtebiliriz ki, aynı işi yapmak üzere yazılmış BASIC ve makina dili programlar arasında 10 ilâ 4000 kat hız farkı vardır. Bundan başka bazı işler vardır ki yalnızca makina dilinde yapılabilir. Bunlara daha sonra değineceğiz. Başka bir genel yargı da bilgisayarın tüm olanaklarını yalnızca makina dilinden kullanabileceğiniz. Buna örnek olarak Commodore 64'ün üç boyutlu ve gerçek zamana bağımlı grafik özelliklerini kullanabilmeyi verebiliriz. İlginç bir özellik de makina dili programlarının daha ufak ve derli toplu oluşu. Mesela 1 KByte'lik bir BASIC program ciddiye alınmaz bile. Oysa bu uzunlukta bir makina dili program başlı başına tüm bilgisayarı çekip çevirebilir. Veri ve bilgileri saklama konu-
sunda da aynı şeyi söyleyebiliriz.
Kendinize uygun en kompakt şekli kullanabilirsiniz. Oysa BASIC'te kullanabileceğiniz veri tipleri sınırlıdır. Gelelim makina dilinin dezavantajlarına: Öncelikle makina dilini öğrenmek gerekiyor. Fakat BASIC'teki programlama tekniklerine hakimseniz, belli bir hızınız var demektir. Ayrıca LİSTİNG ekinde makina dilinde çalışabilmeniz için gerekli araç ve gereçleri bulacaksınız. Bunlar monitör programları, assembler programları, simülatör'ler, reassembler vs. programları olacak. Makina dilinin başka bir dezavantajı bilgisayara aşırı biçimde bağımlı olmasıdır. Aynı ana işlem ünitesine sahip bilgisayarlarda bile doğrudan programları taşıyamazsınız. Bunun nedeni makina dili programlarının bilgisayarın birçok özel fonksiyonlarına yönelik olmasıdır. Gördüğünüz gibi dezavantajlar pek o kadar da fazla değil. Bunları da yalnızca kendine güven ve cesaretle atlatabilirsiniz. Gerçekten de bilgisayarınızda arayıp bulamadığınız birçok özelliği makina dili yardımıyla görebileceksiniz. Bu arada bazılarınız diyebilir ki BASIC ne olacak? Bir kenara mı bırakacağız o'nu?.. Hayır, hiç de öyle değil. Programınızın gerekli kısımlarında makina dili kullanırsınız, bunları denetim altında tutan gene BASIC olur.
İlk makina dili programınızı yazınca göreceksiniz ki bu iş öyle ilk göründüğü kadar zor değil. Bu yazı dizisi boyunca birçok programlama örneği de vererek size program geliştirme yönünden yardımcı olmaya çalışacağız. Dediğimiz gibi, sonuçta iyi bir şeyler yapabilecek duruma geleceksiniz. O kadar da zor olmayacak. Fakat siz gene de gayretinizi koruyun; azim ve sabırı elden bırakmayın. Herkes hazırsa, haydi başlıyoruz...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 63
6510 Ana İşlem Ünitesi
Makina dilinde programlamaya geçmeden önce programlayacağımız şeyi, ana işlem birimini tanıyalım. Bu arada veri, adres, bit, byte, register gibi bazı kavramların tanımını da yapacağız. Ana işlem ünitesinin iç yapısından başlayalım. 6510 ana işlem ünitesi 6502 ailesine ait bir üye. Bu ailenin diğer üyeleri de aynı zamanda diğer Commodore ürünlerinde yoğun şekilde kullanılıyor. Ana işlem ünitesinin içinde birçok register yeralıyor. Bu registerler yardımıyla ana işlem ünitemiz birçok işlemi gerçekleştirebiliyor. İşin ne olduğuna bakmadan önce bit kavramına değinelim (çoğunuz bu konulardan sıkılabilir, fakat yeni öğrenenler olduğunu da unutmayalım). Bilgisayarımız “dijital” çalışan bir alettir. Bu demektir ki bilgisayarımız iki şeyden anlıyor. Bunlar 1 ve 0 rakamları veya “açık” ve “kapalı” durumları veya daha da başka bir yorumla 5V ve 0V (şase seviyesi) potansiyel değeri. Böyle bir şeyin kendi başına pek bir işe yaramayacağı oldukça açık. Bu yüzden bunların birkaç tanesi biraraya getiriliyor. Bizim durumumuzda sekiz tanesi biraraya getirilmiş durumda ve bir Byte adı altında bir bilgi grubu oluşturmuş durumdalar. Bir Byte'ın yapısını gözönüne getirmek istersek:
Yukarıda her bir bitin byte içindeki pozisyonunu gösteren bir numara ve hemen altında ise o bitin içeriğini görebilirsiniz. Her bir bit iki değişik durumu gösterebildiğine göre sekiz tanesiyle çok daha fazla bilgi gösterilebileceği aşikâr. Daha iyi bir görüş için bildiğimiz ondalık sayı sisteminden bir örneği inceleyip karşılaştırma yapalım:
Burada da rakamları tek tek numaraladık. Peki bu sayının değerini nasıl elde edeceğiz?.. Bildiğimiz gibi her basamağın içeriği 0 ile 9 arasında değişebiliyor ve bulunduğu basamağa göre bir faktörle çarpılıyor. Bu faktör ise her basamak için bir sağdaki basamağın on katı değer taşıyor. Buna göre sayımızın değeri:
ni belirleyen faktör her defasında on ile değil, iki ile çarpılıyor. Şimdi register'imizin içeriğini hesaplayalım
440'240*2*2441'2'2'24 4 0*2*2*2'2'2'2'2
Demek ki register'imizin içeriği 255'miş!.. Bu yorucu işlemi biraz
Aynı yolu uygulayarak bizim register'imizin içeriğini inceleyelim. Onluk sistemde on adet rakam kullanabiliyorduk. İkili sistemde ise yalnızca iki adet seçeneğimiz var. Bu yüzden basamakların değerini basitleştireceğiz. Her basamağın belli bir değeri olduğundan bu değerleri bir kere hesaplayacağız ve aklımızda tutacağız, nasıl ondalık basamakların değerlerini aklımızda tutabiliyorsak.