BIT 命令 (Test Memory Bits against Accumulator)

メモリビットのテストを行います。

BIT オーバーロード

オペコード構文アドレッシングモードバイト数命令サイクル注
89BIT #constImm.2/ 321, 4
24BIT dpDP.231, 2
34BIT dp, XDP. Idx X241, 2
2CBIT absAbs.341
3CBIT abs, XAbs. Idx X341, 3

注

  1. メモリモードフラグクリア時は1サイクル追加
  2. ダイレクトページの開始アドレスがページ境界になっていない場合1サイクル追加
  3. インデクス加算時にページ境界を超える場合、またはインデクスレジスタが16ビット長の場合は1サイクル追加
  4. メモリモードフラグクリア時は3バイト。メモリモードフラグセット時は2バイト。

フラグ変化

nv----z-

n: メモリのMSBがセットされる(注
v: メモリの上から2番目のビット(ビット6またはビット14)がセットされる(注
z: 結果が0の場合にセットされ、それ以外の場合はクリアされる

注
BIT #const 命令の場合は、N,Vフラグは変更されず、Zフラグのみがテストされる。

解説

BIT命令はアキュムレータと指定されたメモリの間での論理積を計算し、その結果に基づいてステータスフラグのみを変更します。演算結果に関わらず、メモリとアキュムレータの値は変更されません。
この命令はメモリのビットテストに非常に便利です。アキュムレータやメモリの状態を変更しないため、BIT命令によって、複数のデータを同じ条件で効率的にテストすることが可能です。

使用例

Aを変えずにビットを調べる

    LDA.b #$40
    BIT $10         ; $10 AND $40 が0ならゼロフラグがセットされる
    BNE .set        ; $10 のビット6が1なら分岐する

I/Oレジスタの上位2ビットを調べる

BIT命令(イミディエイト以外)は、メモリのビット7をネガティブフラグに、ビット6をオーバーフローフラグにそのまま読み込みます。

    BIT $4212       ; HVBJOY
    BMI .vblank     ; ビット7: Vブランク中
    BVS .hblank     ; ビット6: Hブランク中

イミディエイトのBIT命令はゼロフラグしか変化させません。

参照

TRB命令
TSB命令