■MOVF (move f) f レジスタの移動 |
書 式 |
[ラベル] MOVF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f) → (dest)
f レジスタの内容を,d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《Z》
演算結果が 0 の場合,Z=1.
演算結果が 0 でない場合,Z=0. |
実効サイクル |
1 |
|
|
|
|
|
|
|
|
■CLRF (clear f) f レジスタのゼロクリア |
書 式 |
[ラベル] CLRF f |
オペランド |
f:レジスタアドレス(00〜7FH) |
実効内容 |
00H → (f)
f レジスタの内容をゼロでクリアし,Z フラグをセットする. |
影響フラグ |
《Z》
Z=1. |
実効サイクル |
1 |
|
|
|
|
|
|
■ADDWF (add W and f) Wreg に f レジスタを加算 |
書 式 |
[ラベル] ADDWF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(Wreg) + (f) → (dest)
Wreg の内容に f レジスタの内容を加算し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《C,DC,Z》
8 bit がオーバーフローした場合,C=1.
下位 4 bit がオーバーフローした場合,DC=1.
結果が 0 の場合,Z=1.
上記以外の場合,C=0,DC=0,Z=0. |
実効サイクル |
1 |
|
|
|
|
■SUBWF (subtract W from f) f レジスタから Wreg を減算 |
書 式 |
[ラベル] SUBWF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f) - (Wreg) → (dest)
f レジスタの内容に Wreg の 2 の補数を加算し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《C,DC,Z》
結果が正の場合,C=1,Z=0.
結果が 0 の場合,C=1,Z=1.
結果が負の場合,C=0,Z=0. |
実効サイクル |
1 |
|
|
|
|
■ADDLW (add literal and W) Wreg にリテラルデータを加算 |
書 式 |
[ラベル] ADDLW k |
オペランド |
k:リテラルデータ(00〜7FH) |
実効内容 |
k + (Wreg) → (Wreg)
8 bit のリテラルデータに Wreg の内容を加算し,結果を Wreg に上書きする. |
影響フラグ |
《C,DC,Z》
8 bit がオーバーフローした場合,C=1.
下位 4 bit がオーバーフローした場合,DC=1.
結果が 0 の場合,Z=1.
上記以外の場合,C=0,DC=0,Z=0. |
実効サイクル |
1 |
|
|
|
|
|
|
■ANDWF (and W with f) Wreg と f レジスタとの論理積演算 |
書 式 |
[ラベル] ANDWF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(Wreg) AND (f) → (dest)
Wreg の内容と f レジスタの内容との論理積(AND)演算をし,結果を d=0 なら
Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《Z》
演算結果が 0 の場合,Z=1.
演算結果が 0 でない場合,Z=0. |
実効サイクル |
1 |
|
|
|
|
■IORWF (inclusive OR W with f) Wreg と f レジスタとの論理和演算 |
書 式 |
[ラベル] IORWF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(Wreg) OR (f) → (dest)
Wreg の内容と f レジスタの内容との論理和(OR)演算をし,結果を d=0 なら
Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《Z》
演算結果が 0 の場合,Z=1.
演算結果が 0 でない場合,Z=0. |
実効サイクル |
1 |
|
|
|
|
■XORWF (exclusive OR W with f) Wreg と f レジスタとの排他的論理和演算 |
書 式 |
[ラベル] XORWF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(Wreg) XOR (f) → (dest)
Wreg の内容と f レジスタの内容との排他的論理和(XOR)演算をし,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《Z》
演算結果が 0 の場合,Z=1.
演算結果が 0 でない場合,Z=0. |
実効サイクル |
1 |
|
|
|
|
|
|
|
|
|
|
■COMF (complement f) f レジスタの補数の演算 |
書 式 |
[ラベル] COMF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
complement(f) → (dest)
f レジスタの内容の補数を演算し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《Z》
演算結果が 0 の場合,Z=1.
演算結果が 0 でない場合,Z=0. |
実効サイクル |
1 |
|
|
|
|
■DECF (decrement f) f レジスタのカウントダウン |
書 式 |
[ラベル] DECF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f) - 1 → (dest)
f レジスタの内容から 1 を減算し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《Z》
演算結果が 0 の場合,Z=1.
演算結果が 0 でない場合,Z=0. |
実効サイクル |
1 |
|
|
|
|
■INCF (incrememt f) f レジスタのカウントアップ |
書 式 |
[ラベル] INCF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f) + 1 → (dest)
f レジスタの内容に 1 を加算し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《Z》
演算結果が 0 の場合,Z=1.
演算結果が 0 でない場合,Z=0. |
実効サイクル |
1 |
|
|
|
|
■DECFSZ (decrement f, skip if 0) f レジスタを減算して結果が 0 ならスキップ |
書 式 |
[ラベル] DECFSZ f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f) - 1 → (dest) ;skip if result=0
f レジスタの内容から 1 を減算し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする.
また,もし結果が 0 なら,次の命令を NOP に変えて実行する(スキップ).したがって,スキップ時は
2 サイクル命令となる. |
影響フラグ |
なし |
実効サイクル |
1,スキップするときは 2 |
|
|
|
|
■INCFSZ (increment f, skip if 0) f レジスタを加算して結果が 0 ならスキップ |
書 式 |
[ラベル] INCFSZ f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f) + 1 → (dest) ;skip if result=0
f レジスタの内容に 1 を加算し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする.
また,もし結果が 0 なら,次の命令を NOP に変えて実行する(スキップ).したがって,スキップ時は
2 サイクル命令となる. |
影響フラグ |
なし |
実効サイクル |
1,スキップするときは 2 |
|
|
|
|
|
|
|
|
|
|
|
|
■RLF (rotate left through carry) f レジスタを左に巡回シフト |
書 式 |
[ラベル] RLF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f<n>) → (dest<n+1>) n:0〜6
(f<7>) → C
C → (dest<0>)
f レジスタの内容を,キャリも含めて 1 ビット左に移動し,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《C》
C=f レジスタの最上位ビット |
実効サイクル |
1 |
|
|
|
|
■RRF (rotate right rhrough carry) f レジスタを右に巡回シフト |
書 式 |
[ラベル] RRF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f<n>) → (dest<n-1>) n:0〜6
(f<0>) → C
C → (dest<7>)
f レジスタの内容を,キャリも含めて 1 ビット右に移動し,結果を d=0 なら
Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
《C》
C=f レジスタの最上位ビット |
実効サイクル |
1 |
|
|
|
|
■SWAPF (swap nibbles in f) f レジスタの上位と下位の入れ替え |
書 式 |
[ラベル] SWAPF f,d |
オペランド |
f:レジスタアドレス(00〜7FH)
d:結果格納先(0 または 1) |
実効内容 |
(f<3:0>) → (f<7:4>)
(f<7:4>) → (f<3:0>)
f レジスタの内容の上位と下位 4 ビットの入れ替えを行い,結果を d=0 なら Wreg に,d=1 なら f レジスタに上書きする. |
影響フラグ |
なし |
実効サイクル |
1 |
|
|
|
|
■GOTO (go to) 指定番地にジャンプする |
書 式 |
[ラベル] GOTO k |
オペランド |
k:リテラルデータ(000〜7FFH) |
実効内容 |
k → PC<10:0>
(PCLATH<4:3>) → PC<12:11>
無条件で指定番地へジャンプする.11 bit のリテラルアドレスを PC レジスタに上書きし,さらに
PC の上位に PCLATH を上書きすることでジャンプする. |
影響フラグ |
なし |
実効サイクル |
2 |
|
|
|
|
■CALL (call subroutine) サブルーチンにジャンプすプする |
書 式 |
[ラベル] CALL k |
オペランド |
k:リテラルデータ(000〜7FFH) |
実効内容 |
(PC) + 1 → スタック
k → PC<10:0>
(PCLATH<4:3>) → PC<12:11>
サブルーチンをコールする.
戻り番地(PC+1)をスタックに格納後,11 bit のリテラルアドレスを PC レジスタに上書きし,さらにPC の上位に PCLATHを 上書きすることでジャンプする. |
影響フラグ |
なし |
実効サイクル |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
■SLEEP (sleep) スリープモードにする |
書 式 |
[ラベル] SLEEP |
オペランド |
なし |
実効内容 |
0 → PD
1 → TO
0 → (WDT prescaler)
パワーダウンステータスビット(PD)をリセットし,タイムアウトステータスビット(TO)をセットする.
さらにウォッチドッグタイマをリセット後,オシレータを停止させてプロセッサをスリープモードにする. |
影響フラグ |
TO,PD
TO=1
PD=0 |
実効サイクル |
1 |
|
|
|
|