PR
2.アセンブラ言語CASLIIの仕様
2.1 言語の仕様
(1) CASLIIは,COMETIIのためのアセンブラ言語である。
(2) プログラムは,命令行及び注釈行からなる。
(3) 1命令は1命令行で記述し,次の行へ継続できない。
(4) 命令行及び注釈行は,次に示す記述の形式で,行の1文字目から記述する。

2.2 命令の種類
 命令は,4種類のアセンブラ命令(START,END,DS,DC),4種類のマクロ命令(IN,OUT,RPUSH,RPOP)および機械語命令(COMETIIの命令)からなる。その仕様を次に示す。

2.3 アセンブラ命令
 アセンブラ命令は,アセンブラの制御などを行う。
(1)
 START命令は,プログラムの先頭を定義する。
 実行開始番地は,そのプログラム内で定義されたラベルで指定する。指定がある場合はその番地から,省略した場合はSTART命令の次の命令から,実行を開始する。
 また,この命令につけられたラベルは,他のプログラムから入口名として参照できる。
(2)
 END命令は,プログラムの終わりを定義する。
(3)
 DS命令は,指定した語数の領域を確保する。
 語数は,10進定数(≧0)で指定する。語数を0とした場合,領域は確保しないが,ラベルは有効である。
(4)
 DC命令は,定数で指定したデータを(連続する)語に格納する。
 定数には,10進定数,16進定数,文字定数,アドレス定数の4種類がある。

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

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

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

3.プログラム実行の手引
3.1 OS
 プログラムの実行に関して,次の取決めがある。
(1) アセンブラは,未定義ラベル(オペランド欄に記述されたラベルのうち,そのプログラム内で定義されていないラベル)を,他のプログラムの入口名(START命令のラベル)と解釈する。この場合,アセンブラはアドレスの決定を保留し,その決定をOSに任せる。OSは,実行に先立って他のプログラムの入口名との連係処理を行いアドレスを決定する(プログラムの連係)。
(2) プログラムは,OSによって起動される。プログラムがロードされる主記憶の領域は不定とするが,プログラム中のラベルに対応するアドレス値は,OSによって実アドレスに補正されるものとする。
(3) プログラムの起動時に,OSはプログラム用に十分な容量のスタック領域を確保し,その最後のアドレスに1を加算した値をSPに設定する。
(4) OSは,CALL命令でプログラムに制御を渡す。プログラムを終了しOSに制御を戻すときは,RET命令を使用する。
(5) IN命令に対応する入力装置,OUT命令に対応する出力装置の割当ては,プログラムの実行に先立って利用者が行う。
(6) OSは,入出力装置や媒体による入出力手続の違いを吸収し,システムでの標準の形式及び手続(異常処理を含む)で入出力を行う。したがって,IN,OUT命令では,入出力装置の違いを意識する必要はない。

3.2 未定義事項
 プログラムの実行等に関し,この仕様で定義しない事項は,処理系によるものとする。