演習課題「ジャンプ 01」
右の環境には、CASLでメモリからレジスタにデータを読み込んで、足し算するプログラムを作成してあります。このファイルを修正して、以下の動作をするように修正してください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
GR0の値と、CONDラベルの値が一致したら、足し算しないで、SKIPに分岐する
※ 採点前に下記のコマンドを実行してください。
$ pycasl calc.cas
$ pycomet -d calc.com
$ s
…
演習課題「ジャンプ 02」
右の環境には、CASLでメモリからレジスタにデータを読み込んで、足し算するプログラムを作成してあります。このファイルを修正して、以下の動作をするように修正してください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
GR0の値が、CONDラベルの実行アドレスの値より大きかったら、足し算しないで、SKIPに分岐する
※ 採点前に下記のコマンドを実行してください。
$ pycasl calc.cas
$ pycomet -d calc.com
$ s
…
#09:比較命令で分岐してみよう
比較命令の使い方を学習します。フラグレジスタと組み合わせて、プログラムの処理を分岐させます。
命令 | 命令コード | オペランド |
---|---|---|
正分岐(Jump on PLus) | JPL | adr[,x] |
負分岐(Jump on MInus) | JMI | adr[,x] |
非ゼロ分岐(Jump on Non Zero) | JNZ | adr[,x] |
ゼロ分岐(Jump on ZEro) | JZE | adr[,x] |
オーバーフロー分岐(Jump on OVerflow) | JOV | adr[,x] |
無条件分岐(unconditional JUMP) | JUMP | adr[,x] |
命令 書き方(命令コード、オペランド) 説明
算術比較 CPA r1,r2 r1 ← (r2)
ComPare Arithmetic r,adr[,x] r ← (実効アドレス)
論理比較 CPL r1,r2 r1 ← (r2)
ComPare Logical r,adr[,x] r ← (実効アドレス)
(r1)と(r2)、または(r)と(実効アドレス)を比較して、その結果によって、FRに次の値を設定する。
比較 | 比較 | FRの値 | 対応する分岐命令 |
---|---|---|---|
左が右より大きい | (r1)>(r2), (r)>(実効アドレス) | SF: 0, ZF: 0 | JPL |
左と右が等しい | (r1)=(r2), (r)=(実効アドレス) | SF: 0, ZF: 1 | JZE |
左が右より小さい | (r1)<(r2), (r)<(実効アドレス) | SF: 1, ZF: 0 | JMI |
; ジャンプ
JUMP START
LD GR0, A
CPA GR0, COND
JPL SKIP
ADDA GR0, B
SKIP RET
A DC 05
B DC 02
COND DC 03
END
フラグとは - IT用語辞典 e-Words
http://e-words.jp/w/%E3%83%95%E3%83%A9%E3%82%B0.html
符号つき2進数
http://www.infonet.co.jp/ueyama/ip/binary/signedbin.html
符号付き整数型とは - IT用語辞典 e-Words
http://e-words.jp/w/%E7%AC%A6%E5%8F%B7%E4%BB%98%E3%81%8D%E6%95%B4%E6%95%B0%E5%9E%8B.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