サブルーチンとは
サブルーチンとは、ひとことで言うなら、「何度でも呼び出せる、ひとまとまりの処理」のことである。これはプログラミングで言う関数と同じ意味である。
JSRとRTSとは
JSRはjump to SubRoutineつまり、サブルーチンへ飛ぶ、呼び出す命令である。
RTSはReTurn from Subroutineつまり、サブルーチンから戻る命令である。個人的にReTrunからTをとっていることは結構突っ込みどころがあると思う。
スタック-プッシュ、ポップとは
スタックとは、データを一時的においておく場所のことである。ここで注意なのは、LIFO(Last in First out)ということである。つまり、最後に入れたものを最初に取り出す。これは箱にものを入れることで考えるとわかりやすいかもしれない。箱にものを入れたら、まず手前から取り出すだろう。それと同じである。スタックにデータを積むことをプッシュ、スタックの一番上のデータを取り出すことをポップという。ではなぜこの話を下かというと、スタックの考え方がJSRとRTSに密接にかかわっている。
では、本題
では、2つの数を足すサブルーチンを例示する。
; メインプログラム
START: MOV #4, R0 ; R0 = 4
MOV #3, R1 ; R1 = 3
JSR R5, ADD ; ADDを呼び出す
HALT ; R0=7になって停止
;--------------------------
; サブルーチン
; R0 ← R0 + R1
;--------------------------
ADD: ADD R1, R0 ; R0 = R0 + R1
RTS R5 ; 呼び出し元へ戻る
JSRを実行すると、まず現在のR5をスタックへ保存し、戻り先アドレス(次に実行する命令の番地)をR5へ格納した後、サブルーチンへジャンプする。
サブルーチンでは必要な処理を実行し、最後にRTSを実行する。RTSは、R5に保存されている戻り先へジャンプし、スタックに保存しておいた元のR5を復元して、スタックポインタ(SP)を元の位置へ戻す。
この仕組みにより、プログラムは必要な処理だけをサブルーチンで実行し、終了後は元の位置へ正しく復帰できる。
メリットは?
JSRとRTSを利用すると、同じ処理をサブルーチンとしてまとめておき、必要なときだけ呼び出せる。そのため、同じコードを何度も記述する必要がなくなり、プログラムが短く読みやすくなる。また、処理内容を変更する場合もサブルーチンだけを修正すればよいため、保守性が向上する。
まとめ
サブルーチンつまり関数を扱うときはJSRとRTSをうまく使うことによって、何度も同じ処理をすることを省けて便利である
- コメントを投稿するにはログインしてください