CASL II クイックリファレンス
目次へ戻る
CASL II の命令を簡単にまとめたものです。COMET II およびCASL II の正式な仕様は情報処理技術者試験センター発行の「出題範囲」をご覧ください。
アセンブラ命令
命令 |
オペランド |
機能 |
備考 |
参照 |
START |
[実行開始番地] |
プログラムの始まりと入口名、実行開始番地を示す |
ラベル必須 |
第1章 |
END |
|
プログラムの終わりを示す |
ラベル不可 |
第1章 |
DS |
語数 |
領域を確保。語数を10進数で指定 |
語数は0も可 |
第3章 |
DC |
定数[,定数…] |
領域を確保し初期値を設定 |
|
第1章 |
マクロ命令
命令 |
オペランド |
機能 |
備考 |
参照 |
IN |
入力領域,文字数 |
文字列を入力する。
文字数は入力文字数を受け取る1語の領域のラベル |
FRは不定 |
第3章 |
OUT |
出力領域,文字数 |
文字列を出力する。
文字数は出力文字数を格納した1語の領域のラベル |
FRは不定 |
第1章 |
RPUSH |
|
GR1〜GR7をPUSH |
FRは不変 |
第4章 |
RPOP |
|
GR7〜GR1をPOP |
FRは不変 |
第4章 |
機械命令
命令 |
オペランド |
コード |
機能 |
備考 |
参照 |
LD |
r1,r2 |
14 |
r2の内容をr1へロード |
FR(1) |
第2章 |
r,addr[,x] |
10 |
実効アドレスの内容をrへロード |
ST |
r,addr[,x] |
11 |
rの内容を実効アドレスへストア |
FRは不変 |
第2章 |
LAD |
r,addr[,x] |
12 |
実効アドレスをrへロード |
FRは不変 |
第3章 |
ADDA |
r1,r2 |
24 |
符号つき加算 |
FR(2) |
第2章 |
r,addr[,x] |
20 |
ADDL |
r1,r2 |
26 |
符号なし加算 |
FR(3) |
第2章 |
r,addr[,x] |
22 |
SUBA |
r1,r2 |
25 |
符号つき減算 |
FR(2) |
第2章 |
r,addr[,x] |
21 |
SUBL |
r1,r2 |
27 |
符号なし減算 |
FR(3) |
第2章 |
r,addr[,x] |
23 |
AND |
r1,r2 |
34 |
論理積 |
FR(1) |
第2章 |
r,addr[,x] |
30 |
OR |
r1,r2 |
35 |
論理和 |
FR(1) |
第2章 |
r,addr[,x] |
31 |
XOR |
r1,r2 |
36 |
排他的論理和 |
FR(1) |
第2章 |
r,addr[,x] |
32 |
CPA |
r1,r2 |
44 |
符号つき比較 |
FR(4) |
第3章 |
r,addr[,x] |
40 |
CPL |
r1,r2 |
45 |
符号なし比較 |
FR(4) |
第3章 |
r,addr[,x] |
41 |
SLA |
r,addr[,x] |
50 |
符号つき左シフト |
FR(5) |
第4章 |
SRA |
r,addr[,x] |
51 |
符号つき右シフト |
FR(5) |
第4章 |
SLL |
r,addr[,x] |
52 |
符号なし左シフト |
FR(5) |
第4章 |
SRL |
r,addr[,x] |
53 |
符号なし右シフト |
FR(5) |
第4章 |
JPL |
addr[,x] |
65 |
プラス(SF=0かつZF=0)のとき分岐 |
FRは不変 |
第2章 |
JMI |
addr[,x] |
61 |
マイナス(SF=1)のとき分岐 |
FRは不変 |
第2章 |
JNZ |
addr[,x] |
62 |
非ゼロ(ZF=0)のとき分岐 |
FRは不変 |
第2章 |
JZE |
addr[,x] |
63 |
ゼロ(ZF=1)のとき分岐 |
FRは不変 |
第2章 |
JOV |
addr[,x] |
66 |
オーバーフロー(OF=1)のとき分岐 |
FRは不変 |
第2章 |
JUMP |
addr[,x] |
64 |
無条件に分岐 |
FRは不変 |
第2章 |
PUSH |
addr[,x] |
70 |
実効アドレスをPUSH
実効アドレスの内容ではない。 |
FRは不変 |
第4章 |
POP |
r |
71 |
rへPOP |
FRは不変 |
第4章 |
CALL |
addr[,x] |
80 |
PRをPUSHし実効アドレスへ分岐 |
FRは不変 |
第5章 |
RET |
|
81 |
PRをPOP |
FRは不変 |
第5章 |
SVC |
addr[,x] |
F0 |
スーパーバイザーコール |
GRとFRは不定 |
|
NOP |
|
00 |
なにもしない |
FRは不変 |
|
- 語
- 1語16ビット。負数は2の補数。最下位ビットがビット0で最上位ビット(符号つきの場合は符号)がビット15。
- ラベル
- 一文字目はA〜Z、二文字目以降はA〜Zまたは0〜9、8文字以内。
- 定数(DC命令)
-
10進定数 |
数字をそのまま記述。接頭の-が使用可能 |
16進定数 |
先頭に#をつける。#0000〜#FFFF |
文字列定数 |
シングルクォートで囲む。文字数分の語数が確保され各文字の文字コードが各語の下位8ビットに格納される。各語の上位8ビットには0が入る。 |
アドレス定数 |
ラベル |
- r1, r2, r 汎用レジスタ
- GR0〜GR7
- x 指標レジスタ
- GR1〜GR7
- addr
-
10進定数 |
数字をそのまま記述。接頭の-が使用可能 |
16進定数 |
先頭に#をつける。#0000〜#FFFF |
アドレス定数 |
ラベル |
リテラル |
10進定数、16進定数、文字列定数の前に=を付けたもので、定数用の領域が別に確保されてそのアドレスが入る。 |
- 実効アドレス
- addr[,x]
x(指標レジスタ)があればaddrに指標レジスタの値を加えたものが実効アドレスになる。
xがない場合はaddrが実効アドレスになる。
- 加減算と論理演算命令
- 第一オペランドと実効アドレスの語の内容(r1,r2形式の場合はr2の内容)の間で演算を行う。第一オペランドに演算結果が入る。減算命令は第一オペランドから引く。
- FR(1)
- 値が0のときZF=1
値のビット15が1のときSF=1
OF=0
- FR(2)
- 値が0のときZF=1
値のビット15が1のときSF=1
計算結果が-32768〜32767の範囲を越えたときOF=1
- FR(3)
- 値が0のときZF=1
値のビット15が1のときSF=1
計算結果が0〜65535の範囲を越えたときOF=1
- FR(4)
- 第1オペランドのほうが小さいときSF=1、ZF=0
第1オペランドのほうが大きいときSF=0、ZF=0
等しいときSF=0、ZF=1
OFは常に0
- FR(5)
- 第一オペランドをシフトする。シフトするビット数は実効アドレスで指定する(実効アドレスの語の内容ではない)。
値が0のときZF=1
値のビット15が1のときSF=1
OFは押し出されたビット。命令により以下のとおり(1ビットシフトの場合の動作)。
2ビット以上シフトの場合はOFには最後に押し出されたビットだけが残る。
- プログラムの終了
- メインプログラムからRET命令で戻るとプログラムが終了する。
- SVCとは
- OSの機能を呼び出すための命令です。
IN/OUTマクロを書くと、アセンブラがSVC命令を生成して、これを実行するとOSが呼び出されて入出力が行われる、という使い方が想定されています。
このときプログラマが書くのはIN/OUT命令であり、SVC命令を直接書く必要はありません。
実効アドレス(0〜65535)でどの機能を呼び出すかを指定できるようになっていますが、CASL II/COMET
IIでは、入出力以外にはOS機能の呼び出しは定義されていないので、SVC命令をプログラマが直接書くことは普通ないと思います。