BITON (ビットをオンに設定)

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

BITON 命令では、演算項目 2 で識別されたビットが結果フィールドでオンに 設定 (1 に設定) されます。 演算項目 2 で識別されないビットは変わりま せん。したがって、BITON を使用して文字を形式設定する場合には、BITON と BITOFF の両方を使用しなければなりません。ビットをオン (=1) に設定する ように指定するためには BITON、ビットをオフ (=0) に設定するように指定 するためには BITOFF を使用します。 文字のすべてのビットをオンまたはオフに明示的に設定しない限り、希望す る文字を取り出すことはできません。

文字フィールドに特定のビット・パターンを割り当てたい場合には、演算項目 2 に 16 進数リテラルを指定して MOVE (転送)命令を使用します。

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

結果フィールドには、1 桁の文字フィールドを指定します。 配列のそれぞれの要素が 1 桁の文字フィールドの場合には、配列要素にするこ とができます。

詳細については、ビット操作を参照してください。

図 1. BITON の例
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D FieldA          S              1A   INZ(X'00')
D FieldB          S              1A   INZ(X'00')
D FieldC          S              1A   INZ(X'FF')
D FieldD          S              1A   INZ(X'C0')
D FieldE          S              1A   INZ(X'C0')
D FieldF          S              1A   INZ(X'81')
D FieldG          S              1A   INZ(X'4F')
D FieldH          S              1A   INZ(X'08')
D FieldI          S              1A   INZ(X'CE')
D FieldJ          S              1A   INZ(X'80')
D FieldK          S              1A   INZ(X'80')
D BITNC           C                   CONST('0246')
D HEXNC           C                   CONST(X'0F')
D HEXNC2          C                   CONST(X'F0')
C*0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *    Set on bits 0,4,5,6,7 in  FieldA.  Leave bits 1,2,3 unchanged.
 *       Factor 2 = 10001111
 *       FieldA   = 00000000  (before)
 *       FieldA   = 10001111  (after)
C                   BITON     '04567'       FieldA
 *    Set on bit 3 in FieldB.  Leave bits 0,1,2,4,5,6,7 unchanged.
 *       Factor 2 = 00010000
 *       FieldB   = 00000000  (before)
 *       FieldB   = 00010000  (after)
C                   BITON     '3'           FieldB
 *    Set on bit 3 in FieldC.  Leave bits 0,1,2,4,5,6,7 unchanged.
 *    Setting on bit 3, which is already on, results in bit 3 remaining on.
 *       Factor 2 = 00010000
 *       FieldC   = 11111111  (before)
 *       FieldC   = 11111111  (after)
C                   BITON     '3'           FieldC
 *    Set on bit 3 in FieldD.  Leave bits 0,1,2,4,5,6,7 unchanged.
 *       Factor 2 = 00010000
 *       FieldD   = 11000000  (before)
 *       FieldD   = 11010000  (after)
C                   BITON     '3'           FieldD
 *    Set on bits 0 and 1 in FieldF.  Leave bits 2,3,4,5,6,7 unchanged.
 *    (Setting on bit 0, which is already on, results in bit 0 remaining on.)
 *       Factor 2 = 11000000
 *       FieldF   = 10000001  (before)
 *       FieldF   = 11000001  (after)
C                   BITON     FieldE        FieldF
 *    X'C1' is equivalent to literal '017', bit pattern 11000001.
 *    Set on bits 0,1,7 in  FieldH.  Leave bits 2,3,4,5,6 unchanged.
 *       Factor 2 = 11000001
 *       FieldH   = 00001000  (before)
 *       FieldH   = 11001001  (after)
C                   BITON     X'C1'         FieldH
 *    HEXNC is equivalent to literal '4567', bit pattern 00001111.
 *    Set on bits 4,5,6,7 in  FieldJ.  Leave bits 0,1,2,3 unchanged.
 *       Factor 2 = 00001111
 *       FieldJ   = 10000000  (before)
 *       FieldJ   = 10001111  (after)
C                   BITON     HEXNC         FieldJ
C                   RETURN