64'ler sayı 18, sayfa 32

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 32

CONDITIONAL BRANCHING Şartlı dallanma BASIC'teki IF..... THEN... komutuna benzer. Şu şekilde çalışırlar örnek: Negatif flag set (1) ise dallan (branch to). Bu bölümde değişik şartlı dallanma anlatılmıştır.

ide 8

BCC (Branch on Carry Clear) BCC komutu Carry flag Clear “reset (0)” olduğu zaman dallanma yapacaktır. BCC komutu için örnek: 'BCC $C009' dur. Carry flag clear (reset) ise C009 adresine dallanacak, aksi takdirde bir sonraki komuta geçecektir. Bu tip dallanmaya adresleme ismi verilir. Bu, o andaki adresine belirli bir uzaklıkta olduğunu gösterir.

Bu uzaklık ne kadar dallanma yaptığını gösterir. Dallanma komutları 80 bölge (decimal 128) geri ve 7F bölge (decimal 127) ileri ve geri dallanabilir. Yani 80 geri, 7F ileri dallanabilir. Bu demek oluyor ki BCC $C000 komutunda, C000 bölge dışı kalıyor. Eğer komut $C07F olsaydı, C000 bölge içi olacaktı. Eğer BCC $C000 olsaydı C090 adresi bölge dışı, eğer BCC $C010 olsaydı C090 bölge içi olacaktır.

Bu konuya kafanızı fazla takmayın, çünkü Assembler bölge dışında olduğunuzu haber verecektir. Bölge dışındaysanız, assembler 'BAD BRANCH” mesajını verecektir.

Aşağıdaki program A resigterini bir sayı se eder, eğer A registeri sayıdan azsa yapar. Co00 LDA # $ 20 CMP # $.30 C004 BCC $ COO7 Co06 RTS COO7 STA $ DO20 COOA RTS

Dr. Ali Özçelik

C000: A registerini 20 ile yükler. A registeri 30 ile mukayese edilir, bu Negatif flag'ı set eder.

C004: C007 bölgesine dallanma yapılır, çünkü Carry flag clear (reset). Eğer dallanma yapılmasaydı kompüter BASIC'e dönecekti. C007: Bu A registerini D020 bölgesine saklar, bu da bordür rengini değiştirir. C00A: Bu kompüteri BASIC'e döndürür.

BCS (Branch on Carry Set) Bu komut BCC komutunun tam tersidir. Carry flag set (1) iken dallanma yapar:

CO00O LDK $ 0286 CPX # $ 01 Co05 BCS $ COO7 RTS LDA # $ 00 COOA STA $ 0286 COOD RTS

Yukarıdaki örnekte A registeri cursor rengi ile yüklenmiştir. Eğer eşit veya 01'den büyük ise C007 adresine dallanma yapılır ve 00'a eşitlenir.

BNE (Branch on Result not Zero) Bu komut, eğer Zero flag 'set' değilse dallanma yapar. Bir sonraki örnek zaman geciktirme (time delay)dir, ki çoğu makina kodlu oyun programlarının çoğunda kullanılır : C000 LDX #$00 C002 LDY #$00 C004 DEX C005 BNE $C004 C007 DEY C008 BNE $C004 C00A RTS

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