Commodore sayı 13, sayfa 21

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 21

Zero flag'ına göre dallanma

Zero flag'ı yanık olduğu durumda dallanmak istiyorsak “branch on egual” komutunu kullanmamız gerekir, 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 komutuni kullanmamız gerekmektedir.

Negative flag'ına göre dallanma

N-flag'ı yanıkken sıçramak için on minus' yani BMI komumutunu kullanmamız gerekmektedir. “branch on plus' yani BPL komutunu kullanmamız gereklidir.

Overflow (taşma) flag'ına göre dallanma

Taşma varken dallanmak için *branch on overflow set” yani BVS komutunu taşma yokken dallanmak için BVC komutunu kullanmamız gerekir. Bu gruptaki komutlar genelde diğerlerine göre daha seyrek kullanılır. Aşağıdaki tabloda tüm şartlı dallanma komutlarını ve kod'larını bulacaksınız.

Komut Komut kodu $FO BNE $DO BCS $BO . BCC $90 BMI $30 BPL $10 BVS $70 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 komutlara sıçrama komutları denir. Bu komutlar herhangi bir şarta bağlı değildir 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 tipine de sahiptir. İndirekt adreslemeli sıçrama. Bu komutun hemen arkasından gelen adres varış adresi değildir. Bu adres, varış adresini gösteren bir göstergecin adresidir. Burada varış adresi peşpeşe gelen iki Byte'ta daha evvelden tanıdık olduğumuz göstergeç formatında (Lo-Byte, Hi-Byte) bulunur. 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ğinden 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ızca JMP komutuna aittir. Varış adresi olarak aletinizin mümkün olan tüm adreslerini belirtebilirsiniz. Aşağıdaki 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 sisteminde indirekt adresleme tipi oldukça yoğun şekilde kullanılmıştır. Hafızanın üçüncü sayfasında $0300 adresinden, $0330 adresine kadar sistem vektörleri yer almaktadır. Bu vektörlerin RAM'de bulunmasının oldukça fazla avantajları vardır. En basit örnek olarak bu vektörleri değiştirerek işletim sistemi ile ortak çalışan programlar yazabilme olanağı. Böylece bilgisayara 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 kullanabilmek için 6510'un özel sayma komutları vardır. Bu komutlar sayesinde gerek register, gerek hafıza birimlerinin içeriğini bir artırabilir veya bir eksiltebiliriz. Artırma komutları fonksiyon bakımından BASIC'teki NEXT komutuna benzer. Eksiltme komutlarında ise komutu ile çalışıyormuş gibi düşünün.

INX

Bu komutla X-register'ının 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 örnek verecek olursak:

X-—X-41

Diyelim ki artırmadan önce X-register'ının 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çilince C-flag'ı da etkilenmiyor. Bu örnekte sonuç olarak sıfır elde ettiğimiz için Z-flag'ı yakılır.

INY

Bu komut Y-register'ini bir artırmak için kullanılır ve Y-register'inin kullanılması dışında geri kalan her şey yukarıdaki komutla aynıdır. Bu komutun BASIC'te benzeri:

Y-Y*41

COMMODORE 64'ün ana işlem ünitesi 6510, akümülatör'ün içeriğini tek komutta bir artıran bir komuta sahip değildir.

INC

Bu komut belli bir adresteki byte'ın içeriğini bir artırmaya yarar. Sonuca 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 kadar gördüğümüz komutlar ise bir hafızanın içeriğini ya okuyor, ya da yazı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) 4 1

Burada M, artırılacak hafızanın adresini göstermektedir.

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