BCC 命令 (Branch if Carry is Cleared/ Branch Less Than)
キャリーフラグがクリアされている場合に、指定された場所へアセンブリの実行位置を変更します。
BLTはBCCのエイリアスです。
BCCオーバーロード
| オペコード | 構文 | アドレッシングモード | バイト数 | 命令サイクル | 注 |
|---|---|---|---|---|---|
| 90 | BCC near BLT near | PC Rel. | 2 | 2 | 1, 2 |
注
- 実際に分岐が発生した場合、1サイクル追加
- エミュレーションモードで、分岐先がページ境界をまたぐ場合は1サイクル追加
フラグ変化
--------
この命令はステータスフラグを変更しない。
解説
BCC命令はキャリーフラグがクリアされている場合に、現在のプログラムカウンタを基準に、オペランドに指定された符号付き8ビットオフセットの示すアドレスへプログラムの実行位置を変えます。
通常は、CMP命令などの比較演算を伴って実行されますが、用途によってはそのほかの命令を伴って使用されることがあります。
次の例は比較演算とBCC命令を利用した簡易的な for ループの実装です。1から指定された数までの整数の和を計算します。
なお、ほかの命令を利用することで、この例と等価なコードをより簡潔に実装できます。
; BCC for-Loop Sample
; Calculate sum[k=1 to n] k ($10 = n)
REP #$30
LDA $10
STA $02 ; $02 = n
STZ $00 ; $00 = sum = 0
LDX.w #$0000 ; X = k = 0
.loop
INX ; k = k + 1
TXA ; A = k
CLC
ADC $00 ; A = sum + k
STA $00 ; sum = A
CPX $02 ; k - n
BCC .loop ; if n > k then goto loop
使用例
符号なしの大小で分岐する
CMP命令の後のBCC命令は「Aが比較した値より小さい(符号なし)」ときに分岐します。
LDA $10
CMP.b #$80
BCC .small ; $10 < $80 のとき分岐する
; ここに来るのは $10 >= $80 のとき
加算の繰り上がりを処理する
ADC命令の結果に繰り上がりがなかったときに、上位の桁の処理を飛ばします。
; 16ビットの値 $10・$11 に8ビットの値 $12 を加える(Aは8ビット)
LDA $10
CLC
ADC $12
STA $10
BCC .done ; 繰り上がりがなければ上位バイトはそのまま
INC $11
.done