Bu sayfadaki yazılar
Sayfanın metni
Sayfa 45
Carry flag 0. bite, 7. bitte Carry flag'a geçti. ROR (Rotate One bit Right) (Sağa bir bit rotate) Bu komut ROL'nin tam tersidir. Çünki Carry flag 7. bite, 7. bitte Carry flag'a geçer. İşte diagram:
Tİ) Aşağıdaki program FF (11111111) değerini 7F (011111111) ye rotate eder, sonuçta Carry set olur: co00 LDA #$FF
— CLC Co03 ROR coo4 — RTS
X ROL ve ROR, ASL ve LSR nin desteklediği adreslemeleri destekler. Sizin için bir problem çözme zamanı. Rotate ve shift'ten önce A registerinde 78 (01111000) değeri var ve Carry flag set. Rotation'- dan sonra A — ve Carry flag clear'dır. Bunlardan hangisini kullandım? Kullandığım komut ROL idi. İşte kullandığım
program: cooo LDA #$78 — SEC Co03 ROL Ccoo4 — RTS
Eğer cevabında ROL kullanmadınsa, fakat hatanı anlıyorsan devam et. Yoksa bu bölümü tekrar et.
LOJİK KOMUTLAR Lojik komutlar byte'ın bit'lerini değiştirir. Şimdiye kadar öğrenilen komutların aksine bit'te store ederler. Bu bölüm 6510 da kullanılan bütün lojik komutları izah eder.
AND (Memory'i A registeri ile AND et) Not: AND çarpmaya benzer bir işlem. Bu BASIC'teki AND komutu gibidir. A registeri AND komutunu kullanan tek registerdir. Komut her bir bit'i diğer bit'lerle teker teker mukayese eder. Eğer iki bit set (1) ise sonuç set (1). Aksi takdirde reset (0) dir. İşte bir örnek: 1 X 1 = 1 0 X 0 = 0 10111010 10001011
10001010 Yukarıdaki iki sayı AND edilmiştir. Alttaki sayı ise sonuçtur. Assembly dilinde AND kullandığın zaman A registeri daima sonucu muhafaza eder. İşte 45 CE (11001110) ile AND edilmesini gösteren örnek: C000 LDA #$45 C002 AND #$CE C004 RTS AND komutu bazı bit'leri off - 0 etmek için çok kullanışlıdır. Mesela 0. bit'i off yapmak için FE (11111110) ile AND et. 7. bit'i, 0. bit'i off yapmak istersen 7E (01111110) ile AND et. AND üzerine notlar: * Eğer sonuç 80 ile FF arasında ise Negative flag set olacaktır. * Eğer sonuç 00 ise Zero flag set olacaktır. * A registeri AND komutu için aşağıdaki adresleme modlarını destekler: IMMEDIATE (AND #$ZZ) ZERO PAGE (AND $ZZ) ZERO PAGE INDEXED (AND $ZZ,X)
ABSOLUTE (AND $ZZZZ)
ABSOLUTE INDEXED (AND $ZZZZ,X) veya (AND $ZZZZ,Y) INDEXED INDIRECT (AND ($ZZ,X)) INDIRECT INDEXED (AND ($ZZ),Y) ORA (Memory'i A registeri ile OR et) Bu BASIC'teki OR komutu ile aynıdır. İki numaranın her bit'i mukayese edilir. Eğer biri veya ikisi de set ise sonuç set olur. Not: Toplama gibi 1 + 0 = 1 0 + 1 = 1 İşte örnek: 10111001 00100101 10111101 OR komutu bazı bit'leri ON - 1 yapmak için kullanılır. İşte 028A bölgesinde 7. bit'i ON eden program: C000 LDA $028A C003 ORA #$80 C005 STA $028A C008 RTS 1 = ON 0 = OFF A registeri ORA komutunun neticesine sahiptir. 64'ler sayfa 45
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 44
2) KES ";BY$ Bi< (Z19R)THEN Bİ$-Bİ$4*"
SHIFTING (KAYDIRMA) VE ROTATION (DONDURME) Bu ve bunu takip eden bölümler binary sayı bilne dayanmaktadır. Yukarıdaki satırlar ile assembregisterdeki değerleri binary rakamlara çevirektir. Assembler programını yükle (Load) ve aşağıdakileri gir: Bu satırları yazdıktan sonra assember programını yeniden kaydet (Save) ASL (A registerini sola kaydır) ASL sola bir bit kaydırmayı sağlar. İşte diagram: Carı z o o Bu komutu kullandığın zaman O, O bite'e girer, © bit 1 bit'e, 1. bit 2. bit'e böylece 7. bit Carry flag'a girene kadar devam eder. Aşağıdaki örnek ASL komutu kullanılmadan önceki ve sonraki değeri gösterir: Rotation'dan önce: Carry flag —- O, döndürülecek memory — 1 0110 Rotation'dan sonra: Carry flag - 1, memory — 00101100 Burada 7. bit'teki 1 Carry flag'a aktarıldı. Aşağıdaki programda A registerini 81 10000001) den 2 (00000010) ye ve Carry flag set durumuna geçer: Coco LDA
co03 — RTS Co04 LDY #$03 Coo7 RTS
Yukarıdaki program Carry flag'ı 1'e set eder, Ü 7. bit (1 vardı) Carry flag'a shift edilmiştir. Bundan sonraki program memory bölgesini shift X değeri shift'ten önceki değerine sahiptir, ve teri shift'ten sonraki değerlere sahip olur: Cooo LDX & $AE Co02 STX $ FE ASL $ FE
CO06 LDY $ FE Cco08 RTS LSR (Logical Shift Right) (Sağa Lojik Shift) ASL'nin tam tersini yapar. Memory'yi bir bit sağa shift eder:
m n byte sağa 1 bit shift edilir. O, 0.cı bite, O.bit 1. bit'e ve en son 7. bit Carry flag'a geçer. İşte A registerini A7 (10100111) değerinde 53 (01010011) değerine shift ettiren program: Co00 LDA Co02 LSR
ASL aşağıdaki adreslemelerin hepsini sağlar: ACCUMULATOR (A REGISTER) ADDRESSING (ASL, LSR) ZERO PAGE ADDRESSING (LSR $ZZ, ASL $ZZ) ZERO PAGE INDEXED ADDRESSING (LSR $ZZ,X, ASL $ZZ,X) ABSOLUTE ADDRESSING (LSR $ZZZZ, ASL $ZZZZ) ABSOLUTE INDEXED ADDRESSING (LSR $ZZZZ,X, ASL $ZZZZ,X) ROL (Rotate One bit Left) (Sola bir bit rotate ROL aslında ASL gibidir, yalnız 0. bit'e 0 gireceğine Carry flag oraya shift edilir. 7 0 9 gösterildiği gibi Carry flag 0. bite geçer ve diğerleri de birer sola kayar. İşte A register'ın $81 (10000001) den $03 (00000011) değerine shift ettiren örnek program. Carry flag'ın rotation'dan önce set olduğuna dikkat et C=0 LDA #$81
SEC RO: RTS
A registeri sonucunda 3 değerini alır. cünk