Commodore sayı 16, sayfa 63

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 63

150X-X4*1 m INX

X-register'inin değerini bir artırmak için sayma komutlarını kullanabiliriz. 160 IF X < 256 THEN 110

Bu komut belli bir şartı arıyor. Şart gerçekleşmişse 110'uncu satıra sıçrıyor. Aranan şart ise X'in değerinin 256 olması. Fakat, biz biliyoruz ki X-register'i en fazla 255'e kadar değerleri alabiliyordu. Diyelim ki X-register'i 255 içeriyor ve satırdaki INX işlemi yürütüldü, ne olur? Gayet basit, 255'ten ($FF), 256 ($100) elde ederiz. Fakat dokuzuncu bit'i temsil edecek kimse olmadığı için, elimize geçen değer sadece $00'dır. Bu durumu nasıl ayırt edeceğiz? Hemen, pek güçlü hafızamızı bir kere daha yokluyoruz ve flag'lar bahsini hatırlıyoruz. X-register'inin değerini her yükselttiğimizde, N- ve Z-flag'ları da etkilenir ve durumları X-register'inin yeni değerine göre tekrar belirlenir. Elde edilen değer $7F'ten (127) büyükse N-flag'ı yanar, küçükse de söner. Artırma sonucu, X-register'inde sıfır elde edersek Z-flag'ı yanar, diğer durumlarda söner. Yani, bizim durumumuzda Z-flag'ını kontrol etmemiz gerekiyor. Bu flag'ın durumuna göre programımız şartlı olarak dallanmak zorunda.

160 IF X <> 256 THEN 110 ya da 160 IF X BNE satır 110 Fakat şimdi de şöyle bir sorun çıkıyor. Makine dilinde program yazarken, hiçbir zaman "110'uncu satıra sıçra" diyemeyiz. Bunun yerine, sıçranacak hafızanın adresini vermemiz gerekmektedir. Ama, bu adresi bilmiyoruz. Önce biz programımızı belli bir adrese yerleştirelim ve bütün komutların uzunluklarına göre adreslerini belirleyelim. Programımız gene $6000 adresinde yer alsın.

100 $6000 LDX * O 110 $6002 TXA 120 $6003 STA $0400,X 130 $6006 LDA < | 140 $6008 STA $D800,X 150 $600B INX 160 $800C BNE $6002 170 $600D RTS

Dikkat ettiyseniz, program sayacını her bir komutun uzunluğu kadar arttırarak bir sonraki komutun adresini bulmak için kullandık. Yani 160'ıncı satırdaki sıçrama işleminin

2

$6002 adresine yapılması gerekmektedir. Programımıza bir de kodlarını ekleyelim de tam olsun.

100 $6000 A2 00. 0 110 $6002 BA TXA 120 $6003 9D 00 04 STA $0400,X 130 $6006 A9 01 LDA #1 140 $6008 96 00 D8 STA $D800,X

150 $6009 E8 INX 160 $600C DO 9? BNE $6002 170 $600D 60 RTS

160'ıncı satırdan 110'uncu satıra yapacağımız dallanma işlemi sırasında kullanacağımız ofseti daha hâlâ belirlemedik. (Bunun için isterseniz, şartlı programlama komutları bölümüne bir kere daha göz atın.) Yapılması gereken işlem, farkı pozitif olarak belirlemek ve bunun ikili sistemde komplementini almaktan ibarettir.

$600E $6002

$000C $0C = 00001100 AA 11110100 = $F4

Ofset byte'ı olarak $F4 elde ettik. Kodumuzda eksik olan yere bu rakamı da koyduk mu hiçbir eksiğimiz kalmayacak. Şimdi, programımızın herhangi bir biçimde (monitor programı veya BASIC'te ufak bir program) hafıza elemanlarına yazılması gerekmektedir. Programın, hafızaya alınmasını sağladıktan sonra, cursor'un aşağı yukarı ekranın ortalarında olmasına dikkat ettikten sonra,

SYS 6*4096

SYS 24576 komutuyla, makine dili programınızı çalıştırın. Aniden tüm karakter seti ekranın üst şeklinde belirecektir. Halbuki, BASIC'teki programımız bu iş için 7 saniye harcamıştı. Şimdi ise hiçbir şey gözle takip edilemiyor. İşte size somut gerçek. Artık makine dilinde programlamanın gücüne iyice inandınız sanırım. Şimdi, Assembler programları ile ilgilenelim. Çünkü, bu yardımcı programlar çok rahat ve hızlı bir biçimde program yazılmasını sağlıyorlar. Ayrıca, sistemli de çalışırsanız, çok büyük projelerin altından kolaylıkla kalkarsınız. Kısaca Assembler ile çalışmak size büyük kolaylıklar sağlayacaktır.

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