演習課題「間違い探し:複数のPUSH/POP」
右の環境には、CASLで、複数のレジスタの値をスタックにPUSH/POPするプログラムが作成してあります。しかし、実行すると、レジスタの値が入れ替わってしまいます。このファイルを修正して、元と同じ値がレジスタに格納されるようにしてください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、下記のコマンドを実行してください。
~$ pycasl stack.cas
~$ pycomet -d stack.com
~$ s
~$ s
……
#03:スタックに値を保存してみよう
ここでは、スタックに値を出し入れするPUSH命令とPOP命令の使い方を学習します。
$ pycasl stack.cas
$ pycomet stack.com
スタックに値を入れるPUSH adr [, x]
SP ← (SP) -L 1
(SP) ← 実効アドレス
- レジスタの値だけをスタックに積む: PUSH 0, GR1
- 指定の値をスタックに積む: PUSH #FF
- ラベルの値をスタックに積む: PUSH DATA
※保存できるレジスタは、GR1 - GR7、GR0は格納できない。
スタックからデータを取り出すPOP r
r ← ((SP))
SP ← (SP) +L 1
※格納できるレジスタは、GR0からGR7
1. GR1に値をセット
2. GR1の値をスタックに格納(PUSH)
3. GR1に別の値をセット
4. スタックからGR1に値を取り出す(POP);スタックテスト
MAIN START
LAD GR1, #FFFF
PUSH 0, GR1
LAD GR1, #0000
POP GR1
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
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