演習課題「ANDサブルーチンを呼び出す」
右の環境には、CASLで、GR0とGR1のANDを求めるサブルーチンが作成してあります。このファイルを修正して、メインルーチンからサブルーチンを呼び出すようにしてください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、下記のコマンドを実行してください。
~$ pycasl sub-routine.cas
~$ pycomet -d sub-routine.com
~$ s
~$ s
……
#05:サブルーチンを呼び出そう
ここでは、サブルーチンを呼び出すCALL命令とRET命令の使い方を学習します。簡単な足し算プログラムをサブルーチンとして呼び出します。
$ pycasl sub-routine.cas
$ pycomet sub-routine.com
他のプログラムから呼び出す共通のコード
- 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