アセンブリ言語の命令、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。 //ステータスレジスタの値、結果が負の数。