参考資料

 参考資料は、COMETⅡの理解を助けるため又はCOMETⅡの処理系作成者に対する 便宜のための資料である。したがって、COMETⅡ、CASLⅡの仕様に影響を与えるものではない。

1. 命令語の構成

 命令語の構成は定義しないが、次のような構成を想定する。ここで、OPの数値は16進表示で示す。

15 0 15 0 ←ビット番号
第1語 第2語 命令語長 命令語とアセンブラとの対応
OP r/r1 x/r2 adr 機械語命令 意味
主OP 副OP
NOP
no operation











LD
ST
LAD
LD
r,adr,x
r,adr,x
r,adr,x
r1,r2
load
store
load address
load























ADDA
SUBA
ADDL
SUBL
ADDA
SUBA
ADDL
SUBL
r,adr,x
r,adr,x
r,adr,x
r,adr,x
r1,r2
r1,r2
r1,r2
r1,r2
add arithmetic
subtract arithmetic
add logical
subtract logical
add arithmetic
subtract arithmetic
add logical
subtract logical

















AND
OR
XOR
AND
OR
XOR
r,adr,x
r,adr,x
r,adr,x
r1,r2
r1,r2
r1,r2
and
or
exclusive or
and
or
exclusive or











CPA
CPL
CPA
CPL
r,adr,x
r,adr,x
r1,r2
r1,r2
compare arithmetic
compare logical
compare arithmetic
compare logical









SLA
SRA
SLL
SRL
r,adr,x
r,adr,x
r,adr,x
r,adr,x
shift left arithmetic
shift right arithmetic
shift left logical
shift right logical

















JMI
JNZ
JZE
JUMP
JPL
JOV
adr,x
adr,x
adr,x
adr,x
adr,x
adr,x
jump on minus
jump on non zero
jump on zero
unconditional jump
jump on plus
jump on overflow






PUSH
POP
adr,x
push
pop





CALL
RET
adr,x

call subroutine
return from subroutine








その他の命令



SVC adr,x supervisor call

2. マクロ命令

 マクロ命令が生成する命令群は定義しない(語数不定)が、 次の例のような命令群を生成することを想定する。

[例]IN命令

	LABEL	IN	IBUF,LEN
		  ↓
		マクロ生成
		  ↓
	LABEL	PUSH	0,GR1
		PUSH	0,GR2
		LAD	GR1,IBUF
		LAD	GR2,LEN
		SVC	1
		POP	GR2
		POP	GR1

3. シフト演算命令におけるビットの動き

 シフト演算命令において、たとえば、ビットのシフトをした時の 動き及びOFの変化は、次のとおりである。
  1. 算術左シフトでは、ビット番号14の値が設定される。
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    符号


    OF

  2. 算術右シフトでは、ビット番号0の値が設定される。
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    符号 OF

  3. 論理左シフトでは、ビット番号15の値が設定される。
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    OF

  4. 論理右シフトでは、ビット番号0の値が設定される。


    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
    OF

4. プログラムの例

COUNT1	START			;
;	入力	GR1:検索する語
;	処理	GR1中の'1'のビットの個数を求める
;	出力	GR0:GR1中の'1'のビットの個数
COUNT1	PUSH	0, GR1		;レジスタの値をスタックに退避
	PUSH	0, GR2		;
	SUBA	GR2, GR2		; Count = 0
	AND	GR1, GR1		; 全部のビットが'0'?
	JZE	RETURN		; 全部のビットが'0'なら終了
MORE	LAD	GR2,  1, GR2	; Count = Count +1
	LAD	GR0, -1, GR1	; 最下位の'1'のビット1個を
	AND	GR1, GR0		;  '0'に変える
	JNZ	MORE		; '1'のビットが残っていれば繰り返し
RETURN	LD	GR0, GR2		; GR0 = Count
	POP	GR2		;レジスタの値を復帰させる
	POP	GR1		;
	RET			; 呼び出しプログラムへ戻る
	END			;