上位8ビット 下位8ビット | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |(ビット番号) ↑ 符号(負:1、非負:0)
GR
(16ビット)、SP
(16ビット)、PR
(16ビット)、FR
(3ビット)の 4 種類がある。
GR
(汎用レジスタ、General Register)は、GR0
~GR7
の8個があり、
算術、論理、比較、シフトなどの演算に用いる。
このうち、GR1
~GR7
のレジスタは、指標レジスタ(index register)
としてアドレスの修飾にも用いる。
SP
(スタックポインタ、Stack Pointer)は、
スタックの最上段のアドレスを保持している。
PR
(プログラムレジスタ、Program Register)は、
次に実行すべき命令語の先頭アドレスを保持している。
FR
(フラグレジスタ、Flag Register)は、
OF
(Overflow Flag)、SF
(Sign Flag)、ZF
(Zero Flag)と呼ぶ
3個のビットからなり、演算命令などの実行によって次の値が設定される。
これらの値は、条件付き分岐命令で参照される。
OF
SF
ZF
命令の形式及びその機能を示す。 ここで、一つの命令コードに対し2種類のオペランドがある場合、 上段はレジスタ間の命令、下段はレジスタと主記憶間の命令を表す。
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
ロード LoaD | LD | r1,r2 —— r,adr[,x] | r1 ← (r2) —— r ← (実効アドレス) | ○ ただし、 OF には0 が設定される。
|
ストア STore | ST | r,adr[,x] | 実効アドレス ← (r) | –
|
ロードアドレス Load ADdress | LAD | r,adr[,x] | r ← 実効アドレス | –
|
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
算術加算 ADD Arithmetic | ADDA | r1,r2 —— r,adr[,x] | r1 ← (r1) + (r2) —— r ← (r) + (実効アドレス) | ○
|
論理加算 ADD Logical | ADDL | r1,r2 —— r,adr[,x] | r1 ← (r1) +L (r2) —— r ← (r) +L (実効アドレス) | ○
|
算術減算 SUBtract Arithmetic | SUBA | r1,r2 —— r,adr[,x] | r1 ← (r1) - (r2) —— r ← (r) - (実効アドレス) | ○
|
論理減算 SUBtract Logical | SUBL | r1,r2 —— r,adr[,x] | r1 ← (r1) - L(r2) —— r ← (r) - L(実効アドレス) | ○
|
論理積 AND | AND | r1,r2 —— r,adr[,x] | r1 ← (r1) AND (r2) —— r ← (r) AND (実効アドレス) | ○ ただし、 OF には0 が設定される。
|
論理和 OR | OR | r1,r2 —— r,adr[,x] | r1 ← (r1) OR (r2) —— r ← (r) OR (実効アドレス) | ○ ただし、 OF には0 が設定される。
|
排他的論理和 eXclusive OR | XOR | r1,r2 —— r,adr[,x] | r1 ← (r1) XOR (r2) —— r ← (r) XOR (実効アドレス) | ○ ただし、 OF には0 が設定される。
|
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
算術比較 ComPare Arithmetic | CPA | r1,r2 —— r,adr[,x] | (r1) と(r2) 、又は(r) と(実効アドレス) の算術比較を行い、比較結果によって、FR に次の値を設定する。
| ○ ただし、 OF には0 が設定される。
|
論理比較 ComPare Logical | CPL | r1,r2 —— r,adr[,x] | (r1) と(r2) 、又は(r) と(実効アドレス) の論理比較を行い、比較結果によって、FR に次の値を設定する。
| ○ ただし、 OF には0 が設定される。
|
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
算術左シフト Shift Left Arithmetic | SLA | r,adr[,x] | 符号を除き(r) を実効アドレスで指定したビット数だけ左にシフトする。シフトの結果、空いたビット位置には、0 が入る。 | ○ ただし、 OF にはレジスタから最後に送り出されたビットの値が設定される。
|
算術右シフト Shift Right Arithmetic | SRA | r,adr[,x] | 符号を除き(r) を実効アドレスで指定したビット数だけ右にシフトする。シフトの結果、空いたビット位置には、符号と同じものが入る。 | ○ ただし、 OF にはレジスタから最後に送り出されたビットの値が設定される。
|
論理左シフト Shift Left Logical | SLL | r,adr[,x] | 符号を含み(r) を実効アドレスで指定したビット数だけ左にシフトする。シフトの結果,空いたビット位置には0 が入る。 | ○ ただし、 OF にはレジスタから最後に送り出されたビットの値が設定される。
|
論理右シフト Shift Right Logical | SRL | r,adr[,x] | 符号を含み(r) を実効アドレスで指定したビット数だけ右にシフトする。シフトの結果、空いたビット位置には0 が入る。 | ○ ただし、 OF にはレジスタから最後に送り出されたビットの値が設定される。
|
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
正分岐 Jump on Plus | JPL | adr[,x] | FR の値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。
| –
|
負分岐 Jump on MINUS | JMI | adr[,x] | FR の値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。
| –
|
非零分岐 Jump on Non Zero | JNZ | adr[,x] | FR の値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。
| –
|
零分岐 Jump on ZEro | JZE | adr[,x] | FR の値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。
| –
|
オーバーフロー分岐 Jump on OVerflow | JOV | adr[,x] | FR の値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。
| –
|
無条件分岐 unconditional Jump | JUMP | adr[,x] | 無条件に実効アドレスに分岐する。 | –
|
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
プッシュ PUSH | PUSH | adr[,x] | SP ← (SP)-L1 , (SP)← (実効アドレス) | –
|
ポップ POP | POP | r | r ← ( (SP) ) , SP ← (SP) +L 1 | –
|
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
コール CALL subroutine | CALL | adr[,x] | SP ← (SP)-L 1 , (SP) ← (PR) , PR ← 実効アドレス | –
|
リターン RETrun form subroutine | RET | PR ← ( (SP) ) , SP ← (SP) +L 1 | –
|
命令 | 書き方 命令コード | 書き方 オペランド | 命令の説明 | FRの設定
|
---|---|---|---|---|
スーパーバイザコール SuperVisor CALL | SVC | adr[,x] | 実効アドレスを引数として割出しを行う。実行後のGR とFR は不定となる。 | –
|
ノーオペレーション No operation | NOP | 何もしない。 | –
|
r
, r1
, r2
GR
を示す。指定できるGR
はGR0
~GR7
adr
0
~65535
x
GR
を示す。指定できるGR
はGR1
~GR7
[ ]
( )
実効アドレス
adr
とx
の内容との論理加算値又はその値が示す番地
←
+L
, -L
FR
の設定