Commodore sayı 45, sayfa 20

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 20

Geçen sayıda değinmeye başladığımız 16 Bit işlemler oldukça başımızı ağrıtmıştı. Şimdi isterseniz biraz bu sayı karmaşasından uzaklaşalım ve basit bir Assembler prog- Tamını incelemeye başlayalım. Yalnız burada yeni bir komut karşımıza çıkmakta: BNE “Branch if Not Egual zero” veya diğer bir deyişle “eğer sıfır değilse dallan” bu komutun kısa bir açıklamasıdır. Burada sadece statü registerindeki Z-göstergesi (Bu göstergeyi INX, DER ... komutlarını incelerken detaylı olarak ele almıştık) ““0” değerini almışsa bir dallanma yani istenen bir adrese sıçrama gerçekleşir. Aşağıda göreceğiniz programın akış diyagramı Resim 1'de gösterilmiştir. 1500 LDX # $FF 1502 LDY # $FF 1504 DEY 1505 BNE $1504 1507 DEX 1508 BNE $1502 1S0A BRK Programda ilk olarak X ve Y registerlerine başlangıç değerleri yüklenir. Bunu takip eden satırdaki DEY komutu ise Y registerindeki başlangıç değerini bir indirerek $FE olmasını sağlar. Daha sonra bilgisayar BNE komutu ile karşılaştığı için statü Şer, Z göstergesine (Sıfır göstergesine) bakar. İlk etap sonunda doğal olarak burada sıfır değeri yer almayacağı için (Y registe-

Komut Adresleme Byte Kod Desimal Süre Etkilediği Yöntemi Sayısı Flaglar INX Sihir 1 22 2 NZ INY Sihir 1 200 2 NZ INC Mutlak 3 EE 238 6 NZ DEX Sihir 1 CA 202 2 NZ DEY Sihir 1 88 198 2 NZ DEC Mutlak 3 CE 206 6 NZ SED Sihir 1 F8 248 2 - CLD Sihir 1 D8 216 2 -

ANIL GÜL ri sıfırdan farklı olduğu için değeri 1'dir) program tekrar $1504 adresine döner. Burada Y registeri tekrar | azaltılır ve tekrar BNE ile 0 değerine ulaşıp ulaşmadığı kontrol edilir. Bu işlemler tam 255 defa tekrarlandıktan sonra Z göstergesi O değerini alacaktır ve dolayısıyla program bir sonraki satıra atlama imkânını bulacaktır. Bir sonraki satırda ise bu sefer DEX ile X registeri | azaltılacak ve BNE ile sıfır değerini alıp almadığı kontrol edilecektir. İlk kontrolde X registeri sıfır olamayacağı için program tekrar $1502'ye dönecektir. Bu şekilde yukarıda 255 defa yapılan azaltma işlemi tekrar yapılacak, fakat X registeri yine sıfır olmadığı için yukarıdaki döngü tam 255 defa tekrarlanacaktır. Sonuçta dış döngü 255 defa, iç döngü ise 65025 defa yapılacaktır. Yukarıda incelediğimiz programı yazarken bilgisayarın, BNE $1504 komutundan sonraki adres olarak $1508 yerine $1507 vermiş olması herhalde dikkatinizi çekmiştir. İlk bakışta BNE üç baytlık bir komut gibi gözükmektedir, fakat hafızada sadece iki bayt işgal etmiştir. Bu Branch komutlarının özel adresleme sisteminden kaynaklanmaktadır. “Relatif adresleme” olarak adlandırılan bu sistemi daha sonra diğer Branch komutları ile beraber ele alacağız. Her ne kadar makine dili çok çok hızlı işlese de G 1500 ile örnek programımızı çalıştırdığımızda registerler gösterilene dek bir miktar zaman geçecektir. Eğer daha uzun gecikmelere ihtiyaç duyulursa DEC komutu kullanılarak bir döngü daha ilave edilebilir.

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