【スタックメモリとは?】
スタックメモリとは独立に備えられている小さなメモリで、何に
使われるかというと、サブルーチンをCALL命令で呼んだ時と、
割り込みが入った時の戻り番地の格納用として使われます。
【スタックメモリの構造と動作】
スタックメモリは13ビット幅のPCレジスタ格納用のメモリが
8個だけで出来ています。
その構造は下図のようになっていて、今格納されている場所
をスタックポインターと呼ばれるポインターレジスタが指して
います。このスタックポインターは内部だけで使われ命令で
読み書きすることはできません。
動作はまず、CALL命令が実行された時と、割り込みが受け
付けられて強制的に4番地にジャンプする時、PUSH動作と
いって戻る場所(CALL命令の次、割り込みの入った次)のアド
レスをスタックポインターが指しているスタックメモリの場所に
書込みます。そしてスタックポインターは+1されます。
その後、POP動作といって、サブルーチンや割り込み処理の
最後でRETURNする時、スタックポインターを−1することで、
直前のスタックから戻りアドレスを取り出しPCレジスタに上書
きします。これで元の場所に戻ることが出来ます。
<注意>
ここで、スタックの深さは8レベル(8このメモリしかない)なの
で、サブルーチンの中でまたサブルーチンを呼ぶ(ネスティン
グと呼ぶ)ということを繰り返すと、スタックメモリが足りなく
なってしまいます。
その時は、スタックポインターはサイクリックに回るので、古い
戻り番地は上書きされてしまい、もう元に戻ることは出来なく
なってしまいます。
従って、
《サブルーチンのネスティングは余り多用してはダメ》
ということになります。せいぜい3回程度のネスティングに
抑えておくのが安全。