TESTB (ビットのテスト)

自由形式構文 (許可されていない - %BITAND 組み込み関数を使用。 図 2 を参照。)
コード 演算項目 1 演算項目 2 結果フィールド 標識
TESTB   ビット番号 文字フィールド OF ON EQ

TESTB は、演算項目 2 で示されたビットを、結果フィールドとして指定さ れたフィールド内の対応するビットと比較します。結果フィールドは 1 桁の文 字フィールドでなければなりません。71 から 76 桁目の結果の 標識は、結果フィールドのビットの状況を反映します。 演算項目 2 は、常に結果フィールドの元となるビットです。

演算項目 2 には以下のものを入れることができます。
  • ビット番号 0 から 7: 1 つの 命令で 1 から 8 ビットをテストすることができます。 テストされるビットは 0 から 7 の番号で識別されます (0 が左端ビットです)。 ビット番号はアポストロフィで囲まなければなりません。例えば、ビット 0、2、および 5 をテストするためには、 演算項目 2 に ‘025’ を入れます。
  • フィールド名: 演算項目 2 に、1 桁の 文字フィールドの名前、テーブル名、または配列要素を指定することができます。 このフィールド、テーブル名、または配列要素でオンのビットが、 結果フィールドの対応するビットと比較されます。オフのビットは 対象外です。 配列のそれぞれの要素が 1 桁の文字フィールドである場合には、結果フィール ドに指定されるフィールドは配列要素とすることができます。
  • 16 進数リテラルまたは名前のついた定数: 1 バイトの 16 進数リテラルまたは 16 進数の名前のついた定数を指定する ことができます。 演算項目 2 でオンのビットが、結果フィールドの対応するビットと比較されま す。オフのビットは対象外です。

図 1 に、TESTB 命令の使用法を示します。

71 から 76 桁目に割り当てられた標識は、結果フィールドのビットの状況を反映 します。 1 つの命令に少なくとも 1 つの標識を割り当てなければならず、最大 3 つまで割り当ていることができます。 TESTB 命令では、結果の標識は次のように設定されます。
  • 71 桁目と 72 桁目: これらの桁の標識は、演算項目 2 に指定されたビット番号または演算項目 2 のフィールドでオンになっているそ れぞれのビットが結果フィールドでオフになっている場合にオンに設定され ます。 すなわち、指定されたすべてのビットがオフに等しくなります。
  • 73 桁目と 74 桁目: これらの桁の標識は、演算項目 2 に指定されたビット番号または演算項目 2 のフィールドでオンになっているそ れぞれのビットが、結果フィールドで混在する状況 (あるものはオンで、ある ものはオフ) の場合にオンに設定されます。 すなわち、指定された少なくとも 1 つのビットがオンになります。
    注: 1 つのビットだけをテストする場合には、これらの桁はブランクでなけ ればなりません。 フィールド名が演算項目 2 に指定されていて、1 つのビットだけがオンになっ ている場合には、73 桁目と 74 桁目の標識はオンに設定されません。
  • 75 桁目と 76 桁目: これらの桁の標識は、演算項目 2 に指定されたビット番号または演算項目 2 のフィールドでオンになっているそ れぞれのビットが結果フィールドでオンになっている場合にオンに設定され ます。 すなわち、指定されたすべてのビットがオンに等しくなります。
    注: 演算項目 2 のフィールドにオンのビットがない場合には、どの標識も オンに設定されません。

詳細については、ビット操作または テスト命令を参照してください。

図 1. TESTB 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *  The field bit settings are FieldF = 00000001, and FieldG = 11110001.
 *
 *  Indicator 16 is set on because bit 3 is off (0) in FieldF.
 *  Indicator 17 is set off.
C                   TESTB     '3'           FieldF               16  17
 *
 *  Indicator 16 is set on because both bits 3 and 6 are off (0) in
 *  FieldF.  Indicators 17 and 18 are set off.
C                   TESTB     '36'          FieldF               161718
 *
 *  Indicator 17 is set on because bit 3 is off (0) and bit 7 is on
 *  (1) in FLDF.  Indicators 16 and 18 are set off.
C                   TESTB     '37'          FieldF               161718
 *
 *  Indicator 17 is set on because bit 7 is on (1) in FLDF.
 *  Indicator 16 is set off.
C                   TESTB     '7'            FieldF              16  17
 *
 *  Indicator 17 is set on because bits 0,1,2, and 3 are off (0) and
 *  bit 7 is on (1).  Indicators 16 and 18 are set off.
C                   TESTB     FieldG         FieldF              161718
 *
 *  The hexadecimal literal X'88' (10001000) is used in factor 2.
 *  Indicator 17 is set on because at least one bit (bit 0) is on
 *  Indicators 16 and 18 are set off.
C                   TESTB     X'88'          FieldG              161718