1 Mart 1987 Tarihli Commodore Gazetesi Sayfa 21

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

ge içinde olup olmadığını kontrol eder, şayet mümkün değilse sizi uya- rır. Eğer mümkünse gerekli kodu üretir ve işleme devam eder. Şimdi bu dört flag'a göre şartlı dal- lanma komutlarını görelim: Zero flag'ına göre dallanma Zero flag'ı yanık olduğu durumda dallanmak istiyorsak “branch on egual” komutunu kullanmamız gere- kir, kısaltılmışı BEO. Zero flag'ı sö- nükken dallanmak istiyorsak *“branch on not egual' komutunu kullanacağız, kısaltılmışı BNE. Carry flag'ına göre dallanma Carry varsa dallanmak için *branch on carry set' yani BCS komutunu, carry yokken dallanmak için ise *branch on carry clear”' yani BCC ko- mutuni kullanmamız gerekmektedir. Negative flag'ına göre dallanma N-flag'ı yanıkken sıçramak için “branch on minus' yani BMI komu- mutunu kullanmamız gerekmektedir. “branch on plus' yani BPL komutunu kullanmamız gereklidir. Overflow (taşma) Hag'ına göre dallanma Taşma varken dallanmak için *branch on overflow set' yani BVS ko- mutunu taşma yokken dallanmak için BVC komutunu kullanmamız gerekir. Bu gruptaki komutlar genelde diğer- lerine göre daha seyrek kullanılır. Aşağıdaki tabloda tüm şartlı dallan- ma komutlarını ve kod'larını bulacak- sınız. Komut Komut kodu BEO $FO BNE $DO BCS $BO BCC $90 BMI $30 BPL S10 BvsS S70 BVC $50 8. Sıçrama Komutları Bir önceki bölümde gördüğümüz şartlı dallanma komutlarının tersine belli bir (absolut) adrese giden komut- lara sıçrama komutları denir. Bu ko- mutlar herhangi bir şarta bağlı değil- dir ve her seferinde yürütülürler. Sıç- rama komutları absolut adresleme ile kullanıldığı gibi daha evvelden kısmen tanıdığımız başka bir adresleme tipi- ne de sahiptir. İndirekt adreslemeli sıçrama. Bu komutun hemen arkasın- dan gelen adres varış adresi değildir. Bu adres, varış adresini gösteren bir göstergecin adresidir. Burada varış ad- resi peşpeşe gelen iki Byte'ta daha ev- velden tanıdık olduğumuz göstergeç formatında (Lo-Byte, Hi-Byte) bulu- nur. Bir örnekle görelim: JMP ($0302) $0302'deki göstergeç üzerinden indirekt sıçrama. Bu emir yürütülürken varış adresi $0302 ve $0303 adreslerinin içeriğin- den oluşturulur. Diyelim ki orada $40 ve $C8 bulunsun, böylece programı- mız $C840 adresine sıçrar ve oradan devam eder. Bu adresleme tipi yalnız- ca JMP komutuna aittir. Varış adre- si olarak aletinizin mümkün olan tüm adreslerini belirtebilirsiniz. Aşağıda- ki tabloda her iki komutun adresleme - tiplerini ve emir kodlarını bulacaksı- nız: Adresleme tipi JMP absolut $4C indirekt $6C COMMODORE 64'ün işletim sis- teminde indirekt adresleme tipi olduk- ça yoğun şekilde kullanılmıştır. Ha- fizanın üçüncü sayfasında $0300 ad- resinden, $0330 adresine kadar sistem vektörleri yer almaktadır. Bu vektör- lerin RAM'de bulunmasının oldukça fazla avantajları vardır. En basit ör- nek olarak bu vektörleri değiştirerek işletim sistemi ile ortak çalışan prog- ramlar yazabilme olanağı. Böylece bil- gisayara yeni bir özellik kazandıracak programlar yazmak çocuk oyuncağı kadar basit bir olay haline geliyor. 9. Sayma Komutları Döngüler ve sayaçlar içeren kuvvetli programlama tekniklerini kullanabil- mek için 6510'un özel sayma komut- ları vardır. Bu komutlar sayesinde ge- rek register, gerek hafıza birimlerinin içeriğini bir artırabilir veya bir eksilte- biliriz. Artırma komutları fonksiyon bakımından BASIC'teki NEXT ko- mutuna benzer. Eksiltme komutların- da ise “STEP-Iİ' komutu ile çalışıyor- muş gibi düşünün. INX Bu komutla X-register'inin içeriği bir artırılır. Sonuca göre N- ve Z-flag'- larının içeriği değişir. BASIC'te bir ör- nek verecek olursak: X-—X41 Diyelim ki artırmadan önce X-re- gister'inin içeriği $FF olsun. Değer olarak 256'yı gösteremeyeceğimiz için gene sıfıra döneriz. Yani kısacası X-register'ine bir toplanıyor. Fakat bu toplama sırasında C-flag'ı gözönüne alınmıyor ve sonucunda 255 geçilin- ce C-flag'ı da etkilenmiyor. Bu örnek- te sonuç olarak sıfır elde ettiğimiz için Z-flag'ı yakılır. INY Bu komut Y-register'ini bir artır- mak için kullanılır ve Y-register'inin kullanılması dışında geri kalan her şey yukarıdaki komutla aynıdır. Bu ko- mutun BASIC'te benzeri: Y-Y-t41 COMMODORE 64'ün ana işlem ünitesi 6510, akümülatör'ün içeriğini tek komutta bir artıran bir komuta sa- hip değildir. INC Bu komut belli bir adresteki byte'- ın içeriğini bir artırmaya yarar. Sonu- ca göre N- ve Z-flag'ları etkilenir. Bu komutun şimdiye kadar gördüğümüz diğer komut gruplarından farkı, belli bir hafızanın içeriğinin önce ana işlem ünitesinin içine okunması orada bir artırılması ve tekrar yerine yazılması- dır (Read-Modify-Write). Şimdiye ka- dar gördüğümüz komutlar ise bir ha- fızanın içeriğini ya okuyor, ya da ya- zıyordu; hiçbiri ikisini birden yapmı- yordu. INC komutu yürütülürken akümülatör'ün, X-register'inin ve Y- register'inin içeriği değişmez. BASIC'- te bu işi yapan satırı şöyle yazarız: POKE M, PEEK(M) 41 Burada M, artırılacak hafızanın ad- resini göstermektedir. ZI

Bu sayıdan diğer sayfalar: