PC | 16bit | プログラムカウンタ |
ST | 16bit | ステータスレジスタ |
WP | 16bit | ワークスペースポインタ |
R0 - R15 | 16bit | ワークスペースレジスタ※1 |
※1 | R0-R15は専用のレジスタを持っているのではなく、WPレジスタ+(ワークスペースレジスタ番号×2)のメモリに対して読み書きを行うためのインデックス番号 (WP=0xFF00時にR1を指定した場合、メモリの0xFF02が対象) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
L> | A> | EQ | C | OV | OP | X | * | * | * | OVEN | * | INTERRUPT MASK |
L> |
| ||||
A> |
| ||||
EQ |
| ||||
C |
| ||||
OV |
| ||||
OP |
| ||||
X |
| ||||
* | 未使用※1 | ||||
OV EN |
| ||||
INTERRUPT MASK | 割り込みマスク(0で割り込み禁止) |
※1 | 演算などの影響は受けないため、ユーザーが自由に使用可 |
Rn | ワークスペースレジスタR0-R15。 |
SA | 操作対象元のアドレスで、アドレッシングモードによる指定。 |
DA | 操作対象先のアドレスで、アドレッシングモードによる指定。 |
#4 | 符号なし4bit値(0-15)。 |
#16 | 符号なし16bit値(0-65535)。 |
#d | 相対アドレス(-256 - 254)。 |
SA/DAで指定するアドレッシングモードは以下の5つ。
表記 | TS/TD値 | 説明 |
---|---|---|
Rn | 0 |
ワークスペースレジスタアドレス。 ワークスペースレジスタ値を、アドレスとして使用。 |
*Rn | 1 |
ワークスペースレジスタ間接アドレス。 ワークスペースレジスタ値の指すアドレスのメモリから取得した値を、アドレスとして使用。 |
@LABEL | 2 |
直接アドレス。 16bitの定数。 |
@TABLE(Rn) | 2 |
インデックスアドレス。 16bitの定数+指定のワークスペースレジスタ値を、アドレスとして使用。 ※R0を直接アドレス(@LABEL)として使用するため、指定できるのはR1-R15。 |
*Rn+ | 3 |
オートインクリメントありワークスペースレジスタ間接アドレス。 *Rnの後、参照したワークスペースレジスタ値を、1バイトアクセス時は+1、2バイトアクセス時は+2する。 |
*SA / *DA | SA/DAの指すメモリアドレスの内容。 |
@SA / @DA | SA/DAの指すCRUアドレスの内容。 |
R0R1 | R0を上位16bit、R1を下位16bitとした32bit値。 |
RnRm | Rnで指定したワークスペースレジスタ番号を上位16bit、Rnに+1した指定したレジスタ番号を下位16bitとした32bit値。 |
[:] | ビット |
L | L>フラグ |
A | A>フラグ |
E | EQフラグ |
C | Cフラグ |
V | OVフラグ |
P | OPフラグ |
X | Xフラグ |
I | OV ENフラグ |
M | INTERRUPT MASK |
- | 変化なし |
* | 命令の実行により変化 |
形式 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | OPCODE | B | TD | D | TS | S | ||||||||||
2 | OPCODE | D | TS | S | ||||||||||||
3 | OPCODE | TS | S | |||||||||||||
4 | OPCODE | C | TS | S | ||||||||||||
5 | OPCODE | 符号あり8bit値 | ||||||||||||||
6 | OPCODE | C | W | |||||||||||||
7 | OPCODE | 0 | W | |||||||||||||
16bit値 | ||||||||||||||||
8 | OPCODE | 0 | ||||||||||||||
16bit値 | ||||||||||||||||
9 | OPCODE | W | ||||||||||||||
10 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
11 | OPCODE | 0 | 0 | 0 | 0 | 0 |
1ステート = 4クロック |
ここで書いているのはC1のみで、C2/W/XM1/XM2は含めない。
16bitバスで接続されていないオフチップへのアクセスは+1、また一部命令がオフチップへのアクセス時に補正が掛かる(たぶん)
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
LI | Rn,#16 | Rn ← #16 | ***------ | 7 | 4 | 3 | |
MOV | SA,DA | *DA ← *SA | ***------ | 1 | 2 | 3 | |
MOVB | SA,DA | *DA[0:7] ← *SA[0:7] | ***--*--- | 1 | 2 | 3 | |
CLR | SA | *SA ← 0 | --------- | 3 | 2 | 3 | |
SETO | SA | *SA ← 0xffff | --------- | 3 | 2 | 3 | |
LWPI | #16 | WP ← #16 | --------- | 8 | 4 | 4 | |
LIMI | #16 | ST.IM ← #16[12:15] | --------* | 8 | 4 | 5 | |
STST | Rn | Rn ← ST | --------- | 9 | 2 | 3 | |
LST | Rn | ST ← Rn | ********* | 9 | 2 | 5 | |
STWP | Rn | Rn ← WP | --------- | 9 | 2 | 3 | |
LWP | Rn | WP ← Rn | --------- | 9 | 2 | 4 |
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
SWPB | SA | *SA[0:7] ⇔ *SA[8:15] | --------- | 3 | 2 | 13 |
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
AI | #16,Rn | Rn ← Rn + #16 | *****---- | 7 | 4 | 4 | |
A | SA,DA | *DA ← *DA + *SA | *****---- | 1 | 2 | 4 | |
AB | SA,DA | *DA[0:7] ← *DA[0:7] + *SA[0:7] | ******--- | 1 | 2 | 4 | |
CI | #16,Rn | Rn - #16 | ***------ | 7 | 4 | 4 | |
C | SA,DA | *SA - *DA | ***------ | 1 | 2 | 4 | |
CB | SA,DA | *SA[0:7] - *DA[0:7] | ***--*--- | 1 | 2 | 4 | |
S | SA,DA | *DA ← *DA - *SA | *****---- | 1 | 2 | 4 | |
SB | SA,DA | *DA[0:7] ← *DA[0:7] - *SA[0:7] | ******--- | 1 | 2 | 4 | |
INC | SA | *SA ← *SA + 1 | *****---- | 3 | 2 | 3 | |
INCT | SA | *SA ← *SA + 2 | *****---- | 3 | 2 | 3 | |
DEC | SA | *SA ← *SA - 1 | *****---- | 3 | 2 | 3 | |
DECT | SA | *SA ← *SA - 2 | *****---- | 3 | 2 | 3 | |
MPY | SA,Rn | RnRm ← *SA * Rn | --------- | 2 | 2 | 23 | 符号なし乗算 |
MPYS | SA | R0R1 ← *SA * R0 | ***------ | 3 | 2 | 25 | 符号あり乗算 |
DIV | SA,Rn |
Rn ← RnRm / *SA Rm ← RnRm % *SA | ----*---- | 2 | 2 | 6/28 | 符号なし剰余算 |
DIVS | SA |
R0 ← R0R1 / *SA R1 ← R0R1 % *SA | ***-*---- | 3 | 2 | 10/33 | 符号あり剰余算 |
ABS | SA |
if *SA < 0 then if *SA <> -32768 then *SA* ← -*SA else ST.O ← 1 | *****---- | 3 | 2 | 3 |
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
ANDI | #16,Rn | Rn ← Rn and #16 | ***------ | 7 | 4 | 4 | |
ORI | #16,Rn | Rn ← Rn or #16 | ***------ | 7 | 4 | 4 | |
SOC | SA,DA | *DA ← *DA or *SA | ***------ | 1 | 2 | 4 | |
SOCB | SA,DA | *DA[0:7] ← *DA[0:7] or *SA[0:7] | ***--*--- | 1 | 2 | 4 | |
XOR | SA,Rn | Rn ← *SA xor Rn | ***------ | 2 | 2 | 4 | |
INV | SA | *SA ← not *SA | ***------ | 3 | 2 | 3 | |
NEG | SA | *SA ← 0 - *SA | *****---- | 3 | 2 | 3 | |
SZC | SA,DA | *DA ← *DA and (not *SA) | ***------ | 1 | 2 | 4 | |
SZCB | SA,DA | *DA[0:7] ← *DA[0:7] and (not *SA[0:7]) | ***--*--- | 1 | 2 | 4 |
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
B | SA | PC ← SA | --------- | 3 | 2 | 3 | |
BL | SA |
R11 ← PC+2 PC ← SA | --------- | 3 | 2 | 5 | |
BLWP | SA |
R13 ← WP R14 ← PC+2 R15 ← ST WP = *(SA+0) PC = *(SA+2) | --------- | 3 | 2 | 11 | |
RTWP |
ST ← R15 PC ← R14 WP ← R13 | ********* | 10 | 2 | 6 | ||
XOP | SA,#4 |
R11 = SA R13 = WP R14 = PC+2 R15 = ST WP = (0x0040 + #4*4) PC = (0x0042 + #4*4) | ------**- | 2 | 2 | 15 | |
JEQ | #d |
if (ST.EQ = 1) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JGT | #d |
if (ST.A> = 1) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JH | #d |
if (ST.L> = 1) and (ST.EQ = 0) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JHE | #d |
if (ST.L> = 1) or (ST.EQ = 1) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JL | #d |
if (ST.L> = 0) and (ST.EQ = 0) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JLE | #d |
if (ST.L> = 0) or (ST.EQ = 1) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JLT | #d |
if (ST.A> = 0) and (ST.EQ = 0) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JMP | #d | PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JNC | #d |
if (ST.C = 0) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JNE | #d |
if (ST.EQ = 0) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JNO | #d |
if (ST.OV = 0) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JOC | #d |
if (ST.C = 1) then PC ← PC+2+#d | --------- | 5 | 2 | 3 | |
JOP | #d |
if (ST.OP = 1) then PC ← PC+2+#d | --------- | 5 | 2 | 3 |
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
SLA | Rn,#4 | ![]() | *****---- | 6 | 2 | 5+C/23/7+N | |
SRA | Rn,#4 | ![]() | ****----- | 6 | 2 | 5+C/23/7+N | |
SRC | Rn,#4 | ![]() | ****----- | 6 | 2 | 5+C/23/7+N | |
SRL | Rn,#4 | ![]() | ****----- | 6 | 2 | 5+C/23/7+N |
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
COC | SA,Rn |
if *SA = (*SA and Rn) then ST.EQ ← 1 | --*------ | 2 | 2 | 4 | |
CZC | SA,Rn |
if *SA = (*SA and (not Rn)) then ST.EQ ← 1 | --*------ | 2 | 2 | 4 | |
TB | #d | ST.EQ = @(R12+#d) | --*------ | 5 | 2 | 8 | |
SBO | #d | @(R12+#d) ← 1 | --------- | 5 | 2 | 8 | |
SBZ | #d | @(R12+#d) ← 0 | --------- | 5 | 2 | 8 | |
LDCR | SA,#4 |
A = R12 B = *SA while (#4+1) @A ← B[0] A ← A + 2 B ← B << 1 | ***--*--- | 4 | 2 | 41/9+2C | |
STCR | SA,#4 | @SA ← #4 | ***--*--- | 4 | 2 | 43/19+C/27+C | |
RSET | ST.IM ← 0 | --------* | 11 | 2 | 7 |
ニーモニック | 機能 | LAECVPXIM | 命令形式 | 命令長 | ステート(C1) | 補足 | |
X | SA | SAの命令を実行 | --------- | 3 | 2 | 2 | |
IDLE | 割り込みが発生するまで停止 | --------- | 11 | 2 | 28 | ||
CKOF | ???? | --------- | 11 | 2 | 7 | ||
CKON | ???? | --------- | 11 | 2 | 7 | ||
LREX | ???? | --------- | 11 | 2 | 7 |
実装済み |
未実装 |
未定義 |
オペコードが8bit以上のため別テーブル |
H/L | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
0 | $00 | $01 | $02 | $03 | $04 | $05 | $06 | $07 | SRA | SRL | SLA | SRC | ||||
1 | JMP | JLT | JLE | JEQ | JHE | JGT | JNE | JNC | JOC | JNO | JL | JH | JOP | SBO | SBZ | TB |
2 | COC | CZC | XOR | XOP | ||||||||||||
3 | LDCRC | STCR | MPY | DIV | ||||||||||||
4 | SZC DA,Rn | SZC DA,*Rn | SZC DA,@LABEL/@TABLE(Rn) | SZC DA,*Rn+ | ||||||||||||
5 | SZCB DA,Rn | SZCB DA,*Rn | SZCB DA,@LABEL/@TABLE(Rn) | SZCB DA,*Rn+ | ||||||||||||
6 | S DA,Rn | S DA,*Rn | S DA,@LABEL/@TABLE(Rn) | S DA,*Rn+ | ||||||||||||
7 | SB DA,Rn | SB DA,*Rn | SB DA,@LABEL/@TABLE(Rn) | SB DA,*Rn+ | ||||||||||||
8 | C DA,Rn | C DA,*Rn | C DA,@LABEL/@TABLE(Rn) | C DA,*Rn+ | ||||||||||||
9 | CB DA,Rn | CB DA,*Rn | CB DA,@LABEL/@TABLE(Rn) | CB DA,*Rn+ | ||||||||||||
A | A DA,Rn | A DA,*Rn | A DA,@LABEL/@TABLE(Rn) | A DA,*Rn+ | ||||||||||||
B | AB DA,Rn | AB DA,*Rn | AB DA,@LABEL/@TABLE(Rn) | AB DA,*Rn+ | ||||||||||||
C | MOV DA,Rn | MOV DA,*Rn | MOV DA,@LABEL/@TABLE(Rn) | MOV DA,*Rn+ | ||||||||||||
D | MOVB DA,Rn | MOVB DA,*Rn | MOVB DA,@LABEL/@TABLE(Rn) | MOVB DA,*Rn+ | ||||||||||||
E | SOC DA,Rn | SOC DA,*Rn | SOC DA,@LABEL/@TABLE(Rn) | SOC DA,*Rn+ | ||||||||||||
F | SOCB DA,Rn | SOCB DA,*Rn | SOCB DA,@LABEL/@TABLE(Rn) | SOCB DA,*Rn+ |
[0:7] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
$00 | LST | LWP | ||||||||||||||
$02 | LI | AI | ANDI | ORI | CI | STWP | STST | LWPI | ||||||||
$03 | LIMI | IDLE | RSET | RTWP | CKON | CKOF | LREX |
[0:7] | 0 | 1 | 2 | 3 |
$01 | DIVS | MPYS | ||
$04 | BLWP | B | X | CLR |
$05 | NEG | INV | INC | INCT |
$06 | DEC | DECT | BL | SWPB |
$07 | SETO | ABS |