Bu sayfadaki yazılar
Sayfanın metni
Sayfa 44
Makina dili bilgisayarın doğrudan doğruya anlayabildiği tek dildir ve sayılardan oluşmaktadır. Sadece bu sayıları kullanarak program yazmak imkânsızdır. Bunun için bilgisayarla iletişim kurarken bir aracıya gereksinimimiz olacaktır. Bu aracı da ASSEMBLER'dir.
Büyük bir olasılıkla C-64'de Assembler ile yapılabilecekleri gördükten veya okuduktan sonra, aynı şeyler neden Basic'de yapılamıyor diye içinizden geçirmişsinizdir. Belki de hemen C-64'ünüzün başına geçip C000 LDA — $00 gibi bir satır yazıp RETURN'e bastığınızda bilgisayar SYNTAX ERROR hata mesajı vermiştir. Yukarıdaki satır bizim C-64'- ün makina dile olduğunu biliyoruz.
süyle okunup belli adreslere POKE edilen DATA satırlarıyla karşılaşmışsınızdır. En sonda gelen bir SYS komutu ile de herhalde DATA satırlarındaki sayıların makina dilinde yazılmış bir program olduğunu farketmişsinizdir. Nasıl oluyor da doğrudan doğruya Basic'den makina dili programlar yazmanız mümkün oluyor? İşte bu makina dilini anlatan yazı
ANIL GÜL konunun asıl başladığı yerde, yani işletim sistemi rutinlerinin ve yorumlayıcıların kullanımında son bulmaktadırlar. Esasında makina dili komutları tek başlarına hiçbir şey ifade etmezler. Makina dilinde yazılmış bir program, o bilgisayarın kullandığı mikroişlemcinin komutlarının ve işletim sistemi rutinlerinin beraber kullanılmasıyla işlev kazanır. Kursumuz süresince sık sık C-64'- ün Kernal alt rutinlerini kullanacağız. Bu nedenle elinizin altında C-64'ün bir bellek haritasının (Memory Map) bulunmasında büyük fayda vardır. Bildiğiniz gibi makina dili bilgisayarın doğrudan doğruya anlayabildiği tek dildir ve sayılardan oluşmaktadır. Sadece bu sayıları kullanarak program yazmak imkânsızdır. Bunun için bilgisayarla iletişim kurarken bir aracıya gereksinimimiz olacaktır. Bu aracı da ASSEMBLER'dir. Burada “iletişim kurmak” demek CPU'ya (Central Processing Unit « Merkezi
Peki nerede hata yapılmıştı? dizimizde yukarıdaki sorulara cevap — işlem ünitesi) bazı emirler verebilmek Yine büyük bir olasılıkla dergi ve- — bulacaksınız. Hemen herkesin elinde — demektir. Bu CPU'lar değişik firmaya kitaplardan yazdığınız bir prog- C-64'ün makina dilini anlatan bir ki- — lar tarafından üretilmektedirler ve bu ramda basit bir FOR-NEXT döngü- tap vardır, fakat bunların birçoğu — yüzden aralarında farklılıklar vardır. Güç kaynağı 8- Bit-Data bus
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 45
6502 oldukça yayılmış bir Processor'- dur ve C-64'ün mikro işlemcisi olan 6518'la hemen hemen aynıdır. Bu ikisi de 6502 Assembler ile programlanabilmektedirler. Bir Assembler kendi dilinde yazılmış komutları makina diline tercüme etmektedir. Bir de Assembler'in tam tersi olan, yani makina dili komutları çeviren Disassembler'lar vardır. C- 64'de makina dili bir program yazabilmek için Assembler ve Disassembler özelliği olan bir monitör programına ihtiyacımız olacaktır. Her ne kadar değişik özelliklere sahip birçok monitör programı mevcut ise de bunların kullanımı hemen hemen aynıdır. Yeri geldiğinde bu konuya daha detaylı değineceğiz.
Basic'e karşı Assembler:
Bu ikisi arasındaki farkı daha iyi görebilmek için aşağıdaki satırları yazın.
10 FOR TO 1024 STEP-İI 20 POKE I,1:POKE 1-4 54272,14 30 NEXT I
Bu programcık ekranın üst tarafındaki bölüme 255 tane ““A”' harfi basmaktadır. Eğer kronometre ile zaman tutarsanız bu işlem için aşağı yukarı 4 saniye harcandığını göreceksiniz. Ayrıca bu program hafızada 62 bayt işgal etmektedir. Şimdi aynı işi Assembler ile yapalım. NEW yazdıktan sonra bilgisayara aşağıdaki satırları girin:
10 FOR 1-7000 TO
20 READ A:POKE I,A:NEXT 30 DATA 160,255,162,14,169,1, 153,255,3,138,153,255,215,136, 208,244,96
RUN komutunu verdiğinizde makina dili program 7000. bayttan itibaren hafızada yer alacaktır. SYS 7000 ile programı çalıştırabilirsiniz, ama hiç süre tutmaya kalkışma) ra bu işlem Assembler ile 5,4 mili niyede halledilmektedir. Ayrıca program bellekte sadece 17 bayt işgal etmektedir. Görüldüğü gibi Assembler kullanımını bu kadar çekici yapan başlıca unsur sürattir. Bazı işlemler Basic'e göre aşağı yukarı 1000 kat hızlı gerçekleştirilmektedir. Ayrıca Basic'te halledilmesi imkansız olan programlar Assembler'in çok yönlü kullanımı ile mümkün olmaktadır. C-64 açıldığında ile programlanmayı beklemektedir. Bizim bilgisayara yazdığımız Basic komutları her seferinde “Interpreter” adındaki bir çevirici program tarafından bilgisayarın anlayabileceği bir şekilde yorumlamaktadır. Yalnız bu yorumlayıcı ile Assembler programları arasında çok önemli fark vardır: Assembler'da yazılan bir program bir defa çevrilerek tamamen makina dili haline gelmektedir ve bir daha yazıldığı Assembler programlarına ihtiyaç duymamaktadır. Basic programlarda ise tam tersine her seferinde yorumlayıcı işe karışmaktadır ve bu da önemli bir zaman kaybına yol açmaktadır. C-64'ün içinde açılışta hazır bir Assembler bulunmaması bu bilgisayar için önemli bir handikap teşkil etmektedir. Şimdi isterseniz normal şartlarda yani doğrudan Basic yardımıyla C-64'de nasıl makina dili program yazılacağını görelim: a)İlk önce Assembler program hazırlanmalıdır. Bu programda bir dizi komut yer alacaktır. Örnek olarak bu diziden bir RTS komutunu ele alahım. b) Her Assembler komutunun makina dilinde bir “binary” (ikilik sistem) kodu vardır. RTS için bu kod 01100000 dur. c) Şimdi bu kodun hafızanin bir registerine kaydedilmesi lazımdır. Bu işlem POKE komuduyla gerçekleşir. Yalnız Basic ikilik sistemden anlamadığı için bunun onluk sisteme çevrilmesi gereklidir. RTS'nin onluk sistem karşılığı 96'dır (onaltılık veya heksadesimal karşılığı 60). Bu değer istenen adrese POKE edilir, örneğin PO-KE 7016,96. d) Bu yöntemle tüm program bayt bayt hafızaya yerleştirilir. Eğer hafızadaki program incelenmek istenirse bu sefer PEEK komutu ile her bayt tekrar okunmalıdır. Görüldüğü gibi yukarıdaki yöntem oldukça zahmetlidir. Bu nedenle herhangi bir monitör programının kullanılmasında büyük yarar vardır. Kullanışlıkları açısından bize en uygun olanları S-MON veya EX-MON'dur. Monitörlerin yanında çok çeşitli Assembler programları mevcuttur. Örneğin Direkt-Assembler'lar yazılan her satırı anında makine diline çevirmektedirler. Bunun yanında 2-Pass- Assembler'lar tüm program tamamlanınca assembler (makina diline çe-
2
> virme) işlemine geçmektedirler. Bazı Assembler'larda her satıra (Basic'teki REM komutuna benzer şekilde) bir yorum sözcüğü ilave edilebilmektedir. Ayrıca istenen satırlara (Label) veya program bölümlerine (Makro) isim verme olanağı da vardır. Tüm bunlar kullanıcının üzerindeki yükü hafifletmek için geliştirilmiştir. Biz burada başlangıçta bu tür lüks Assembler'lar kullanmayacağız.
ARR ölü ELİ