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命令をプログラマが直接書くことは普通ないと思います。