演習課題「間違い探し:ANDサブルーチンを呼び出す」
右の環境には、CASLで、GR0とGR1のANDを求めるサブルーチンが作成してありますが、正常に動作しません。このファイルを修正して、正常に動作するようにしてください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、下記のコマンドを実行してください。
~$ pycasl sub-routine.cas
~$ pycomet -d sub-routine.com
~$ s
~$ s
……
#06:スタックにレジスタの値を保存しよう
ここでは、レジスタの値をまとめてスタックに出し入れするRPUSH命令とRPOP命令を学習します。
$ pycasl rpush.cas
$ pycomet rpush.com
GR1からGR7の値を、この順番でスタックにPUSHするRPUSH
GR1からGR7の値を、この順番でスタックにPUSHするRPUSH
サブルーチンを呼び出し
- プログラムレジスタの値をスタックに格納
- 戻り先のアドレスを一時退避
サブルーチンは、レジスタの値は退避しない
- サブルーチンの作業用にレジスタを使う
- レジスタの値が変わってしまう
RPUSHで、GR1からGR7の値を一時退避 > RPOPで復帰
- 元の処理に戻ったとき、レジスタの値をそのまま使える
- GR0で、サブルーチンの処理結果を受け取る
; レジスタ退避
MAIN START
CALL SUM
RET
END
SUM START
RPUSH
LAD GR0, 01
LAD GR1, 02
ADDA GR0, GR1
RPOP
RET
END
スタックとは - IT用語辞典 e-Words
http://e-words.jp/w/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF.html
LIFO(FILO)とは - IT用語辞典 e-Words
http://e-words.jp/w/LIFO.html
サブルーチン(サブルーティン)とは - 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