アセンブリ言語の命令、XORLW命令。
XORLW命令の解説。
書式;XORLW K
kは、定数データ 0~255(0x00~0xFF)、または、ラベル。
動作;W XOR k ➡ W
ワーキングレジスタの内容と定数データのXORを計算し、結果をワーキングレジスタに上書き。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;計算結果が0の時➡1、それ以外➡0。
例;
1.
W 0x65 //命令実行前の値
XORLW 0x96 //命令実行
W 0b01010101 //0x65の2進数
k 0b10010110 //0x96の2進数
XOR 0b11000011 //WとkのXORを計算、結果が0ではない。
W 0xC3 //命令実行後の値
Z➡0。 //ステータスレジスタの値
2.
W 0x55 //命令実行前の値
XORLW 0x55 //命令実行
W 0b01010101 //0x55の2進数
k 0b01010101 //0x55の2進数
XOR 0b00000000 //WとkのXORを計算、結果が0。
W 0x00 //命令実行後の値
Z➡1。 //ステータスレジスタの値
アセンブリ言語の命令、XORWF命令。
XORWF命令の解説。
書式;XORWF f,d
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
dは、結果の上書き先が、ワーキングレジスタか、汎用レジスタの選択。
動作;W XOR f ➡ W or f
ワーキングレジスタの内容と汎用レジスタ内容のXORを計算し、結果をdで指定されたレジスタに上書き。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;計算結果が0の時➡1、それ以外➡0。
例;
1. 汎用レジスタ番地;0x30とする。
W 0x65 //命令実行前の値
f 0x96 //命令実行前の値(0x30番地の汎用レジスタの内容)
d 0 //書き込み先のレジスタ指定
XORLW 0x30,0 //命令実行
W 0b01010101 //0x65の2進数
f 0b10010110 //0x96の2進数
XOR 0b11000011 //WとfのXORを計算、結果が0ではない。
W 0xC3 //命令実行後の値、dが0だから、こちらに上書き。
f 0x96 //命令実行後の値、こちらは、変化なし。
Z➡0。 //ステータスレジスタの値
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
W 0x55 //命令実行前の値
f 0x55 //命令実行前の値(0x30番地の汎用レジスタの内容)
d 1 //書き込み先のレジスタ指定
XORLW Data,1 //命令実行
W 0b01010101 //0x55の2進数
f 0b01010101 //0x55の2進数
XOR 0b00000000 //WとfのXORを計算、結果が0。
W 0x55 //命令実行後の値、こちらは、変化なし。
f 0x00 //命令実行後の値、dが1だから、こちらに上書き。
Z➡1。 //ステータスレジスタの値
アセンブリ言語の命令、SWAPF命令。
SWAPF命令の解説。
書式;SWAPF f,d
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
dは、結果の上書き先が、ワーキングレジスタか、汎用レジスタの選択。
動作;f上位 ⇆ f下位 ➡ f or W
汎用レジスタの内容の上位4ビットと下位4ビットを入れ替えて、dで指定されたレジスタに上書き。
C;影響しない。
DC;影響しない。
Z;影響しない。
例;
1. 汎用レジスタ番地;0x30とする。
W 0x1F //命令実行前の値
f 0x3A //命令実行前の値
SWAPF 0x30,0 //命令実行
fの内容の上位4ビットと下位4ビットを入れ替えて、dで指定されたレジスタに上書き。
W 0xA3 //命令実行後の値、dが0だから、こちらに上書き。
f 0x3A //命令実行後の値、こちらは、変化なし。
C、DC、Z //ステータスレジスタの値、影響しない。
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
W 0x25 //命令実行前の値
f 0x0A //命令実行前の値
SWAPF Data,1 //命令実行
fの内容の上位4ビットと下位4ビットを入れ替えて、dで指定されたレジスタに上書き。
W 0x25 //命令実行後の値、こちらは、変化なし。
f 0xA0 //命令実行後の値、dが1だから、こちらに上書き。
C、DC、Z //ステータスレジスタの値、影響しない。
アセンブリ言語の命令、SUBWF命令。
SUBWF命令の解説。
書式;SUBWF f,d
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
dは、結果の上書き先が、ワーキングレジスタか、汎用レジスタの選択。
動作;f - W ➡ f or W
汎用レジスタの内容からワーキングレジスタの内容を減算し、dで指定されたレジスタに上書き。
(0x01~0x0x7F(1~127)が正の数、0xFF~0x81(-1~ー127)が負の数。)
C;結果が正または0の時 ➡ 1、結果が負の時 ➡ 0。
DC;結果が正または0の時 ➡ 1、結果が負の時 ➡ 0。
Z;結果が0の時 ➡ 1、結果が正または負の時 ➡ 0。
例;
1. 汎用レジスタ番地;0x30とする。
W 0x1F(31) //命令実行前の値
f 0x3A(58) //命令実行前の値
SUBWF 0x30,0 //命令実行
fからWの内容を減算して、ワーキングレジスタに上書き。
W 0x1B(27) //命令実行後の値、dが0だから、こちらに上書き。
f 0x3A(58) //命令実行後の値、こちらは、変化なし。
C➡1。 //ステータスレジスタの値、結果が正の数。
DC➡1。 //ステータスレジスタの値、結果が正の数。
Z➡0。 //ステータスレジスタの値、結果が正の数。
2. 汎用レジスタ番地;0x30とする。
W 0x65(101) //命令実行前の値
f 0x65(101) //命令実行前の値
SUBWF 0x30,1 //命令実行
fからWの内容を減算して、汎用レジスタに上書き。
W 0x65(101) //命令実行前の値、こちらは、変化なし。
F 0x00(0) //命令実行後の値、dが1だから、こちらに上書き。
C➡1。 //ステータスレジスタの値、結果が0。
DC➡1。 //ステータスレジスタの値、結果が0。
Z➡1。 //ステータスレジスタの値、結果が0。
3. 汎用レジスタ番地;0x30(ラベル;Data)とする。
W 0x25(37) //命令実行前の値
f 0x0A(10) //命令実行前の値
SUBWF Data,1 //命令実行
kからWの内容を減算して、ワーキングレジスタに上書き。
W 0x25(37) //命令実行後の値、こちらは、変化なし。
f 0xE5(-27) //命令実行後の値、dが1だから、こちらに上書き。
C➡0。 //ステータスレジスタの値、結果が負の数。
DC➡0。 //ステータスレジスタの値、結果が負の数。
Z➡0。 //ステータスレジスタの値、結果が負の数。
アセンブリ言語の命令、SUBLW命令。
SUBLW命令の解説。
書式;SUBLW k
kは、リテラルデータ 0~255(0x00~0xFF)。
動作; k - W ➡ W
リテラルデータからワーキングレジスタの内容を減算し、ワーキングレジスタに上書き。
(0x01~0x0x7F(1~127)が正の数、0xFF~0x81(-1~ー127)が負の数。)
C;結果が0または正の数 ➡ 1、結果が負の数 ➡ 0。
DC;影響しない
Z;結果が0 ➡ 1、結果が正または負の数 ➡ 0。
例;
1.
W 0x1F(31) //命令実行前の値
k 0x3A(58) //命令実行前の値(リテラルデータ)
SUBLW 0x3A //命令実行
kからWの内容を減算して、ワーキングレジスタに上書き。
W 0x1B(27) //命令実行後の値
C➡1。 //ステータスレジスタの値、結果が正の数。
Z➡0。 //ステータスレジスタの値、結果が正の数。
2.
W 0x65(101) //命令実行前の値
k 0x65(101) //命令実行前の値(リテラルデータ)
SUBLW 0x65 //命令実行
kからWの内容を減算して、ワーキングレジスタに上書き。
W 0x00(0) //命令実行後の値
C➡1。 //ステータスレジスタの値、結果が0。
Z➡1。 //ステータスレジスタの値、結果が0。
3.
W 0x25(37) //命令実行前の値
k 0x0A(10) //命令実行前の値(リテラルデータ)
SUBLW 0x0A //命令実行
kからWの内容を減算して、ワーキングレジスタに上書き。
W 0xE5(-27) //命令実行後の値
C➡0。 //ステータスレジスタの値、結果が負の数。
Z➡0。 //ステータスレジスタの値、結果が負の数。
アセンブリ言語の命令、RRF命令。
RRF命令の解説。
書式;RRF f,d
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
dは、結果の上書き先が、ワーキングレジスタか、汎用レジスタの選択。
動作; C f C f
0 10010110 ➡ 0 01001011
Cと汎用レジスタの内容のビットを右に1回シフトし、dで指定されたレジスタに上書き。
C;影響する、例を参照。
DC;影響しない
Z;影響しない
例;
1. 汎用レジスタ番地;0x30とする。
W 0x65 //命令実行前の値
0b01100101 //2進数表記
f 0x96 //命令実行前の値(0x30番地の汎用レジスタの内容)
0b10010110 //2進数表記
C 0 //ステータスレジスタの値
d 0 //書き込み先のレジスタ指定
RRF 0x30,0 //命令実行
0 10010110 ➡ 0 01001011 //Cの内容がfの7ビットにはいり、fの各ビットが右にずれて、fの一番右のビットの内容がCにはいる。
W 0x4B //命令実行後の値、dが0だから、こちらに上書き。
f 0x96 //命令実行後の値、こちらは、変化なし。
Z➡0。 //ステータスレジスタの値
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
W 0x6A //命令実行前の値
0b01101010 //2進数表記
f 0x15 //命令実行前の値(0x30番地の汎用レジスタの内容)
0b00010101 //2進数表記
C 1 //ステータスレジスタの値
d 1 //書き込み先のレジスタ指定
RRF Data,1 //命令実行
1 00010101 ➡ 1 10001010 //Cの内容がfの7ビットにはいり、fの各ビットが右にずれて、fの一番右のビットの内容がCにはいる。
W 0x6A //命令実行後の値、こちらは、変化なし。
f 0x8A //命令実行後の値、dが1だから、こちらに上書き。
Z➡1。 //ステータスレジスタの値
アセンブリ言語の命令、RLF命令。
RLF命令の解説。
書式;RLF f,d
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
dは、結果の上書き先が、ワーキングレジスタか、汎用レジスタの選択。
動作; C f C f
0 10010110 ➡ 1 00101100
Cと汎用レジスタの内容のビットを左に1回シフトし、dで指定されたレジスタに上書き。
C;影響する、例を参照。
DC;影響しない
Z;影響しない
例;
1. 汎用レジスタ番地;0x30とする。
W 0x65 //命令実行前の値
0b01100101 //2進数表記
f 0x96 //命令実行前の値(0x30番地の汎用レジスタの内容)
0b10010110 //2進数表記
C 0 //ステータスレジスタの値
d 0 //書き込み先のレジスタ指定
RLF 0x30,0 //命令実行
0 10010110 ➡ 1 00101100 //Cの内容がfの0ビットにはいり、fの各ビットが左にずれて、fの一番左のビットの内容がCにはいる。
W 0x2C //命令実行後の値、dが0だから、こちらに上書き。
f 0x96 //命令実行後の値、こちらは、変化なし。
Z➡1。 //ステータスレジスタの値
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
W 0x6A //命令実行前の値
0b01101010 //2進数表記
f 0x16 //命令実行前の値(0x30番地の汎用レジスタの内容)
0b00010110 //2進数表記
C 1 //ステータスレジスタの値
d 1 //書き込み先のレジスタ指定
RLF Data,1 //命令実行
1 00010110 ➡ 0 00101101 //Cの内容がfの0ビットにはいり、fの各ビットが左にずれて、fの一番左のビットの内容がCにはいる。
W 0x6A //命令実行後の値、こちらは、変化なし。
f 0x2D //命令実行後の値、dが1だから、こちらに上書き。
Z➡0。 //ステータスレジスタの値