更新日: 2023 年 7 月 6 日
BTST
BTST
ビットテスト (びーてすと)
BTST.L #<data>,Dr
68000/68010/68020/68030/68040/68060 の命令
命令コード
| アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
| +0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | レジスタr | 
| +2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | データ | 
実行時間
| 68000 | 68010 | 68020 | 68030 | 68040 | 68060 | 
| 10(2/0) | 10(2/0) | 🚧 | 🚧 | 🚧 | 1(2/0) | 
コンディションコード
| フラグ | 入力 | 出力 | 説明 | 
| X | 使用しない | 変化しない |  | 
| N | 
| Z | 変化する | テストしたビットが 0 だったときセット、さもなくばクリア | 
| V | 変化しない |  | 
| C | 
解説
- 0〜31 の <data> を Yl とします。
 
- Dr の全体を読み出して Xl とします。
 
- Xl のビット Yl をテストします。ビット番号は 0 が最下位、31 が最上位です。
 
- テストの結果に応じてフラグを操作します。
 
BTST.B #<data>,<ea>
68000/68010/68020/68030/68040/68060 の命令
命令コード
| アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
| +0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | モード | レジスタr | 
| +2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | データ | 
アドレッシングモードと実行時間
| モード | レジスタr | <ea> | 68000 | 68010 | 68020 | 68030 | 68040 | 68060 | 
| 0 | 1 | 0 | r | (Ar) | 12(3/0) | 12(3/0) | 🚧 | 🚧 | 🚧 | 1(3/0) | 
| 1 | (Ar)+ | 
| 1 | 0 | 0 | -(Ar) | 14(3/0) | 14(3/0) | 
| 1 | (d16,Ar) | 16(4/0) | 16(4/0) | 2(4/0) | 
| 1 | 0 | (d8,Ar,Xn) | 18(4/0) | 18(4/0) | - | - | - | - | 
| (d8,Ar,Xn*sf) | - | - | 🚧 | 🚧 | 🚧 | 2(4/0) | 
| (bd,Ar,Xn*sf) | 3(4〜6/0) | 
| ([bd,Ar,Xn*sf],od) | 5(6〜10/0) | 
| ([bd,Ar],Xn*sf,od) | 
| 1 | 0 | 0 | 0 | (xxx).W | 16(4/0) | 16(4/0) | 2(4/0) | 
| 1 | (xxx).L | 20(5/0) | 20(5/0) | 2(5/0) | 
| 1 | 0 | (d16,PC) | 16(4/0) | 16(4/0) | 2(4/0) | 
| 1 | (d8,PC,Xn) | 18(4/0) | 18(4/0) | - | - | - | - | 
| (d8,PC,Xn*sf) | - | - | 🚧 | 🚧 | 🚧 | 2(4/0) | 
| (bd,PC,Xn*sf) | 3(4〜6/0) | 
| ([bd,PC,Xn*sf],od) | 5(6〜10/0) | 
| ([bd,PC],Xn*sf,od) | 
コンディションコード
| フラグ | 入力 | 出力 | 説明 | 
| X | 使用しない | 変化しない |  | 
| N | 
| Z | 変化する | テストしたビットが 0 だったときセット、さもなくばクリア | 
| V | 変化しない |  | 
| C | 
解説
- 0〜7 の <data> を Yb とします。
 
- <ea> が指すバイトを読み出して Xb とします。
 
- Xb のビット Yb をテストします。ビット番号は 0 が最下位、7 が最上位です。
 
- テストの結果に応じてフラグを操作します。
 
サンプルプログラム
次の垂直空白期間の開始を待ちます。
@@:     btst.b  #4,$00E88001            ;MFPのGPIPデータレジスタのVDISP
        beq     @b                      ;0=垂直空白期間
@@:     btst.b  #4,$00E88001
        bne     @b                      ;1=垂直映像期間
BTST.L Dq,Dr
68000/68010/68020/68030/68040/68060 の命令
命令コード
| アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
| +0 | 0 | 0 | 0 | 0 | レジスタq | 1 | 0 | 0 | 0 | 0 | 0 | レジスタr | 
実行時間
| 68000 | 68010 | 68020 | 68030 | 68040 | 68060 | 
| 6(1/0) | 6(1/0) | 🚧 | 🚧 | 🚧 | 1(1/0) | 
コンディションコード
| フラグ | 入力 | 出力 | 説明 | 
| X | 使用しない | 変化しない |  | 
| N | 
| Z | 変化する | テストしたビットが 0 だったときセット、さもなくばクリア | 
| V | 変化しない |  | 
| C | 
解説
- Dq の下位 5 ビットを Yl とします。
 
- Dr の全体を読み出して Xl とします。
 
- Xl のビット Yl をテストします。ビット番号は 0 が最下位、31 が最上位です。
 
- テストの結果に応じてフラグを操作します。
 
BTST.B Dq,<ea>
68000/68010/68020/68030/68040/68060 の命令
命令コード
| アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
| +0 | 0 | 0 | 0 | 0 | レジスタq | 1 | 0 | 0 | モード | レジスタr | 
アドレッシングモードと実行時間
| モード | レジスタr | <ea> | 68000 | 68010 | 68020 | 68030 | 68040 | 68060 | 
| 0 | 1 | 0 | r | (Ar) | 8(2/0) | 8(2/0) | 🚧 | 🚧 | 🚧 | 1(2/0) | 
| 1 | (Ar)+ | 
| 1 | 0 | 0 | -(Ar) | 10(2/0) | 10(2/0) | 
| 1 | (d16,Ar) | 12(3/0) | 12(3/0) | 1(3/0) | 
| 1 | 0 | (d8,Ar,Xn) | 14(3/0) | 14(3/0) | - | - | - | - | 
| (d8,Ar,Xn*sf) | - | - | 🚧 | 🚧 | 🚧 | 1(3/0) | 
| (bd,Ar,Xn*sf) | 2(3〜5/0) | 
| ([bd,Ar,Xn*sf],od) | 4(5〜9/0) | 
| ([bd,Ar],Xn*sf,od) | 
| 1 | 0 | 0 | 0 | (xxx).W | 12(3/0) | 12(3/0) | 1(3/0) | 
| 1 | (xxx).L | 16(4/0) | 16(4/0) | 1(4/0) | 
| 1 | 0 | (d16,PC) | 12(3/0) | 12(3/0) | 1(3/0) | 
| 1 | (d8,PC,Xn) | 14(3/0) | 14(3/0) | - | - | - | - | 
| (d8,PC,Xn*sf) | - | - | 🚧 | 🚧 | 🚧 | 1(3/0) | 
| (bd,PC,Xn*sf) | 2(3〜5/0) | 
| ([bd,PC,Xn*sf],od) | 4(5〜9/0) | 
| ([bd,PC],Xn*sf,od) | 
| 1 | 0 | 0 | #<data> | 8(2/0) | 8(2/0) | 1(2/0) | 
コンディションコード
| フラグ | 入力 | 出力 | 説明 | 
| X | 使用しない | 変化しない |  | 
| N | 
| Z | 変化する | テストしたビットが 0 だったときセット、さもなくばクリア | 
| V | 変化しない |  | 
| C | 
解説
- Dq の下位 3 ビットを Yb とします。
 
- <ea> が指すバイトを読み出して Xb とします。
 
- Xb のビット Yb をテストします。ビット番号は 0 が最下位、7 が最上位です。
 
- テストの結果に応じてフラグを操作します。
 
サンプルプログラム
1 バイトの文字($00〜$7F,$A0〜$DF)と 2 バイトの文字の 1 バイト目($80〜$9F,$E0〜$FF)を見分けて 1 文字取り出します。
        moveq.l #0,d0
        move.b  (a0)+,d0        ;1バイト目を取り出す
        move.b  d0,d1           ;コピーして
        rol.b   #3,d1           ;上位3ビットを下位3ビットへ
;                    76543210
        btst.b  d1,#%10010000   ;4($80-$9F)と7($E0-$FF)は2バイトの文字の1バイト目
        beq     @f              ;それ以外は1バイトの文字
        lsl.w   #8,d0           ;1バイト目を上位バイトへ
        move.b  (a0)+,d0        ;2バイト目を取り出す
@@: