64'ler sayı 19, sayfa 24

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 24

REGISTERLERİ YIĞINLARA DEPOLAMA (Storing registers on the stack) Bildiğiniz gibi Commodore 64 makine kodu ile çalışırken 3 adet register olduğundan kısıtlıyız. Mutlaka 'bunları hafızaya depolarız transfer' diye düşünüyorsunuzdur. Bazı durumlarda bunlar da yeterli olmayabilir.

Bunun altından registerleri yığınlara depolayarak kalkarız. Bu bölümde registerlerin yığınlara nasıl depolandığını ve nasıl geri alındığını göreceğiz..

PHA, A registerini yığın üzerine bastır. A registerini yığın üzerine bastırdığın zaman değeri Stack Pointer (SP) tarafından gösterilen bölgeye (adrese) depolanır ve SP azaltılır, ki bundan sonraki boş byte'ı gösterirsin. Örnek: Eğer SP= $89 ise ve A registerini yığına bastırdığında A registerinin değeri $0189 bölgesine transfer edilecek SP $88'e inecektir.

PLA, A registerini yığından çek (Pull the A register from the stack). A registerini yığına bastırdıktan sonra bu komutu yığın üzerindeki A'ya geçirmek için kullanıyorsun. Misal olarak, eğer SP= $92 ise ve PLA komutunu kullanıyorsan, A registeri $0193 bölgesindeki değerle yüklenecektir. SP= $93 olacaktır.

İşte A registerini yığına yükleyen ve tekrar yığından geri alan bir örnek: LDA # $ 30 Co02 PHA CO03 LDA # $ 00 5 STA $ DO20 Co08 PLA Co09 RTS

PHP ve PLP PHP, P registerini stack'a (yığına) bastır (Push the P register onto the stack) demektir. PHP, PHA komutunda olduğu gibi işlev görür. PLP, PLA komutunda olduğu gibi işlev görür (Pull

Dr. Ali Özçelik

the P register from the stack) demektir. İşte P registerini yığına yükleyen ve geri alan örnek bir program: Co00 LDA # $ 00 Co02 PHP CO03 LDA # $ 80 CO0O5 STA $ 028A Co08 PLP Co09 RTS

TXS ve TSX TSX, yığın göstergecini X registerine transfer et (Transfer the Stack pointer to X register) demektir. TXS, X registerini yığın göstergecine transfer et (Transfer the X register to the Stack pointer) anlamına gelmektedir. Her ikisi de yığın göstergecinin ne olup olmadığını anlamak için kullanılır.

NOT — Yığınlara numaraları basarken bunları geri almayı unutma. Eğer yığından değerleri almazsan RTS komutuna geldiği zaman sistem donabilir (crash). — Yığından çekilen numaralar konuluş sırasının tersine çekilir (son giren ilk çıkar). Örnek olarak, yığına konan numaralar 1,2,3,4,5 ve 6 ise, bunlar alınırken aşağıdaki sıra ile alınacaktır: 6,5,4,3,2,1 (son giren ilk çıkar, last in-first out). İşte size diğer bölüme geçmeden önce düşündürücü bir problem: Bütün registerleri yığına transfer et ve geri al. $C000 PHP PHA $C002 TXA $C003 PHA $C004 TYA $C005 PHA

CO00 PLA TAY C002 PLA TAX

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