BIT 命令 (Test Memory Bits against Accumulator)
メモリビットのテストを行います。
BIT オーバーロード
| オペコード | 構文 | アドレッシングモード | バイト数 | 命令サイクル | 注 |
|---|---|---|---|---|---|
| 89 | BIT #const | Imm. | 2/ 3 | 2 | 1, 4 |
| 24 | BIT dp | DP. | 2 | 3 | 1, 2 |
| 34 | BIT dp, X | DP. Idx X | 2 | 4 | 1, 2 |
| 2C | BIT abs | Abs. | 3 | 4 | 1 |
| 3C | BIT abs, X | Abs. Idx X | 3 | 4 | 1, 3 |
注
- メモリモードフラグクリア時は1サイクル追加
- ダイレクトページの開始アドレスがページ境界になっていない場合1サイクル追加
- インデクス加算時にページ境界を超える場合、またはインデクスレジスタが16ビット長の場合は1サイクル追加
- メモリモードフラグクリア時は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命令はゼロフラグしか変化させません。