#04:サブルーチンとスタックの関係を理解しよう
ここでは、サブルーチンを呼び出すCALL命令とRET命令について学習します。COMETⅡでは、CALL命令でサブルーチンを呼び出し、RET命令でサブルーチンから戻ります。このとき、中断した処理のアドレスを、スタックに一時的に退避します。
他のプログラムから呼び出す共通のコード
- CALL命令でサブルーチンを呼び出し
- サブルーチンにRET命令があると、呼び出し側に戻る
- CALL命令の次のコードから処理を再開する
RubyやPython・Javaなどの関数・メソッドとの違い
- 引数やローカル変数はない
- 必要なデータがあれば、レジスタを退避する
マシン語のプログラム
- プログラムレジスタのコードを実行する
- 分岐命令があると、プログラムレジスタの値を書き換える
CALL命令でサブルーチンを呼び出し
- 現在のプログラムレジスタの値を、スタックにプッシュする
- プログラムレジスタの値を、サブルーチンのアドレスに書き換える
RET命令でサブルーチンから復帰
- スタックのアドレスをプログラムレジスタに読み込む
CALL adr [, x]
SP ← (SP) -L 1,
(SP) ← (PR),
PR r← 実効アドレス
RET
sub-routine.cas; サブルーチン
MAIN START
CALL SUM
RET
END
SUM START
LAD GR0, 01
LAD GR1, 02
ADDA GR0, GR1
RET
END
サブルーチン(サブルーティン)とは - IT用語辞典 e-Words
http://e-words.jp/w/%E3%82%B5%E3%83%96%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3.html
CASLIIアセンブラ & シミュレータ PyCASL2 & PyCOMET2
http://www.image.med.osaka-u.ac.jp/member/nakamoto/pycasl2/index.html
CASL - Wikipedia
https://ja.wikipedia.org/wiki/CASL
アセンブラ言語CASL2の仕様
https://www.chiba-fjb.ac.jp/fjb_labo/casl/CASL2spec.html#2-3
システムCOMET2の仕様
https://www.chiba-fjb.ac.jp/fjb_labo/casl/COMET2spec.html
CPU - コンピュータの基礎知識 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/computer/CPU.html