前へ | 次へ |
PICにも挑戦です。
MPLAB IDE のシミュレート機能で、アセンブリ言語を勉強中です。C言語での例をアセンブリ言語でコーディングしています。テストしたプログラムソース
1.「真」の判定
if( WORK ) {
X(); // 真の時実行
}
MOVF WORK,F ; ファイルレジスタWORKが、0で無い時Xを実行
BTFSS STATUS,Z
CALL X
; MOVF WORK,F の実行で、WORKの内容をゼロフラグに反映させる。
; BTFSS STATUS,Z で、ゼロの時(偽の条件)をスキップさせる。
; CALL X は、真の時、実行される。
2.「偽」の判定
if( !WORK ) {
X(); // 偽の時実行
}
MOVF WORK,F
BTFSC STATUS,Z
CALL X
3.「等しい」の判定(ファイルレジスタとリテラルの比較)
if( WORK == 3 ) {
X(); // 等しい時実行
}
MOVLW 3
SUBWF WORK,W
BTFSC STATUS,Z
CALL X
4.「等しくない」の判定(ファイルレジスタとリテラルの比較)
if( WORK != 3 ) {
X();
}
MOVLW 3
SUBWF WORK,W
BTFSS STATUS,Z
CALL X
5.unsigned の「小なり」の判定
if( WORK < 3 ) {
X();
}
MOVLW 3
SUBWF WORK,W
BTFSS STATUS,C
CALL X
6.unsigned の「大なりイコール」の判定
if( WORK >= 3 ) {
X();
}
MOVLW 3
SUBWF WORK,W
BTFSC STATUS,C
CALL X
7.unsigned の「小なりイコール」の判定
if( WORK <= 3 ) {
X();
}
MOVLW 3
SUBWF WORK,W
BTFSS STATUS,Z ; イコール
BTFSS STATUS,C ; 小なり
CALL X
お行儀よく行えば、上のように「イコール」と「小なり」の2回に分けての比較となる。下のコーディング例では、「小なりイコール3」を「小なり4」として、条件を読み替えることにより比較を簡単にする。
「小なりイコール」の判定その2
;if( WORK <= 3 ) {
; X();
;}
MOVLW 3+1
SUBWF WORK,W
BTFSS STATUS,C
CALL X
8.unsigned の「大なり」の判定
if( WORK > 3 ) {
X();
}
MOVLW 3
SUBWF WORK,W
BTFSC STATUS,Z ; イコールならスキップ
GOTO SKIP01
BTFSC STATUS,C ; 小なりならスキップ
CALL X
SKIP01:
「小なりイコール」と同様に条件を「大なりイコール」に読み替えると以下のようになる。
「大なり」の判定その2
if( WORK > 3 ) {
X();
}
MOVLW 3+1
SUBWF WORK,W
BTFSC STATUS,C
CALL X