Commodore sayı 49, sayfa 48

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 48

ONE OR ZERO!

rin statü registerine yazılması sonucu bilgisayarımız kilitlenebilir. SP yine bir azaltılır. TSX: Bu komut “Transfer Stack-Pointer into X” kelimelerinden türetilmiştir ve “Stack göstergesini X'e transfer et” anlamındadır. Burada SP herhangi bir değişikliğe uğramazken, X registeri $00-$FF arası değerlere sahip olabileceği için statü registerindeki N ve Z bayrakları değişebilir. TXS: TSX'in tam ters işlevine sahip olan bu komut X-Registerini stack göstergesine aktarmaktadır. Bu şekilde stack'daki istediğimiz bir değeri akümülatöre yükletebiliriz. Yukarıda yer alan tüm komutlar birer baytlıktır. Stack bölgesi devamlı bilgisayar açıldıktan sonra çalıştırılmış Assembler programların izlerini taşıyacağı için bazı durumlarda gereksiz baytların silinmesi gerekebilir. Aşağıdaki program SP'nin gösterdiği değerin altındaki 32 bayt'a sıfır değerini yazmaktadır. 8000 LDA #$00 8002 TSX Stack göstergesi X registerinde saklanmaktadır. 8003 LDY #$20 8005 PHA Stack'a sıfır değerini gönderiyoruz. 8006 DEY 8007 BNE $8005 8009 TXS 32 defa sıfır değeri yazıldıktan sonra X-registerinde sakladığımız eski stack göstergesini gönderiyoruz. 800A BRK Stack ile çalışırken işleri fazla karıştırmamak için PHA-PLA, JSR-RTS gibi komut çiftlerinin sayısına dikkat etmelisiniz. Özellikle stack'ın tam olarak bilgisayar tarafından nasıl yorumlandığını bilmeden TSX-TXS komutlarını kullanmamanızı tavsiye ederiz. Dolaylı adresleme: Stack bölgesini ve stack komutlarını tanıdıktan sonra yazımızın başında kısaca değindiğimiz dolaylı adreslemeye tekrar dönmek istiyoruz. Şimdi bu yöntemi geçen sayıda öğrendiğimiz indeksli adresleme ile birleştirip dolaylı-indeksli adreslemeyi göreceğiz. Aşağıdaki satıra bir göz atalım: LDA ($FA), Y Buradaki parantez işaretleri bize JMP komutunu hatırlatmaktadır ve hemen hemen aynı amaçla kullanılmıştır. $FA ve $FB adresleri vektördür ve buralarda asıl işlenecek adres yer almaktadır. Bu adreslerin şu değerleri aldığını farz edelim: $FA = 01 $FB = 48

$FB = 80 ve Y-registerinde de 5 olsun. Sonuçta vektörümüz $8001'i göstermektedir. Yukarıdaki şekliyle LDA komutunu bilgisayar yorumlarken $8001 değerine Y-registerinin değerini de ilave eder ve $8006 adresini akümülatöre yükler. Bu son öğrendiğimiz adresleme yöntemindeki tek sınırlama vektörün (parantez içindeki sayı) sıfırıncı sayfada olması gerektiğidir. Şu ana kadar öğrendiğimiz komutlardan ADC, CMP, LDA, SBC ve STA bu yöntemle adreslenebilirler. (Resim 2) Dolaylı-indeksli adresleme konusunu kapamadan önce yine bir örnek programı inceleyeceğiz. Bu program tüm ekran değerlerini ($0100'dan başlayan) $E000 adresine yazacaktır. Öncelikle sıfırıncı sayfada iki vektör belirleyelim: $FA/$FB ekran adreslerini ve $FC/$FD transfer edilecek adresleri ($E000 ve sonrası) göstersin. 1000 LDA #$00 1002 STA $FA 1004 STA $FC Bunlar iki vektörün alçak baytları idiler. Şimdi de yüksek baytlar: 1006 LDA #$04 1008 STA $FB 100A LDA #$E0 100C STA $FD Bu şekilde vektörler belirtilmiş oldu. Şimdi her biri 256 bayt olan 4 blok transfer edilmelidir. Blok sayısını X-registerine yazalım: 100E LDX #$04 100F ... Daha sonra Y-Registerine de sayacı (indeksi) yükleyelim: 1010 LDY #$00 Şimdi gerçek taşıma döngüsü başlayabilir: 1012 LDA (FA), Y 1014 STA (FC), Y 1016 DEY 1017 BNE $1012 Y-registeri ilk başta 0 değerine sahip olduğu için DEY komutuyla geri sayacaktır ve bu şekilde ilk blok taşınacaktır. İkinci blok için vektörlerin yüksek baytlarını arttıralım: 1019 INC $FB 101B INC $FD

Bye — LDA dolaylı X 2 AL 161 6 2 Bi 177 STA dolaylı X 2 Bı 129 6 - İz dolayıy 2 sı — dolayıx 2 61 87 6 NVZC nn ma ls NVZC — — 2" Et 226 6 dolayıy 2 Fİ NVZC CUP dolayıx — 2 — 188 6 NZC 6 NZC PHA — e me — ie ia PHP a 1 08 e. — G0 TSX a 1 BA 186 2 NZ TXS — 1 SA 154 2 -

Resim 2: Dolaylı olarak adreslenen komutlar

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