Commodore sayı 49, sayfa 47

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 47

FF IFC

100 ce bunların tümünün “son giren ilk çıkar” prensibine dayandığını belirtelim. PHA: Bu komut ile akümülatörün değeri stack'a yazılmaktadır (Push Accumulator - Akümülatörü kaydet). Bu işlem sırasında SP bir basamak aşağıya iner ($FF'den geri sayar) ve akümülatörün değeri herhangi bir değişikliğe uğramaz. Dolayısıyla statü registerindeki bayraklar da etkilenmez. PLA: “Pull Accumulator” veya “akümülatörü çek”. Burada tamamen yukarıdaki işlemin tam tersi gerçekleşir: Stack'ın en üstündeki değer akümülatöre yazılır. Bu işlem sonucunda stack'da bir baytlık yer açılır ve SP bir artar. Akümülatöre yüklenen değer sıfır veya negatif bir sayı olabileceği için statü registerindeki N veya Z bayrağı değişikliğe uğrayabilir. PHP: Bu komut “Push Processor status” yani “Statü registerini yaz” anlamına gelmektedir. Statü registeri bu şekilde stack'a yazılarak o anki bayrak konumları saklanabilir. PHA'da olduğu gibi SP bir azalır, statü registeri değişmez. PLP: “Pull Processor status” veya “statü registerini al”. Bu komut yukarıdaki PHP'nin tam tersidir ve stack'ın en üst basamağındaki değeri statü registerine aktarır. Burada çok dikkatli davranılmalıdır, zira yanlış bir değerin 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

Resim 1: Değerlerin Stack'a yerleşmesi

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