64'ler sayı 19, sayfa 25

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 25

CO04 PLA Co05 PLP

Birinci program tüm registerleri yığına yükler ve ikinci program ise onları geri alır. Yukarıdaki programı yazmak değil, anlamak önemlidir.

TOPLAMA VE ÇIKARTMA Bu bölümde 6510 (C64'ün microprocessor)nun matematik fonksiyonları ile ilgilidir. 6510 sadece çıkartma ve toplama yapabilir, ve bunlar A registeri kullanarak yapılır. Bu nedenle A registeri akümülatör (accumulator) diye adlandırılır.

ADC (Add to Accumulator with Carry) A registerine Carry ile ilave et. Şu ana kadar bütün adresleme modlarını öğrenmiş olmanız gerekiyor. Bundan sonra adresleme modlarını izah etmeyeceğim.

ADC komutu, değerin Carry flag ile A registerine ilave edilmesini sağlar. Örnek olarak eğer Carry flag 'set' ve A registerinde $40 değeri varsa ve ADC #$03 komutu kullanılırsa, A registerinin değeri $44 olacaktır. Çünkü kompüter $03 ile $40'ı toplayarak $43'ü elde edecek sonra Carry Flag ilave edilerek neticede $44 bulunacaktır. Eğer Carry Flag “Set” değilse (reset) A registerinin değeri $43 olacaktır. Toplamadan önce CLC (Clear the Carry) komutu kullanırsak $01 değeri eklenecektir.

İşte 02 ile 02 yi toplayan örnek program: Co00 LDA # $ 02 C002 CLC C0O03 ADC # $ 02 Co0O5 RTS

Yukarıdaki programda netice şüphesiz $04 olacaktır. İşte yine $02 ile $02'yi toplayan bir başka program, fakat aynı zamanda Carry flag 'set'tir: $C000 LDA #$02 $C002 SEC $C003 ADC #$02 $C005 RTS

Sonuç $05'tir, çünkü Carry flag set ($01). Eğer Carry flag clear olsaydı ve siz $06 ile $04'ü toplamış olsaydınız alacağınız cevap $0A olacaktır.

Bazen bu tür toplama yapmak işimize gelmeyebilir. Desimal sonuçları tercih edebiliriz. Desimal toplama, desimal flag'ı set etme yoluyla yapılabilir. SED (Set Decimal flag) komutu kullanılır. Desimal flag set ve toplama $07 + $05 = $12 şeklinde ($0C değilse) olacak. BASIC moduna dönmeden önce Decimal flag, clear'lanmalıdır.

Desimal toplamaya örnek:

Co00 SED Co01 LDA # $ O7 CLC C0O04 ADC # $ 06 Co06 CLD COO7 RTS

Bu A registerinin değerini 13 olarak verecektir. Eğer Decimal flag önceden set edilmeseydi A, $0D değerine sahip olacaktı.

ADC ÜZERİNE NOTLAR — Normal durumlarda toplama 255'i geçerse Carry flag set olacaktır. — Toplamanın sonucu 0 ise Zero flag set olacak. — Toplama 80 ile FF arasında ise Negative flag set olacak. — Toplamanın sonucu 7F'yi aşarsa Overflow flag set olacak.

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