凡例 Rd:データの読み出し元・結果の格納先レジスタ Rs:データの読み出し元レジスタ x:不定(何を書いても無視されます) k:定数 X:Xレジスタ=R13 Y:Yレジスタ=R14 SP:スタックポインタ=R15 PC:プログラムカウンタ I:割り込み許可フラグ(1:割り込み許可、0:割り込み禁止) Z:ゼロフラグ(演算後のRdが0の場合1) C:キャリフラグ(演算結果の16bit目が反映) N:ネガティブフラグ(演算後のRdの15bit目が反映) | ||||||
命令 | ニーモニック | 命令の概要 | フラグ変化 | |||
15~12bit目 | 11~8bit目 | 7~4bit目 | 3~0bit目 | |||
0 | x | x | x | NOP | 何もしない | なし |
1 | 0 | Rd | Rs | ADD,Rd,Rs | 加算(Rd+Rs) | Z,C,N |
1 | Rd | Rs | SUB,Rd,Rs | 減算(Rd-Rs) | Z,C,N | |
2 | Rd | Rs | AND,Rd,Rs | 論理積 | Z,N | |
3 | Rd | Rs | OR,Rd,Rs | 論理和 | Z,N | |
4 | Rd | Rs | XOR,Rd,Rs | 排他的論理和 | Z,N | |
5 | Rd | Rs | MOV,Rd,Rs | 移動 | Z,N | |
6 | Rd | Rs | NOT,Rd,Rs | 否定 | Z,N | |
7 | Rd | Rs | ADC,Rd,Rs | キャリ付き加算 | Z,C,N | |
8 | Rd | Rs | SBC,Rd,Rs | ボロー付き減算 | Z,C,N | |
9 | Rd | Rs | SHL,Rd,Rs | 左ローテートシフト | Z,C,N | |
a | Rd | Rs | SHR,Rd,Rs | 右ローテートシフト | Z,C,N | |
2 | 0 | Rd | x | LD,Rd,Y | メモリからの読み込み | なし |
8 | x | Rs | ST,Y,Rs | メモリへの書き込み | なし | |
3 | 0 | Rd | x | POP,Rd | (SP+1)の内容をRdに格納した後SPに1を加算 | なし |
1 | x | x | RET | (SP+1)の内容をPCに設定したあとにSPに1を加算 | なし | |
2 |
x |
x |
RETI |
割り込みからの復帰、Iの変化以外はRET同様 |
I |
|
3 |
x |
x |
POPS |
ステータスレジスタをPOP |
(I),Z,C,N |
|
8 | x | Rs | PUSH,Rs | SPの指す場所にRsを格納した後にSPから1を減算 | なし | |
9 | x | x | SPC | (PC+2)をSPの指す場所へ格納した後にSPから1を減算 | なし | |
a |
x |
x |
PSHS |
ステータスレジスタをPUSH |
なし |
|
b |
x |
x |
SEI |
Iをセット |
I |
|
c |
x |
x |
CLI |
Iをクリア |
I |
|
d |
x |
x |
(SPCI) |
割り込み時の内部処理用命令(使用は非推奨) |
I |
|
4 | 0 | x | x | JMP,X | Xレジスタの値へ無条件分岐 | なし |
1 | x | x | BZ,X | Z=1ならばXレジスタの値へ分岐 | なし | |
2 | x | x | BC,X | C=1ならばXレジスタの値へ分岐 | なし | |
3 | x | x | BN,X | N=1ならばXレジスタの値へ分岐 | なし | |
4 | k | k | BZ,-k | Z=1ならば(PC-k)へ分岐 | なし | |
5 | k | k | BC,-k | C=1ならば(PC-k)へ分岐 | なし | |
6 | k | k | BN,-k | N=1ならば(PC-k)へ分岐 | なし | |
7 | k | k | BZ,+k | Z=1ならば(PC+k)へ分岐 | なし | |
8 | k | k | BC,+k | C=1ならば(PC+k)へ分岐 | なし | |
9 | k | k | BN,+k | N=1ならば(PC+k)へ分岐 | なし | |
5 | k | k | k | JMP,k | kへ無条件分岐 | なし |
6 | k | k | k | RJMP,-k | (PC-k)へ無条件分岐 | なし |
7 | k | k | k | RJMP,+k | (PC+k)へ無条件分岐 | なし |
8 | Rd | k | k | LLI,Rd,k | Rdの7~0bit目にkを代入 | なし |
9 | Rd | k | k | LHI,Rd,k | Rdの15~8bit目にkを代入 | なし |
例:サブルーチンの呼び出しと復帰 |
SPC //PC+2を保存 RJMP,+2 //2つ先へ飛ぶ RJMP,+0 //ここで停止 ADD,R0,R1 //ここからサブルーチン RET //SPCから見て2つ先へ分岐 |
例:即値の読み込み |
LLI,R1,02h //R1の下位8bitに2を格納 ADD,R0,R1 //R1とR0を足してR0に格納 LHI,R0,ffh //R0の上位8bitにffhを格納 //この時点でR0=ff02hとなる |