BCC 命令 (Branch if Carry is Cleared/ Branch Less Than)

キャリーフラグがクリアされている場合に、指定された場所へアセンブリの実行位置を変更します。
BLTはBCCのエイリアスです。

BCCオーバーロード

オペコード構文アドレッシングモードバイト数命令サイクル注
90BCC near
BLT near
PC Rel.221, 2

注

  1. 実際に分岐が発生した場合、1サイクル追加
  2. エミュレーションモードで、分岐先がページ境界をまたぐ場合は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

参照

BCS命令
BEQ命令
BMI命令
BNE命令
BPL命令
BRA命令
BRL命令
BVC命令
BVS命令