Bu sayfadaki yazılar
Sayfanın metni
Sayfa 26
— BASIC moduna dönmeden önce Decimal flag'ı reset et, aksi taktirde kompüter crash olacaktır. — ADC aşağıdaki adresleme modlarında kullanılabilir.
IMMEDIATE (ADC #$ZZ) ZERO PAGE (ADC $ZZ) ZERO PAGE INDEXED (ADC $ZZ,X) ABSOLUTE (ADC $ZZZZ) ABSOLUTE INDEXED (ADC $ZZZZ,X) INDIRECT INDEXED (ADC ($ZZ),Y) Yukarıdaki ZZ iki digit rakam, ZZZZ 4 digit hex rakam demektir.
SBC (Subtract from a Register with Borrow) Registerden, borç hanesi ile beraber çıkarma. SBC komutu A registerinden çıkarma yapmak için kullanılır. Eğer Carry flag set değilse, A registerinden extra bir $01 alınır. Eğer Carry flag set ise, Carry flag çıkarma sırasında ihmal edilir.
İşte bir örnek. Dikkat et, ihmal edilmesi için Carry flag set durumunda: CO00 LDA # $ 40 C002 SEC SBC # $ 20 Co05 RTS
A registerindeki sonuç $20, çünkü $40-$20 = $20'dir. Carry clear olsa idi A = $1F olacaktı, çünkü extradan $01 çıkarılmış olacaktır. $40-$20-$01 = $1F
SBC desimal modda da kullanılabilir. Decimal flag set ise, SBC komutu desimal çıkarma yapar. Örnek: Decimal flag set ise 20-01 = 19 olacak, 1F değil. Desimal çıkarmaya bir örnek:
CO00 LDA # $ 60 C002 SED SEC SBC # $ 15 Co06 CLD COO7 RTS
Yukarıdaki program 60'dan 15'i çıkartır. Decimal ve Carry flag'lar set olduğundan sonuç A = 45 olacaktır.
SBC ÜZERİNE NOTLAR — Çıkarmanın sonucu Zero veya pozitif ise Carry flag set'tir. — Çıkarma sonucu 00 ise Zero flag set olacaktır. — Sonuç 00'dan az ise negatif flag set olacak, bu durumda A register'inin 7.ci bit'i de set olacaktır. — Çıkarma -80'den az ise Overflow flag set olacaktır. — SBC aşağıdaki adresleme modlarını kullanabilir:
IMMEDIATE (SBC #$ZZ) ZERO PAGE (SBC $ZZ) ZERO PAGE INDEXED (SBC $ZZ,X)
ABSOLUTE (SBC $ZZZZ) ABSOLUTE INDEXED (SBC $ZZZZ,X veya SBC $ZZZZ,Y) INDEXED INDIRECT (SBC ($ZZ,X)) INDIRECT INDEXED (SBC ($ZZ),Y)
İşte size bu bölümü kavradığınızı anlamak için bir problem: X ve Y register'lerini toplayan ve bu toplamı da A register'ine ilave eden bir program yaz. Aşağıdaki komutları kullanabilirsiniz: PHA, PLA, CLC, RTS, TXA, TAX, STY $FE, STX $FE, ADC $FE. Bunlardan herbirini bir kereden fazla kullanabilirsiniz. Bu komutları kullanarak yapamıyorsan kendi istediğin komutları kullan. İşte cevap:
Co00 PHA Co01i TXA C002 STY $ FE CO04 CLC ADC $ FE COO7 TAX CO08 PLA C009 STX $ FE CO0OB CLC | COOC ADC $ FE | COOE RTS
Bu problemin tek cevabı değil, bundan başkada cevap bulunabilir.
Klavyeyle gezinmek için ← ve → tuşları.