サブルーチン(副プログラム)とは、サブリーチンは、ある目的の処理に名前(ラベル)を付けたものです。
(C言語なら関数で、Javaならメソッドに対応する呼び名です。)
サブルーチンは、CALL命令でラベル名(アドレス)を指定し、実行位置をそのラベル位置へ移動させます。
これだけでは、JUMP命令と同じです。
違うのは、サブルーチンの処理が終わったらCALLした時の処理の流れに戻れるように、
戻る時に使うアドレスをスタックに記憶することです。
サブルーチンでは、処理の最後にRET命令を書きます。
この命令により、スタックに記憶される『戻りアドレス』を取り出して、CALL直後の命令に実行位置を戻します。
次のプログラムの(1)→(2)→(3)→(4)→(5)と進む過程で、スタックとスタックポインタの変化を確認ください。(スタック確認用のプログラムで、処理内容に意味がないが・・・)
CALLのサブルーチン呼び出し命令はジャンプ以外に戻り番地をスタックに積む処理を行い、
RET命令はスタックから取り出した戻り番地を、PR(プログラムレジスタ)に設定することで戻っています。
以下のプログラムで、それを確かめましょう