アセンブリ言語の命令、GOTO命令。
GOTO命令の解説。
書式;GOTO k
kは、定数データ 0~2047(0x00~0x7FF)、または、ラベル。
動作;k番地の命令に制御を移す。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;影響しない
例
1. GOTO命令のアドレスを0x30、飛び先番地を0xF0とする。
GOTO 0xF0 //命令実行
0xF0番地の命令に制御を移す。
2.GOTO命令のアドレスを0x32、飛び先番地を0xF5とする。
アセンブリ言語の命令、CALL命令。
CALL命令の解説。
書式;CALL k
kは、定数データ 0~2047(0x00~0x7FF)、または、ラベル。
動作;リターンアドレスをスタックに書き込み、k番地のサブルーチンに飛ぶ。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;影響しない
例
1. CALL命令のアドレスを0x30、サブルーチンのある番地を0xF0とする。
CALL 0xF0 //命令実行
スタックに、0x30+1 すなわち0x31を格納(自分の番地+1、自分の次の命令の番地)。
サブルーチンの0xF0番地の命令に制御を移す。
2.CALL命令のアドレスを0x32、サブルーチンのある番地を0xF5とする。
アセンブリ言語の命令、BTFSS命令。
BTFSS命令の解説。
書式;BTFSS f,b
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
bは、汎用レジスタビット指定 0~7。
動作;fのbビットが1? ➡ 1なら次の命令はNOP、0ならそのまま実行。
汎用レジスタのbビットが1か判定し、1なら、次の命令をNOPに変えて実行する。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;影響しない
例;
1. 汎用レジスタ番地;0x30とする。
f 0x96 //命令実行前の値(0x30番地の汎用レジスタの内容)
b 3 //汎用レジスタのビット指定
BTFSS 0x30,3 //命令実行
f 0b10010110 //汎用レジスタの2進数表記。
fの3ビット目が0なので、次の命令をそのまま実行する。
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
f 0xFF //命令実行前の値(0x30番地の汎用レジスタの内容)
b 1 //汎用レジスタのビット指定
BTFSS data,1 //命令実行
f 0b11111111 //汎用レジスタの2進数表記。。
fの1ビット目が1なので、次の命令をNOPに変えて実行する。
3. 汎用レジスタ番地;30とする。
アセンブリ言語の命令、BTFSC命令。
BTFSC命令の解説。
書式;BTFSC f,b
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
bは、汎用レジスタビット指定 0~7。
動作;fのbビットが0? ➡ 0なら次の命令はNOP、1ならそのまま実行。
汎用レジスタのbビットが0か判定し、0なら、次の命令をNOPに変えて実行する。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;影響しない
例;
1. 汎用レジスタ番地;0x30とする。
f 0x96 //命令実行前の値(0x30番地の汎用レジスタの内容)
b 3 //汎用レジスタのビット指定
BTFSC 0x30,3 //命令実行
f 0b10010110 //汎用レジスタの2進数表記。
fの3ビット目が0なので、次の命令をNOPに変えて実行する。
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
f 0xFF //命令実行前の値(0x30番地の汎用レジスタの内容)
b 1 //汎用レジスタのビット指定
BTFSC data,1 //命令実行
f 0b11111111 //汎用レジスタの2進数表記。。
fの1ビット目が0ではないので、次の命令をそのまま実行する。
3.汎用レジスタ番地;0x30(ラベル;Data)とする。
アセンブリ言語の命令、INCFSZ命令。
INCFSZ命令の解説。
書式;INCFSZ f,d
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
dは、結果の上書き先が、ワーキングレジスタか、汎用レジスタの選択。
動作;f + 1 ➡ W or f
汎用レジスタ内容に1を加算し、結果をdで指定されたレジスタに上書き。
汎用レジスタ内容に1を加算した結果が0なら、次の命令をNOPに変えて実行する。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;影響しない
例;
1. 汎用レジスタ番地;0x30とする。
W 0x65 //命令実行前の値
f 0x96 //命令実行前の値(0x30番地の汎用レジスタの内容)
d 0 //書き込み先のレジスタ指定
INCFSZ 0x30,0 //命令実行
W 0x97 //命令実行後の値、dが0だから、こちらに上書き。
f 0x96 //命令実行後の値、こちらは、変化なし。
結果が0ではないので、次の命令をそのまま実行する。
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
W 0x65 //命令実行前の値
f 0xFF //命令実行前の値(0x30番地の汎用レジスタの内容)
d 1 //書き込み先のレジスタ指定
INCFSZ data,1 //命令実行
W 0x95 //命令実行後の値、こちらは、変化なし。
f 0x00 //命令実行後の値、dが1だから、こちらに上書き。
結果が0なので、次の命令をNOPに変えて実行する。
アセンブリ言語の命令、DECFSZ命令。
DECFSZ命令の解説。
書式;DECFSZ f,d
fは、汎用レジスタアドレス 0~127(0x00~0x7F)、または、ラベル。
dは、結果の上書き先が、ワーキングレジスタか、汎用レジスタの選択。
動作;f - 1 ➡ W or f
汎用レジスタ内容から1を減算し、結果をdで指定されたレジスタに上書き。
汎用レジスタ内容から1を減算した結果が0なら、次の命令をNOPに変えて実行する。
ステータスレジスタへの影響
C;影響しない
DC;影響しない
Z;影響しない
例;
1. 汎用レジスタ番地;0x30とする。
W 0x65 //命令実行前の値
f 0x96 //命令実行前の値(0x30番地の汎用レジスタの内容)
d 0 //書き込み先のレジスタ指定
DECFSZ 0x30,0 //命令実行
W 0x95 //命令実行後の値、dが0だから、こちらに上書き。
f 0x96 //命令実行後の値、こちらは、変化なし。
結果が0ではないので、次の命令をそのまま実行する。
2. 汎用レジスタ番地;0x30(ラベル;Data)とする。
W 0x65 //命令実行前の値
f 0x01 //命令実行前の値(0x30番地の汎用レジスタの内容)
d 1 //書き込み先のレジスタ指定
DECFSZ data,1 //命令実行
W 0x95 //命令実行後の値、こちらは、変化なし。
f 0x00 //命令実行後の値、dが1だから、こちらに上書き。
結果が0なので、次の命令をNOPに変えて実行する。