2. アセンブラ言語CASLⅡの仕様

2.1 言語の仕様

(1) CASLⅡは、COMETⅡのためのアセンブラ言語である。
(2) プログラムは、命令行および注釈行からなる。
(3) 1命令は1命令行で記述し、次の行へ継続できない。
(4) 命令行および注釈行は、次に示す記述の形式で、行の1文字目から記述する。
行の種類 記述の形式
命令行 オペランドあり [ラベル]{空白}{命令コード}{空白}{オペランド}[{空白}[{;}[コメント]]
オペランドなし [ラベル]{空白}{命令コード}[{空白}[{;}[コメント]]
注釈行 [空白]{;}[コメント]
[ ] [ ]内の指定が省略できることを示す。
{ } { }内の指定が必須であることを示す。
ラベル その命令の(先頭の語の)アドレスを他の命令やプログラムから参照するための名前である。 長さは1〜8文字で、先頭の文字は英大文字でなければならない。 以降の文字は、英大文字又は数字のいずれでもよい。 なお、予約語であるGR0〜GR7は、使用できない。
空白 1文字以上の間隔文字の列である。
命令コード 命令ごとに記述の形式が定義されている。
オペランド 命令ごとに記述の形式が定義されている。
コメント 覚え書きなどの任意の情報であり、処理系で許す任意の文字を書くことができる。

2.2 命令の種類

 命令は、4種類のアセンブラ命令(START,END,DS,DC)、 4種類のマクロ命令(IN,OUT)および機械語命令(COMETⅡの命令)からなる。 その仕様を次に示す。
命令の種類 ラベル 命令コード オペランド 機能
アセンブラ命令 ラベル START [実行開始番地] プログラムの先頭を定義
プログラムの実行開始番地を定義
他のプログラムで参照する入口名を定義

END
プログラムの終わりを明示
[ラベル] DS 語数 領域を確保
[ラベル] DC 定数[,定数]・・・ 定数を定義
マクロ命令 [ラベル] IN 入力領域,入力文字長領域 入力装置から文字データを入力
[ラベル] OUT 出力領域,出力文字長領域 出力装置へ文字データを出力
[ラベル] RPUSH
GRの内容をスタックに格納
[ラベル] RPOP
スタックの内容をGRに格納
機械語命令 [ラベル] (「1.2 命令」を参照)

2.3 アセンブラ命令

 アセンブラ命令は、アセンブラの制御などを行う。
(1)
START [実行開始番地]
 START命令は、プログラムの先頭を定義する。
 実行開始番地は、そのプログラム内で定義されたラベルでしていする。 指定がある場合はその番地から、省略した場合はSTART命令の次の命令から、実行を開始する。
 また、この命令につけられたラベルは、他のプログラムから入口名として参照できる。
(2)
END
 END命令は、プログラムの終わりを定義する。
(3)
DS 語数
 DS命令は、指定した語数の領域を確保する。
 語数は、10進定数(≧0)で指定する。語数を0とした場合、領域は確保しないが、ラベルは有効である。
(4)
DC 定数[,定数]・・・
 DC命令は、定数で指定したデータを(連続する)語に格納する。
 定数には、10進定数、16進定数、文字定数、アドレス定数の4種類がある。
定数の種類 書き方 命令の説明
10進定数 nで指定した10進数値を、1語の2進数データとして格納する。 ただし、nが−32768〜32767の範囲にないときは、その下位16ビットを格納する。
16進定数 #h hは4桁の16進数(16進数字は0〜9,A〜F)とする。 hで指定した16進数値を1語の2進数データとして格納する(0000≦h≦FFFF)。
文字定数 ’文字列’ 文字列の文字数(>0)分の連続する領域を確保し、最初の文字は第1語の下位8ビットに、 2番目の文字は第2語の下位8ビットに、・・・と順次文字データとして格納する。 各語の上位8ビットには0のビットが入る。
文字列には、間隔および任意の図形文字を書くことができる。 ただし、アポストロフィ(’)は2個続けて書く。
アドレス定数 ラベル ラベルに対応するアドレスを1語の2進数データとして格納する。

2.4 マクロ命令

 マクロ命令は、あらかじめ定義された命令群とオペランドの情報によって、 目的の機能を果たす命令群を生成する(語数は不定)。
(1)
IN 入力領域,入力文字長領域
 IN命令は、あらかじめ割り当てた入力装置から、1レコードの文字データを読み込む。
 入力領域は、256語長の作業域のラベルであり、この領域の先頭から、 1文字を1語に対応させて順次入力される。レコードの区切り符号(キーボ−ド入力の復帰符号など)は、 格納しない。格納の形式は、DC命令の文字定数と同じである。入力データが256文字に満たない場合、 入力領域の残りの部分は実行前のデータを保持する。入力データが256文字を超える場合、 以降の文字は無視される。
 入力文字長領域は、1語長の領域のラベルであり、入力された文字の長さ(≧0)が2進数で格納される。 ファイルの終わり(end of file)を検出した場合は、−1が格納される。
 IN命令を実行すると、GRの内容は保存されるが、FRの内容は不定となる。
(2)
OUT 出力領域,出力文字長領域
 OUT命令は、あらかじめ割り当てた出力装置に、文字データを、1レコードとして書き出す。
 出力領域は、出力しようとするデータが1文字1語で格納されている領域のラベルである。 格納の形式は、DC命令の文字定数と同じであるが、 上位8ビットは、OSが無視するので0でなくてもよい。
 出力文字長領域は、1語長の領域のラベルであり、 出力しようとする文字の長さ(≧0)を2進数で格納しておく。
 OUT命令を実行すると、GRの内容は保存されるが、FRの内容は不定となる。
(3)
RPUSH
 RPUSH命令は、GRの内容を、GR1、GR2、・・・、GR7の順でスタックに格納する。
(4)
RPOP
 RPOP命令は、スタックの内容を順次取り出し、GR7、GR6、・・・、GR1の順でGRに格納する。

2.5 機械語命令

 機械語命令のオペランドは、次の形式で記述する。
r,r1,r2 GRは、記号GR0〜GR7で指定する。
指標レジスタとして用いるGRは、記号GR1〜GR7で指定する。
adr アドレスは、10進定数、16進定数、アドレス定数又はリテラルで指定する。
リテラルは、ひとつの10進定数、16進定数又は文字定数の前に等号(=)を付けて 記述する。CASLⅡは、等号の後の定数をオペランドとするDC命令を生成し、 そのアドレスをadrの値とする。

2.6 その他

  1. アセンブラによって生成される命令語や領域の相対位置は、アセンブラ言語での記述順序とする。 ただし、リテラルから生成されるDC命令は、END命令の直前にまとめて配置される。
  2. 生成された命令語、領域は、主記憶上で連続した領域を占める。