NightNetwork - yazılım, yazın, verim vs.

Bölüm 14. Yığıt (Stack)

İçindekiler

14.1. JSR ve RTS Komutlarının Stack Kullanımı

Stack (Yığıt) kavramı Bilgisayar bilimleri alanından gelen soyut bir veri yapısıdır. Öyle ki, temel amacı içine bi takım objeler saklamak olan bu yapının temel özelliği içine son koyduğunuz objeyi ilk geri almanızdır. Yani bir stack'iniz varsa iki işlem yapabilirsiniz: PUSH yani stack'e obje saklamak, ve POP yani stack'ten obje almak. Başka türlü bir erişim yoktur. Dolayısıyla demin soylediğimiz gibi stack'e arka arkaya a, b ve c objelerini push ederseniz, ardından pop ettiğinizde elinize c objesi gelir. Bir daha pop ederseniz b objesini alırsınız. Yani son giren ilk çıkar (last in first out:LIFO)

Stack yapısı daha sonraları CPU mimarilerinde kullanılmaya başlamıştır. Pek çok CPU bellekte bazı bölgeleri stack olarak kullanır. Bu amacla genelde CPUlarda stack pointer adı verilen registerler olur. Bu registerlerin neye yaradığını anlatacağım.

6510'da da $0100 - $01ff arası bölge stack olarak kullanılır. 6510'un içinde Stack Pointer (kısaca SP) adı verilen 8 bitlik bir register bulunur. Bu register ilk başta $ff değerindedir. yani stackin son adresini gösterir. Bu esnada stack boştur yani içinde saklanan hiç bir bayt yoktur. Eğer bir bayt push edilecek olursa stack bölgesinde (başka bir deyişle stack page'de) SP'nin gösterdiği adrese ($01ff) kopyalanır. Hemen ardından SP'nin değeri otomatik olarak bir azalır ve $fe olur. Böylece bir sonraki push komutunda push edilen bayt $01fe adresine kopyalanır.

Pop komutu geldiğinde ise SP bir artırılır ve böylece son push edilen baytı geri döndürür. Dikkat ederseniz, stack içine obje push edildikçe objeler page'in sonundan geriye doğru stack page'e kopyalanır ve bu esnada SP hep geriye doğru ilerler. Pop edildikçe de SP page sonuna dogru ilerler ve boylece stack boşalmış olur.

Programcı ısterse stack bölgesini geçici olarak veri saklamak için kullanabilir. Bunun için iki komut sağlanmıştır: PHA ve PLA

PHA akümülatördeki değeri stacke push etmeye yarar. Komuttan sonra akümülatördeki değer hala akümülatörde kalmaya da devam eder. PLA ise stack'ten son push edilen değeri alıp akümülatöre yükler.

NightNetwork - 2009