1 Haziran 1987 Tarihli Commodore Gazetesi Sayfa 63

1 Haziran 1987 tarihli Commodore Gazetesi Sayfa 63
Metin içeriği (otomatik olarak oluşturulmuştur)

150 X-X4*1 M INX X-register'inin değerini bir artır- mak için sayma komutlarını kullana- biliriz. 1601F X 256 THEN 110 m ? 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 150'nci sa- tı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 ede- ceğ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 tek- rar 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- —& Mo11110100 — $F4 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 I1F X <>256 THEN 110 ae 160 IF X BNE satır 110 Fakat şimdi de şöyle bir sorun çı- kıyor. Makine dilinde program ya- zarken, hiçbir zaman *110'uncu satıra sıçra' diyemeyiz. Bunun yerine, sıç- ranacak hafızanın adresini vermemiz gerekmektedir. Ama, bu adresi bilmi- yoruz. Önce biz programımızı belli bir adrese yerleştirelim ve bütün ko- mutların uzunluklarına göre adresle- rini belirleyelim. Programımız gene $6000 adresinde yeralsın. 100 $6000 LDX $ 0 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 adre- sini bulmak için kullandık. Yani 160'ıncı satırdaki sıçrama işleminin $6002 adresine yapılması gerekmek- tedir. Programımıza bir de kodları- ni ekleyelim de tam olsun. 100 $6000 A200 LDXF Ü 110 $6002 BA TXA 120 $6003 9D 00 04 STA $0400,X 130 $6006 A901 LDA#İI 140 $6008 96 00 D8 STA $D800,X 150 $6009 E8 160 $600C DO0 ?? 170 $600D 60 INX BNE $6002 RTS 160'ıncı satırdan 110'uncu satıra yapacağımız dallanma işlemi sırasın- da 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ıl- ması gereken işlem, farkı pozitif ola- rak belirlemek ve bunun ikili sistem- de komplementini almaktan ibarettir. $600E $6002 $000C $OC — 000001100 Yol1110011 l Ofset byte'ı olarak $F4 elde ettik. Kodumuzda eksik olan yere bu raka- mı da koyduk mu hiçbir eksiğimiz kalmayacak. Şimdi, programımızın herhangi bir biçimde (monitor prog- ramı veya BASIC'te ufak bir prog- ram) hafıza elemanlarına yazılması gerekmektedir. Programın, hafızaya alınmasını sağladıktan sonra, cur- sor'un aşağı yukarı ekranın ortaların- da olmasına dikkat ettikten sonra, SYS 6*4096 komutuyla, makine dili programını- zı çalıştırın. Aniden tüm karakter seti ekranın üst şeklinde belirecektir. Hal- buki, 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 iyi- ce inandınız sanırım. Şimdi, Assemb- ler programları ile ilgilenelim. Çün- kü, bu yardımcı programlar çok ra- hat ve hızlı bir biçimde program ya- zı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ısa- ca Assembler ile çalışmak size büyük kolaylıklar sağlayacaktır.

Bu sayıdan diğer sayfalar: