CASLⅡ
CASLⅡは基本情報技術者試験向けに開発されたアセンブラ言語。
今回はCASLⅡについての内容をまとめます。
参考文献:
プログラミング入門 CASL2―情報処理技術者テキスト
その他各種サイト
命令
r:レジスタ
adr:値アドレス
例:
LAD r, adr, x
rにadr+x番地の値を格納する。
命令コード | オペランド | 命令 | 説明 | 英語 |
---|---|---|---|---|
NOP | no operation | |||
LD | r, adr, x | r ← adr | load | |
ST | r, adr, x | adr ← r | store | |
LAD | r, adr, x | r ← adr | load address | |
LD | r1, r2 | r1 ← r2 | load | |
ADDA | r, adr, x | 算術加算 | r ← r + 実行アドレス | add arithmetic |
SUBA | r, adr, x | 算術減算 | r ← r - 実行アドレス | subtract arithmetic |
ADDL | r, adr, x | 論理加算 | r ← r + 実行アドレス | add logical |
SUBL | r, adr, x | 論理減算 | r ← r - 実行アドレス | subtract logical |
ADDA | r1, r2 | r ← r1 + r2 | add logical | |
SUBA | r1, r2 | r ← r1 - r2 | subtract logical | |
ADDL | r1, r2 | r ← r1 + r2 | add logical | |
SUBL | r1, r2 | r ← r1 - r2 | subtract logical | |
AND | r, adr, x | 論理積 | r ← r AND 実行アドレス | and |
OR | r, adr, x | 論理和 | r1 ← r1 OR r2 | or |
XOR | r, adr, x | 排他的論理和 | r ← r XOR 実行アドレス | exclusive or |
AND | r1, r2 | r ← r1 AND r2 | and | |
OR | r1, r2 | r1 ← r1 OR r2 | or | |
XOR | r1, r2 | r1 ← r1 XOR r2 | exclusive or | |
CPA | r, adr, x | 算術比較 | 下記フラグレジスタを参照 | compare arithmetic |
CPL | r, adr, x | 論理比較 | 下記フラグレジスタを参照 | compare logical |
CPA | r1, r2 | 下記フラグレジスタを参照 | compare arithmetic | |
CPL | r1, r2 | 下記フラグレジスタを参照 | compare logical | |
SLA | r, adr, x | 算術左シフト | adrで指定した分だけ左シフト | shift left arithmetic |
SRA | r, adr, x | 算術右シフト | adrで指定した分だけ右シフト | shift right arithmetic |
SLL | r, adr, x | 論理左シフト | adrで指定した分だけ左シフト | shift left logical |
SRL | r, adr, x | 論理右シフト | adrで指定した分だけ右シフト | shift right logical |
JMI | adr, x | マイナスの場合分岐 | jump on minus | |
JNZ | adr, x | ゼロでない場合分岐 | jump on non zero | |
JZE | adr, x | ゼロの場合分岐 | jump on zero | |
JUMP | adr, x | 無条件で分岐 | unconditional jump | |
JPL | adr, x | プラスの場合分岐 | jump on plus | |
JOV | adr, x | オーバーフローの場合分岐 | jump on overflow | |
PUSH | adr, x | スタックに実行アドレスを積む | push | |
POP | r | スタックの値を取り出す | pop | |
CALL | adr, x | call subroutine | ||
RET | return from subroutine |
フラグレジスタ(FR)
FRの値は、命令の演算結果の値に応じて設定される。
以下3種類ある。
オーバーフローフラグ(OF)
オーバーフローが発生すると1が設定される。
サインフラグ(SF)
演算結果の符号ビットの値が設定される。
正の値:0
負の値:1
ゼロフラグ(ZF)
演算結果がゼロの場合1が設定される。
比較演算の結果
SF | ZF | |
---|---|---|
r1 > r2 | 0 | 0 |
r1 = r2 | 0 | 1 |
r1 < r2 | 1 | 0 |