COMETⅡの命令コード

r, r1,r2 : 汎用レジスタ(GR)。指定できるGRGR0GR7まで。
adr : アドレス。指定できる値の範囲は065535まで(16ビット)
x : 指標レジスタとして用いるGR。指定できるGRGR1GR7まで。
SP : スタックポインタ。スタックの最上段のアドレスを保持している。
FR : フラグレジスタ。OF(Overflow Flag), SF(Sign Flag), ZF(Zero Flag)3ビットからなる。
 
以下の表で,[ ]内の指定は省略できることを示す。
また,( )は,( )内のレジスタ又はアドレスに格納されている内容を示す。
+L, -L は,それぞれ,論理加算,論理減算を示す。
 
FRの設定
○ :設定されることを示す。
1:設定されることを示す。ただしオーバーフローフラグOFにはゼロ0が設定される。
2:設定されることを示す。ただしオーバーフローフラグOFにはレジスタから最後に送り出されたビットの値が設定される
―:実行前の値が保持される。
      COMETとフラグレジスタの設定が異なっているので注意する
(特にLDLADのフラグレジスタの設定はCOMETと逆)
 

命令の種類

命令コード

オペランド

命令の意味

 

FRの設定

ロード,
ストア,
ロードアドレス
(レジスタと主記憶間)

LD
ST
LAD

r, adr [, x]
r, adr [, x]
r, adr [, x]

load
store
load address

r ← (adr)
(adr) ← r
r ← adr

1

ロード (レジスタ間)

LD

r1, r2

load

1 ← (r2)

1

算術/論理加減算
(レジスタと主記憶間)

ADDA
SUBA
ADDL
SUBL

r, adr [, x]
r, adr [, x]
r, adr [, x]
r, adr [, x]

add arithmetic
sub arithmetic
add logical
sub logical

r ← (r) + (adr)
r ← (r) - (adr)
r ← (r) +L (adr)
r ← (r) -L (adr)

算術/論理加減算
(レジスタ間)

ADDA
SUBA
ADDL
SUBL

r1, r2
r1, r2
r1, r2
r1, r2

add arithmetic
sub arithmetic
add logical
sub logical

1 ← (r1) + (r2)
r1 ← (r1) - (r2)
r1 ← (r1) +L (r2)
r1 ← (r1) -L (r2)

論理演算
(レジスタと主記憶間)

AND
OR
XOR

r, adr [, x]
r, adr [, x]
r, adr [, x]

and
or
exclusive or

r ← (r) AND (adr)
r ← (r) OR (adr)
r ← (r) XOR (adr)

1

1

1

論理演算
(レジスタ間)

AND
OR
XOR

r1, r2
r1, r2
r1, r2

and
or
exclusive or

1 ← (r1) AND (r2)
r1 ← (r1) OR (r2)
r1 ← (r1) XOR (r2)

1

1

1

比較演算
(レジスタと主記憶間)

CPA
CPL

r, adr [, x]
r, adr [, x]

compare arithmetic
compare logical

(r)と(adr)の算術比較または
論理比較を行い比較結果に
よりFRを設定する

1

1

比較演算
(レジスタ間)

CPA
CPL

r1, r2
r1, r2

compare arithmetic
compare logical

(r1)と(r2)の算術比較または
論理比較を行い比較結果に
よりFRを設定する

1

1

シフト演算
(レジスタと主記憶間)

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

符号を除き(r)をadrビット左シフト
符号を除き(r)をadrビット右シフト
符号を含み(r)をadrビット左シフト
符号を含み(r)をadrビット右シフト

2

2

2

2

分岐

JMI
JNZ
JZE
JPL
JOV
JUMP

adr [, x]
adr [, x]
adr [, x]
adr [, x]
adr [, x]
adr [, x]

jump on minus
jump on non zero
jump on zero
jump on plus
jump on overflow
unconditional jump

FRの値によって実効アドレスに分岐する
 〃
 〃
 〃
 〃
無条件に実効アドレスに分岐する

スタック操作

PUSH
POP

adr [, x]
r

push
pop

SP ← (SP) -L 1, (SP) ← adr
r  ← ( (SP) ),  SP ← (SP) +L 1

コール

CALL

adr [, x]

call subroutine

SP ← (SP) -L 1, (SP) ← (PR), PR ← adr 

リターン

RET

 

return from subroutine

PR  ← ( (SP) ),  SP ← (SP) +L 1

スーパバイザコール

SVC

adr [, x]

supervisor call

実効アドレスを引数として割り出しを行う。
実行後のGRとFRは不定となる。

ノーオペレーション

NOP

 

no operation

なにもしない


CASLⅡの命令の種類

命令は,
・ アセンブラ命令(START, END, DS, DC)
・ マクロ命令(IN, OUT)
・ 機械語命令(COMETⅡの命令)
からなる。

アセンブラ命令

START

[実行開始番地]

END

 

DS

語数

DC

定数 [, 定数 …]

マクロ命令

IN

入力領域, 入力文字長領域

OUT

出力領域, 出力文字長領域

RPUSH

GRの内容を,GR1,GR2,…,GR7 の順序でスタックに格納する。

RPOP

スタックの内容を順次取り出し,GR7,GR6,…,GR1 の順序でGRに

格納する

詳しくは,情報処理技術者試験センターのホームページ https://www.jitec.ipa.go.jp/

の中の「出題範囲」→「アセンブラ言語の仕様」を参照のこと。

COMETとCOMETⅡの対応表

COMET

COMETⅡ

LEA

LAD (ただしLADはフラグレジスタを変化させないので注意)

JMP

JUMP

JPZ

JPL と JZE を組み合わせて使う

ADD 

ADDA または ADDL

SUB

SUBA または SUBL

EXIT

RET