Commodore sayı 14, sayfa 51

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 51

(4)

12. Altprogram Komutları

BASIC'ten de tanıdığınız çok önemli bir programlama tekniği olan altprogram tekniği makine dili bazında da mümkün. BASIC'te altprogramı çağırmak için GOSUB komutu, altprogramdan geri dönmek için ise RETURN komutu kullanılır. Peki, bir alt programı çağırmak, GOTO veya JMP gibi doğrudan sıçrama komutlarından nerede farklılaşırlar?.. Bir altprogram çağırıldığında BASIC yorumlayıcısı veya ana işlem ünitesi daha sonra RETURN komutuna rastladığında geri dönebilmek için çağıran komutun yerini aklında tutmak zorundadır. Gerek BASIC yorumlayıcısı gerek ana işlem ünitesi bu işlemi otomatik olarak yapmaktadır. Fakat, biz gene de ne olduğunu daha yakından inceleyelim. Ana işlem ünitesinin RETURN komutuna rastladığı zaman geri döneceği yeri bulabilmesi açısından altprogram çağırılırken, geri dönüş adresi bir yere saklanır. Bu yer özel olarak rezerve edilmiş bir hafıza bölgesidir. Bu bölgeye yığın (stack) adı verilir. Bu yığının yeri bellidir ve $0100 adresinden $01FF adresine kadar uzanır (256'dan 511'e kadar). Ana işlem ünitesine o anda geçerli bilginin bu yığının neresinde olduğunu hatırlatması için stackpointer adlı yığın göstergecini kullanır. Bu göstergeci yazımızın başında kısaca tanımıştık. Şimdi, bir altprogram çağırıldığında neler oluyor; yakından görelim. Ana işlem ünitesi o anki adresi alır ve iki Byte'a ayırır. Adresin yüksek değerli byte'ı $100 artı SP'ye (stackpointer) saklanır. SP bir eksiltilir. Arkasından adresin düşük değerli byte'ı $100 artı SP'ye saklanır. SP'nin değeri bir kere daha eksiltilir. Artık basit bir sıçrama işlemiyle altprograma gidilir. Diyelim ki ana işlem ünitesi RETURN komutuna rastladı, geri dönmesi gerekiyor. Bu sefer tam tersi iş-

Ayhan KALAYLIOĞLU ğından alınır. Artık program sayacı, altprogramı çağırma komutunun hemen arkasındaki adresi göstermektedir, programın akışı devam edebilir. Yığının çalışmasını bir kere daha inceleyelim. Yığına bir şey saklanacağı zaman önce bilgi yığına yazılıyor, arkasından yığın göstergeci bir eksiltiliyor. Yığından bir byte geri alınırken, önce SP bir artırılıyor, arkasından değer yığından okunuyor. Görülmektedir ki yığın yukarıdan aşağıya doğru çalışıyor ($1FF'ten $100'a doğru). Başta ters gelen bu olay sizi şaşırtmasın. İşlem gerçekleşir. SP'nin değeri bir artırılır ve yığından bir byte alınır ($100 + SP adresli). Bu byte, program sayacının düşük değerli byte'ı olacak. SP bir kere daha artırılır ve program sayacının yüksek değerli byte'ı da yığından alınır. Bir örnek yığında gelişen olayları daha anlaşılır hale getirecektir.

$C480 JSR$2000 SP -FA (SOLFA)—$C4 SP —-SP-I ($01F9) — $82 $P —-SP-I SP — $F8

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