Makine Diline Merhaba (4) 12. Altprogram Komutları BASIC'ten de tanıdığınız çok önemli bir programlama tekniği olan altprogram tekniği makine dili bazın- da da mümkün. BASIC'te altprogra- mı ç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 komut- larından nerede farklılaşırlar?.. Bir altprogram çağırıldığında BASIC yo- rumlayıcısı veya ana işlem ünitesi da- ha sonra RETURN komutuna rastla- dığında geri dönebilmek için çağıran komutun yerini aklında tutmak zo- rundadır. Gerek BASIC yorumlayıcısı gerek ana işlem ünitesi bu işlemi oto- matik olarak yapmaktadır. Fakat, biz gene de ne olduğunu daha yakından inceleyelim. Ana işlem ünitesinin RETURN ko- mutuna rastladığı zaman geri dönece- ği yeri bulabilmesi açısından altprog- ram çağırılırken, geri dönüş adresi bir yere saklanır. Bu yer özel olarak re- zerve edilmiş bir hafıza bölgesidir. Bu bölgeye yığın (stack) adı verilir. Bu yı- ğının yeri bellidir ve $0100 adresinden $O1FF adresine kadar uzanır (256'dan S11'e kadar). Ana işlem ünitesine o anda geçerli bilginin bu yığının nere- sinde olduğunu hatırlatması için stack- pointer adlı yığın göstergecini kulla- nır. Bu göstergeci yazımızın başında kısaca tanımıştık. Şimdi, bir altprog- ram çağırıldığında neler oluyor; ya- kından görelim. Ana işlem ünitesi o anki adresi (42) alır ve iki Byte'a ayırır. Adre- sin 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 alt- programa gidilir. Diyelim ki ana işlem ünitesi RE- TURN komutuna rastladı, geri dön- mesi gerekiyor. Bu sefer tam tersi iş- Ayhan KALAYLIOĞLU ğından alınır. Artık program sayacı, altprogramı çağırma komutunin he- men arkasındaki adresi göstermekte- dir, programın akışı devam edebilir. Yığının çalışmasını bir kere daha in- celeyelim. Yığına bir şey saklanacağı zaman önce bilgi yığına yazılıyor, ar- kasından yığın göstergeci bir eksilti- liyor. Yığından bir byte geri alınırken, önce SP bir artırılıyor, arkasından de- ğer yığından okunuyor. Görülmekte- dir 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şırtma- Commodore lem gerçekleşir. SP'nin değeri bir ar- tırılır ve yığından bir byte alınır (S100 4 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ı- sın. Bir örnek yığında gelişen olayla- rı daha anlaşılır hale getirecektir. $C480 JSR$2000 SP - FA ($SO1FA)—$C4 SP —-SP-I ($01F9) — $82 $P -SP-I SP - $F8 51