1 Eylül 1989 Tarihli Commodore Gazetesi Sayfa 26

1 Eylül 1989 tarihli Commodore Gazetesi Sayfa 26
Metin içeriği (otomatik olarak oluşturulmuştur)

programımız için 48 mikrosaniye sü- recektir. Aynı programın Basic kar- şılığı ise aşağı yukarı 100 kat fazla za- man (0,05 saniye) harcayacaktır. B:ogı'-lııymkı'ı im saplama lçloııılolzl: Şimdi Assembler programlarken çok sık kullanılan ikilik ve onaltılık sayı sistemlerini daha yakından ince- leyeceğiz. Bilgisayarımızın algılayabildiği sa- dece iki rakam vardır: 0 ve 1. Eğer elektrik varsa 1, yoksa 0. Onaltılık sayı sistemini ise bilgisayar doğrudan doğruya kesinlikle tanımaz. Yalnız bu sistemin ikilik sistemle büyük ben- zerliği vardır. Örneğin en büyük tek basamaklı onaltılık sayı olan $F, iki- lik sistemde 1111'e yani yarım bayt'a eş değerdedir. Bir bayt ise (11l11 - 1111) $FF”'e eş değerdir. Bildiğiniz gi- bi C-64'ün tüm belleği 65535 bayttır ve bu $FFFF'e karşılık gelmektedir. Dolayısıyla onaltılık sayı sistemini istenen her adresi Low ve High Byte olmak üzere iki bayt ha- linde belirtmek mümkündür. Makina dilinde program yazarken oldukça sık kullanacağımız ikilik ta- bana göre hesap işlemleri aslında her zaman kullandığımız dört işleme ol- dukça benzemektedir: ÜtÜLMR | ÜÖtiR- | 14*0- |1 1 *4*1-10 Burada son toplama işlemindeki iki tabanına göre 10 desimal olarak 2'ye karşılık gelmektedir. Örnek ola- rak 2 * 1 — 3 işlemini ikilik sistem- de yapalım: 10 (desimal olarak 2) 01 (desimal olarak 1) * 11 (desimal olarak 3) Görüldüğü gibi toplama işlemi ay- nı desimal sayılarda olduğu gibi sü- tunlar halinde yapılmaktadır. Elde kalan sayılar ise bir sonraki sütuna aktarılmaktadır. Örneğin: 10 (desimal olarak 2) 10 (desimal olarak 2) * 100 (desimal olarak 4) İkinci sütunda yer alan 1-4- 1-10 olduğu için sonuç üç rakamlı çıkmış- tır. 26 Altı yeni komut daha: INX, “Increment X-Register”' ya- ni X registerinin içeriğini | arttırmak demektir. Buna karşılık INY aynı işi Y registeri için yapar. INC ise her- hangi bir baytın içerdiği değeri | art- tırmaktadır. INX ve INY daha önce- ki RTS gibi 1 baytlık komuttur ve ar- dında herhangi bir parametre yer al- maz. INC kullanıldığında ise bilgisa- yara hangi baytın değerinin arttırıla- cağı belirtilmelidir. Bu nedenle ko- mutun kendisi ile birlikte 3 bayt har- canır. DEX, DEY ve DEC yukarıdaki arttırma işleminin tersini yani eksilt- me işlemi yapmaktadırlar. Burada DEX “Decrement X Register”' yani X registerini 1 eksilt anlamına gel- mektedir. Diğer komutların anlamla- rı ve harcadıkları bayt sayıları da benzer şekildedir. Şimdi öğrendikle- rimizi bir programda uygulayalım: 1500 LDA # $00 1502 LDX # $01 1502 STA $d800 1507 STX $0400 1508 BRK Yukarıdaki satırları yazdıktan son- ra G 1500 yazıp RETURN'e basın. Ekranın sol üst köşesinde tekrar “ABA” harfleri siyah renkte gözü- kecektir. Şimdi bu programda neler olup bittiğini inceleyelim. Önce akü- mülatörün içerdiği değeri (siyahın de- ğeri olan 0) ekran renk belleğine ($D800) ve X registerinin içerdiği de- ğer olan 1 (A harfinin POKE kodu) ilk ekran belleğine ($0400) yazılır. Daha sonra X registerinin içeriği 1 (2—> B harfinin POKE değeri) arttı- rılır ve ikinci ekran belleğine ($0401) yazılır. Daha sonra DEX ile X regis- teri | azaltılır ve azaltılır ve üçüncü ekran belleğine ($0401) yazılır. Herhalde farketmişsinizdir; bu sis- temi kullanarak birçok kez tekrarla- nan bir donglıyu konırcıl edebilirsi- gisterini INX ile 1 arttırır ve BRANCH-komutları ile (daha sonra değineceğiz) X registerinin 20 olup ol- madığını anlayabiliriz. Burada he- men FOR-NEXT döngüleri aklımıza gelmekte. Aynı Basic'te olduğu gibi makina dilinde de döngüleri tersten saydırabiliriz. Bunun için DEX veya DEY komutunu kullanmamız yeter- li olacaktır. Bu aylık da bu kadar. Gelecek ay BRANCH komutlarını incelemek üzere şimdilik hoşçakalın!

Bu sayıdan diğer sayfalar: