1 Nisan 1987 Tarihli Commodore Gazetesi Sayfa 51

1 Nisan 1987 tarihli Commodore Gazetesi Sayfa 51
Metin içeriği (otomatik olarak oluşturulmuştur)

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

Bu sayıdan diğer sayfalar: