Bu sayfadaki yazılar
Sayfanın metni
Sayfa 33
ABSOLUTE ADRESLEME Her 3 register de bu çeşit adreslemeyi kıyas için kullanabilir. İşte her biri için örnek: C000 LDA #$00 C002 CMP $0286 C005 RTS
Cco00 LDX # $ 00 C002 CPX $ DO15 coo5 RTS
C000 LDY #$00 CPY $0291 C005 RTS Birinci örnekte A registerini $0286 bölgesi ile mukayese ediyor. İkinci örnekte X registeri sprite enable flagın kontrol edildiği $D015 bölgesi ile mukayese ediliyor. Sonuncu programda ise Y registeri $0291 bölgesi ile mukayese ediliyor.
ABSOLUTE İNDEXLİ ADRESLEME Sadece A registeri bu tip adresleme kullanarak kıyas yapar. X registeri aşağıdaki örnekte de görüldüğü gibi index olarak kullanılır: C000 LDX #$77 C002 LDA #$64 C004 CMP $0200,X C007 RTS Yukarıdaki örnek A registerini keyboard buffer'ın ilk bölgesi ($0277) ile mukayese eder. Y registeri de index olarak kullanılabilir.
İNDEXLİ DOLAYLI ADRESLEME Bu adresleme için sadece A registeri kullanılabilir. Aynı zamanda sadece X registeri index olarak kullanılabilir. İşte X registerinin bir index olarak kullanıldığını görebileceğiniz örnek bir program: C000 LDY #$0D C002 STY $FB C004 LDY #$03 STY $FC C008 LDX #$1B C00A LDA #$20 C00C CMP ($E0,X) C00E RTS
Y registerini $0D ile yükler. C002: Y registerini FB bölgesine depolar. C004: Y registerini $03 ile yükler. Y registeri FC bölgesine depolanır. C008: X registerini $1B ile yükler. C00A: A registerini $20 ile yükler. C00C: Kompüter FB bölgesinden LOW byte ve FC bölgesinden HI byte alır ve $030D adresini oluşturur ve bu adresteki değeri A registeri ile mukayese eder. C00E: Kompüteri BASIC'e döndürür.
DOLAYLI İNDEXLİ ADRESLEME Sadece A registeri bu tip adresle mukayesede kullanılabilir. Bu defa Y registeri index olarak kullanılmıştır: C000 LDX #$00 C002 STX $FD C004 LDX #$04 C006 STX $FE C008 LDY #$09 C00A LDA #$10 C00C CMP ($FD),Y C00E RTS
C000: X registerini $00 ile yükler. C002: X registerini FD bölgesinde depolar. C004: X registerini $04 ile yükler. C006: X registeri FE bölgesinde depolanır. Y registerini $09 ile yükler. C00A: A registerini $10 ile yükler. C00C: Kompüter FD bölgesinden aldığı LOW byte ve FE bölgesinden aldığı HI byte ile $0400 adresini oluşturur. Sonra adrese Y registerinin değerini ilave eder. Neticede $0409 olur. Sonra A registeri ile $0409 bölgesindeki değer karşılaştırılır.
Bu konunun son programı idi, şimdi bir problem.
A registeri bilinmeyen bir değere sahiptir. 34 sayısı ile mukayese edildiğinde Carry flag set, 55 sayısı ile mukayese edildiğinde Negatif flag set olmaktadır. Aşağıdaki cevaplardan birini seçiniz: A. — A registerinin değeri 34'ten küçük. B. — A registerinin değeri 35-54 arası. C. — A registerinin değeri 55'ten büyük. Cevap B'dir. Eğer cevabı anlıyamadıysan son iki sayfayı yeniden okumadan gelecek bölüme geçme.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 32
MUKAYESE (COMPARE) KOMUTLARI
Bu bölüme başlamadan önce assembler programına ilave etmeniz gerekiyor: Bunları yazdıktan sonra tekrar SAVE et. Bu satırlar P registerinin değerini bulacak ve her flag'- ın değerini yazacaktır. X, Y ve A registerlerinin her biri için toplam3 mukayese komutu vardır. X registeri için CPX (ComPare X), Y registeri için CPY ve A registeri için CMP dir.
IMMADIATE (DOLAYSIZ) ADRESLEME Bu # sembolü ile yapılan adreslemedir. A registeri için kıyas komutu 'CMP 67'. Bu A registeri ile 67 sayısını mukayese eder. Kıyas komutunın neticesi aşağıda olduğu gibidir: 1- Eğer register mukayese edilen veri (data) den küçükse Negatif (N) flag set (1) olur. 2- Eğer register ve data eşitse Zero ve Carry flaglar set (1) olacaktır. 3- Eğer register mukayese edilen datadan büyükse Carry flag set (1) olacaktır. Yukarıdaki noktalar kıyas komutları için önemlidir. İşte dolaysız adresleme kullanmaya bir örnek: Co00 LDA # $ 56 CMP # $ 70 RTS Bu programı çalıştırdıktan (execute) sonra Negatif flag'ın set (1) durumunda olduğunu göreceksin. Çünki A registeri data (70)dan daha küçük. İşte CPX kullanılan bir başka örnek: LDX # $ 67 C002 CPX # $ 67 Co04 RTS Program çalıştırıldığı zaman Carry ve Zero flag'lar set (1) olacak, çünki X registeri data (67) ya eşit. İşte CPY kullanılan bir başka örnek:- Cco00 LDY # $ 60 C002 CPY # $ 20 Co04 RTS Burada sadece Carry flag set (1) Y registeri data (20)dan büyüktür.
Dr. Ali Özçelik
ZERO PAGE ADRESLEME Bütün registerler Zero Page üzerindeki bütün bölgelerle mukayese edilebilirler. Önce bakacağımız CMP: C000 LDX #$09 STX $FB C004 LDA #$06 C006 CMP $FB C008 RTS A registeri FB bölgesindeki değerden az, dolayısıyle Negatif flag set (1) dir. İşte CPX ve CPY için örnekler: C000 LDA #$57 C002 STA $FD C004 LDX #$58 C006 CPX $FD C008 RTS
C000 LDA #$30 C002 STA $FE C004 LDY #$30 CPY $FE C008 RTS Birinci programda Carry flag set olur, çünki X registeri data ($57)'den büyüktür. İkinci programda hem Carry flag ve hem de Zero flag set olur, çünki Y registeri data ($30)'ya eşit.
ZERO PAGE INDEXLİ ADRESLEME Sadece A registeri Zero Page indexli adreslemede kıyas komutuna sahiptir. X registeri index olarak kullanılır: C000 LDX #$10 C002 LDA #$0F C004 CMP $B7,X C006 RTS Program A registerini $B7+X bölgesine mukayese eder. $B7 bölgesi reverse / non-reverse print'i kontrol eder. Eğer 01'e eşitse kompüter reverse olarak print eder. Eğer reverse print yapıyorsan ve yukarıdaki programı çalıştırıyorsan (execute) Carry ve Zero flaglar set (1) durumuna geçecektir.