DO (命令グループの開始)

自由形式構文 (許可されていない - FOR 命令コードを使用)
コード 演算項目 1 演算項目 2 結果フィールド 標識
DO 開始値 限界値 指標値      

DO 命令は、命令のグループを開始してそのグループを処理する回数を指示 します。 命令グループを処理する回数を指示するためには、指標フィールド、開始値、 および限界値を指定します。 対応する ENDDO ステートメントは、このグループの終わりを示します。DO グループの詳細については、構造化プログラミング命令を参照してください。

演算項目 1 には、数値リテラル、名前のついた定数、またはフィールド 名を使用して、小数点以下の桁数がゼロの開始値を指定します。 演算項目 1 を 指定しないと、開始値は 1 になります。

演算項目 2 には、数値フィールド名、リテラル、または名前のついた固定情 報を使用して、小数点以下の桁数がゼロの限界値を指定します。 演算項目 2 を指定しないと、限界値は 1 になります。

結果フィールドには、現在の指標値が入る数値フィールド名を指定します。 結果フィールドには、限界値に増分値を加えた値が入る十分な大きさが必要で す。 指標フィールドを指定しないと、内部使用のために指標フィールドが生成され ます。 指標フィールドの値は、DO 命令が開始されると演算項目 1 と置き換えられます。

対応する ENDDO 命令の演算項目 2 には、指標フィールドに加算する値を指 定します。 この値は、数値リテラルまたは小数点以下の桁数がゼロの数値フィールドとす ることができます。 これをブランクにすると、指標フィールドに加算される値は 1 になります。

DO グループは、DO 命令自体のほかに、DO および ENDDO ステートメントの 条件付け標識によっても制御されます。 DO ステートメントの条件付け標識は、 DO 命令を開始するかどうかを制御します。 これらの標識は DO ループの始めに 1 回だけ検査されます。 対応する ENDDO ステートメントの条件付け標識は、DO グループをもう一度繰 り返すかどうかを制御します。 これらの標識はそれぞれのループの終わりに検査されます。

DO 命令は次の 7 つのステップに従って実行されます。
  1. DO 命令は、DO ステートメント行の条件付け標識が満たされた場合に処理 されます (ステップ 2)。 この標識が満たされない場合には、対応する ENDDO ステートメントの後で処理される次の命令に制御が渡されます (ステップ 7)。
  2. DO 命令が開始されると、開始値 (演算項目 1) が指標フィールド (結果フ ィールド) に転送されます。
  3. 指標値が限界値より大きい場合には、対応する ENDDO ステートメントの後 の演算命令に制御が渡されます (ステップ 7)。 そうでない場合には、DO ステ ートメントの後の最初の命令に制御が渡されます (ステップ 4)。
  4. DO グループのそれぞれの命令が処理されます。
  5. ENDDO ステートメントの条件付け標識が満たされない場合には、対応する ENDDO ステートメントの後の演算命令に制御が渡されます (ステップ 7)。 そうでない場合には ENDDO 命令が処理されます (ステップ 6)。
  6. ENDDO 命令は指標フィールドに増分値を加算して処理されます。 制御はステップ 3 に 渡されます (制御がステップ 3 に渡された時に DO ステートメントの条件付け標識は 再びテスト (ステップ 1) されないことに注意してください)。
  7. DO ステートメントまたは ENDDO ステートメントの条件付け標識が満たさ れない時 (ステップ 1 または 5)、または指標値が限界値より大きい時 (ステ ップ 3) には、ENDDO ステートメントの後のステートメントが処理されます。
DO 命令を指定する場合には次のことに留意してください。
  • 指標値、増分値、限界値、および標識は、DO グループの終わりに影響を与え るためにループ内で変更することができます。
  • DO グループが明細演算と合計演算の両方にまたがることはできません。

これらの命令が DO 命令にどのような影響を与えるかについて は、LEAVE (Do/For グループからの抜け出し)および ITER (繰り返し)を参照してください。

初期値、増分値、および限界値の自由形式の式での、反復ループ の実行については、FOR (For)を参照してください。

詳細については、構造化プログラミング命令を参照してください。

図 1. DO 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *  The DO group is processed 10 times when indicator 17 is on;
 *  it stops running when the index value in field X, the result
 *  field, is greater than the limit value (10) in factor 2.  真の場合に選択
 *  the DO group stops running, control passes to the operation
 *  immediately following the ENDDO operation.  Because factor 1
 *  in the DO operation is not specified, the starting value is 1.
 *  Because factor 2 of the ENDDO operation is not specified, the
 *  incrementing value is 1.
C
C   17              DO        10            X                 3 0
C                   :
C                   ENDDO
 *
 *  The DO group can be processed 10 times.  The DO group stops
 *  running when the index value in field X is greater than
 *  the limit value (20) in factor 2, or if indicator 50 is not on
 *  when the ENDDO operation is encountered.  When indicator 50
 *  is not on, the ENDDO operation is not processed; therefore,
 *  control passes to the operation following the ENDDO operation.
 *  The starting value of 2 is specified in factor 1 of the DO
 *  operation, and the incrementing value of 2 is specified in
 *  factor 2 of the ENDDO operation.
 *
C     2             DO        20            X                 3 0
C                   :
C                   :
C                   :
C   50              ENDDO     2