countersince January 6, 2001X68000 LIBRARYEnglish
更新日: 2023 年 7 月 6 日
X68000 LIBRARY > 資料室 > 命令セットリファレンス(準備中) > B > BTST

BTST

BTST

ビットテスト (びーてすと)


BTST.L #<data>,Dr

68000/68010/68020/68030/68040/68060 の命令

命令コード

アドレス1514131211109876543210
+00000100000000レジスタr
+200000000000データ

実行時間

680006801068020680306804068060
10(2/0)10(2/0)🚧🚧🚧1(2/0)

コンディションコード

フラグ入力出力説明
X使用しない変化しない
N
Z変化するテストしたビットが 0 だったときセット、さもなくばクリア
V変化しない
C

解説

  1. 0〜31 の <data> を Yl とします。
  2. Dr の全体を読み出して Xl とします。
  3. Xl のビット Yl をテストします。ビット番号は 0 が最下位、31 が最上位です。
  4. テストの結果に応じてフラグを操作します。

BTST.B #<data>,<ea>

68000/68010/68020/68030/68040/68060 の命令

命令コード

アドレス1514131211109876543210
+00000100000モードレジスタr
+20000000000000データ

アドレッシングモードと実行時間

モードレジスタr<ea>680006801068020680306804068060
010r(Ar)12(3/0)12(3/0)🚧🚧🚧1(3/0)
1(Ar)+
100-(Ar)14(3/0)14(3/0)
1(d16,Ar)16(4/0)16(4/0)2(4/0)
10(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)
1000(xxx).W16(4/0)16(4/0)2(4/0)
1(xxx).L20(5/0)20(5/0)2(5/0)
10(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

解説

  1. 0〜7 の <data> を Yb とします。
  2. <ea> が指すバイトを読み出して Xb とします。
  3. Xb のビット Yb をテストします。ビット番号は 0 が最下位、7 が最上位です。
  4. テストの結果に応じてフラグを操作します。

サンプルプログラム

次の垂直空白期間の開始を待ちます。

@@:     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 の命令

命令コード

アドレス1514131211109876543210
+00000レジスタq100000レジスタr

実行時間

680006801068020680306804068060
6(1/0)6(1/0)🚧🚧🚧1(1/0)

コンディションコード

フラグ入力出力説明
X使用しない変化しない
N
Z変化するテストしたビットが 0 だったときセット、さもなくばクリア
V変化しない
C

解説

  1. Dq の下位 5 ビットを Yl とします。
  2. Dr の全体を読み出して Xl とします。
  3. Xl のビット Yl をテストします。ビット番号は 0 が最下位、31 が最上位です。
  4. テストの結果に応じてフラグを操作します。

BTST.B Dq,<ea>

68000/68010/68020/68030/68040/68060 の命令

命令コード

アドレス1514131211109876543210
+00000レジスタq100モードレジスタr

アドレッシングモードと実行時間

モードレジスタr<ea>680006801068020680306804068060
010r(Ar)8(2/0)8(2/0)🚧🚧🚧1(2/0)
1(Ar)+
100-(Ar)10(2/0)10(2/0)
1(d16,Ar)12(3/0)12(3/0)1(3/0)
10(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)
1000(xxx).W12(3/0)12(3/0)1(3/0)
1(xxx).L16(4/0)16(4/0)1(4/0)
10(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)
100#<data>8(2/0)8(2/0)1(2/0)

コンディションコード

フラグ入力出力説明
X使用しない変化しない
N
Z変化するテストしたビットが 0 だったときセット、さもなくばクリア
V変化しない
C

解説

  1. Dq の下位 3 ビットを Yb とします。
  2. <ea> が指すバイトを読み出して Xb とします。
  3. Xb のビット Yb をテストします。ビット番号は 0 が最下位、7 が最上位です。
  4. テストの結果に応じてフラグを操作します。

サンプルプログラム

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バイト目を取り出す
@@: