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に変更すると、再帰によりスタック領域を超えて実行エラーになることが確認できます。
(スタックオーバーと呼びます)