+@item r, r1 , r
+GRは,記号GR0~GR7で指定する。
+
+@item x
+指標レジスタとして用いるGRは,記号GR1~GR7で指定する。
+
+@item adr
+アドレスは,10進定数,16進定数,アドレス定数又はリテラルで指定する。
+リテラルは,ひとつの10進定数,16進定数又は文字定数の前に等号(=)を付けて 記述する。CASL IIは,等号の後の定数をオペランドとするDC命令を生成し, そのアドレスをadrの値とする。
+@end table
+
+@section その他
+
+@enumerate
+@item
+アセンブラによって生成される命令語や領域の相対位置は,アセンブラ言語での記述順序とする。ただし,リテラルから生成されるDC命令は,END命令の直前にまとめて配置される。
+
+@item
+生成された命令語,領域は,主記憶上で連続した領域を占める。
+@end enumerate
+
+@chapter プログラム実行の手引
+@section OS
+
+プログラムの実行に関して,次の取決めがある。
+
+@enumerate
+@item
+アセンブラは,未定義ラベル(オペランド欄に記述されたラベルのうち,そのプログラム内で定義されていないラベル)を,他のプログラムの入口名(START命令のラベル)と解釈する。この場合,アセンブラはアドレスの決定を保留し,その決定をOSに任せる。OSは,実行に先立って他のプログラムの入口名との連係処理を行いアドレスを決定する(プログラムの連係)。
+
+@item
+プログラムは,OS によって起動される。プログラムがロードされる主記憶の領域は不定とするが,プログラム中のラベルに対応するアドレス値は,OSによって実アドレスに補正されるものとする。
+
+@item
+プログラムの起動時に,OS はプログラム用に十分な容量のスタック領域を確保し,その最後のアドレスに1を加算した値をSPに設定する。
+
+@item
+OSは,CALL 命令でプログラムに制御を渡す。プログラムを終了し OSに制御を戻すときは,RET 命令を使用する。
+
+@item
+IN命令に対応する入力装置,OUT命令に対応する出力装置の割当ては,プログラムの
+実行に先立って利用者が行う。
+
+@item
+OSは,入出力装置や媒体による入出力手続の違いを吸収し,システムでの標準の形式及び手続(異常処理を含む)で入出力を行う。したがって,IN,OUT 命令では,入出力装置の違いを意識する必要はない。
+@end enumerate
+
+@section 未定義事項
+
+プログラムの実行等に関し,この仕様で定義しない事項は,処理系によるものとする。
+
+@unnumbered 参考資料
+参考資料は,COMET IIの理解を助けるため又は COMET IIの処理系作成者に対する便宜のための資料である。したがって,COMET II,CASL IIの仕様に影響を与えるものではない。
+
+@section 命令語の構成
+
+命令語の構成は定義しないが,次のような構成を想定する。ここで,OPの数値は16進表示で示す。
+
+@multitable @columnfractions .1 .1 .1 .1 .1 .1 .2 .2
+@headitem 15 @tab 11 7 @tab 3 0 @tab 15 0 @tab ←ビット番号
+@headitem 第1語 @tab @tab @tab @tab 第2語 @tab 命令語長 @tab 命令語とアセンブラとの対応 @tab
+@headitem OP @tab @tab r/r1 @tab x/r2 @tab adr @tab @tab 機械語命令 @tab 意味
+@headitem 主OP @tab 副OP @tab @tab @tab @tab @tab @tab
+@end multitable
+
+0
+0
+-
+-
+1
+0
+1
+2
+4
+2
+0
+1
+2
+3
+4
+5
+6
+7
+3
+0
+1
+2
+4
+5
+6
+4
+0
+1
+4
+5
+5
+0
+1
+2
+3
+6
+1
+-
+2
+-
+3
+-
+4
+-
+5
+-
+6
+-
+7
+0
+-
+1
+-
+8
+0
+-
+1
+-
+-
+9
+~
+E
+F
+0
+-
+0
+
+adr
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+1
+2
+2
+2
+1
+2
+2
+2
+2
+1
+1
+1
+1
+2
+2
+2
+1
+1
+1
+2
+2
+1
+1
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+1
+2
+1
+機械語命令
+NOP
+LD
+ST
+LAD
+LD
+ADDA
+SUBA
+ADDL
+SUBL
+ADDA
+SUBA
+ADDL
+SUBL
+AND
+OR
+XOR
+AND
+OR
+XOR
+CPA
+CPL
+CPA
+CPL
+SLA
+SRA
+SLL
+SRL
+JMI
+JNZ
+JZE
+JUMP
+JPL
+JOV
+PUSH
+POP
+CALL
+RET
+
+r,adr,x
+r,adr,x
+r,adr,x
+r1,r2
+r,adr,x
+r,adr,x
+r,adr,x
+r,adr,x
+r1,r2
+r1,r2
+r1,r2
+r1,r2
+r,adr,x
+r,adr,x
+r,adr,x
+r1,r2
+r1,r2
+r1,r2
+r,adr,x
+r,adr,x
+r1,r2
+r1,r2
+r,adr,x
+r,adr,x
+r,adr,x
+r,adr,x
+adr,x
+adr,x
+adr,x
+adr,x
+adr,x
+adr,x
+adr,x
+r
+adr,x
+意味
+no operation
+load
+store
+load address
+load
+add arithmetic
+subtract arithmetic
+add logical
+subtract logical
+add arithmetic
+subtract arithmetic
+add logical
+subtract logical
+and
+or
+exclusive or
+and
+or
+exclusive or
+compare arithmetic
+compare logical
+compare arithmetic
+compare logical
+shift left arithmetic
+shift right arithmetic
+shift left logical
+shift right logical
+jump on minus
+jump on non zero
+jump on zero
+unconditional jump
+jump on plus
+jump on overflow
+push
+pop
+call subroutine
+return from subroutine
+その他の命令
+2
+SVC
+adr,x
+supervisor call
+- 9 -
+Copyright(c) Information-technology Promotion Agency, Japan. All rights reserved 2012
+
+@section マクロ命令
+
+マクロ命令が生成する命令群は定義しない(語数不定)が,次の例のような命令群を生成することを想定する。
+
+〔例〕IN 命令
+@verbatim
+LABEL IN IBUF,LEN
+@end verbatim
+
+マクロ生成
+
+@verbatim
+LABEL PUSH 0,GR1
+ PUSH 0,GR2
+ LAD GR1,IBUF
+ LAD GR2,LEN
+ SVC 1
+ POP GR2
+ POP GR1
+@end verbatim
+
+@section シフト演算命令におけるビットの動き
+
+シフト演算命令において,例えば,1 ビットのシフトをしたときの動き及び OF の変化は,次のとおりである。
+
+@enumerate
+
+@item
+算術左シフトでは,ビット番号14の値が設定される。
+
+@item
+算術右シフトでは,ビット番号 0 の値が設定される。
+
+@item
+論理左シフトでは,ビット番号 15 の値が設定される。
+
+@item
+論理右シフトでは,ビット番号 0 の値が設定される。
+@end enumerate
+
+@section プログラムの例
+
+@verbatim
+COUNT1 START ;
+; 入力 ; GR1:検索する語
+; 処理 ; GR1 中の'1'のビットの個数を求める
+; 出力 ; GR0:GR1 中の'1'のビットの個数
+ PUSH 0,GR1 ;
+ PUSH 0,GR2 ; Count = 0
+ SUBA GR2,GR2 ; 全部のビットが'0'?
+ AND GR1,GR1 ; 全部のビットが'0'なら終了
+ JZE RETURN ; Count = Count + 1
+MORE LAD GR2,1,GR2 ; 最下位の'1'のビット 1 個を
+ LAD GR0,-1,GR1 ; '0'に変える
+ AND GR1,GR0 ; '1'のビットが残っていれば繰返し
+ JNZ MORE ; GR0 = Count
+RETURN LD GR0,GR2 ;
+ POP GR2 ;
+ POP GR1 ;
+ RET ; 呼出しプログラムへ戻る
+ END ;
+@end verbatim
+@bye