GR0をGR1で割った商をGR2,余りをGR0へ設定するサブリーチン DIVの例です。
int GR0,GR1,GR2,GR3;
void DIV()
{
GR3=1;
if(GR0>=GR1){
GR0-=GR1;
GR2++;
DIV();
}
}
main()
{
GR0=15;
GR1=7;
GR2=0;
DIV();
}
上記のC言語のイメージで、簡単に引き算の繰り返しですが、再帰する作り方になっています。
再帰とは、サブルーチンの中で、自身のサブルーチンを呼び出す処理で、
この例の太字のように、DIVの中で、CALL DIV と呼び出す処理の形態になります。
DIVを呼び出すごとのスタックの変化を注目ください。
スタックサイズを小さくしています(4語長)。再帰によって、全てのスタック領域を使う再帰まで進むと暴走します。
分母を7から2に変更すると、再帰によりスタック領域を超えて実行エラーになることが確認できます。
(スタックオーバーと呼びます)