20180629_06 繰り返し(ループ)処理の実現 制御命令とビットテスト命令とを組み合わせて使用する。 ビットテスト命令 BTFSC命令、BTFSS命令 (例) BTFSS 30H,4 ファイルレジスタ30H番地の(0から数えて)4ビット目が1であったら(setされていたら)、 つぎの命令(つぎのプログラムメモリアドレスに置かれた命令)を、ひとつ飛ばし(skip)する。 (別の例) BTFSS STATUS,Z ステータスレジスタ(専用レジスタのひとつ、05H番地)のZビット(bit2)が1であったら、 つぎの命令(つぎのプログラムメモリアドレスに置かれた命令)を、ひとつ飛ばし(skip)する。  (注意)STATUSやZは、別のファイル(P16F877.INC等)で定義されている定数の名前である。 プログラムの先頭で、INCLUDE擬似命令を用いて、このファイルの内容を取り込むようにする。 INCLUDE P16F877.INC (プログラム例) COUNT: EQU 20H SUM: EQU 21H ORG 0 CLRF SUM ; SUM <- 0 MOVLW 10 ; W <- 10 MOVWF COUNT ; COUNT <- W (<- 10) LOOP: MOVF COUNT,W ; W <- COUNT ADDWF SUM,F ; SUM <- SUM + W DECF COUNT ; COUNT <- COUNT - 1 BTFSS STATUS,Z ; STATUSのZフラグが1ならば、つぎの命令をスキップする GOTO LOOP ; (STATUSのZフラグが0ならば、)LOOPへ飛ぶ(LOOPから繰返す) GOTO $ ; $は、この命令が置かれたアドレス、つまり自分自身へ飛ぶ(無限ループ) END ; このプログラムは、 ; 変数COUNTの値を10から0まで1つずつ減少させながら(DECF命令を使用)、 ; 変数SUMへCOUNTの値を加えることを繰返して、 ; 変数SUMに0から10までの整数の和を求めている。 ; 繰り返しの終了については、 ; COUNTの値が0になったかどうかを、 ; (DECF命令の実行直後に)ビットテスト命令(BTSS)で検査している。 ; 最後は、自分自身へ飛ぶ無限ループにして、プログラムの実行終了の代わりにしている。 (参考) skip命令(BTFSC命令、BTFSS命令、DECFSZ命令、INCFSZ命令)は、 条件によって、つぎに置かれた命令をひとつ飛ばし(skip)する制御命令の一種である。