DOWxx (条件が真の間繰り返し)

自由形式構文 (許可されていない - DOW 命令コードを使用)
コード 演算項目 1 演算項目 2 結果フィールド 標識
DOWxx 被比較値 被比較値        

DOWxx 命令コードは、指定された条件が存在する時に処理したい命令のグルー プの前に置かれます。 より複雑な条件を指定するためには、DOWxx ステートメント の直後に ANDxx また は ORxx ステートメントを続けます。 対応する ENDDO ステートメントは、このグループの終わりを示します。DO グループの詳細と xx の意味については、構造化プログラミング命令を参照してください。

演算項目 1 と演算項目 2 には、リテラル、名前のついた定数、形象定数、 フィールド名、テーブル名、配列要素、またはデータ構造名を入れなければな りません。 演算項目 1 と演算項目 2 は同じデータ・タイプでなければなりません。 演算項目 1 と 2 の比較は、 比較命令の場合と同じ規則に従って行われます。 比較命令を参照してください。

DOWxx 命令自体のほかに、DO グループは、DOWxx ステートメントおよび ENDDO ステートメントの条件付け標識によっても制御されます。 DOWxx ステートメントの条件付け標識は、DOWxx 命令を開始するかどうかを 制御します。 対応する ENDDO ステートメントの条件付け標識は、DOW グループ をもう一度繰り返すかどうかを制御します。

DOWxx 命令は次のステップに従って実行されます。
  1. DOWxx 命令は、DOWxx ステートメント行の条件付け標識が満たされた場合 に処理されます (ステップ 2)。 標識が満たされない場合には、対応する ENDDO ステートメントの後で処理される次の命令に制御が渡されます (ステッ プ 6)。
  2. DOWxx 命令は、演算項目 1 と演算項目 2 を比較するか、または組み合わさ れた DOWxx、ANDxx、または ORxx 命令によって指定された条件をテストして 処理されます。演算項目 1 と演算項目 2 の間に関係 xx が存在するか、組み合 わされた命令によって指定された条件が存在しない場合には、DO グループは終 了して ENDDO ステートメントの後の次の演算命令に制御が渡されます (ステッ プ 6)。 演算項目 1 と演算項目 2 の間に関係 xx が存在するかまたは組み合わ された命令によって指定された条件が存在する場合には、DO グループの命令が 繰り返されます (ステップ 3)。
  3. DO グループのそれぞれの命令が処理されます。
  4. ENDDO ステートメントの条件付け標識が満たされない場合には、対応する ENDDO ステートメントの後で実行される次の命令に制御が渡されます (ステッ プ 6)。 そうでない場合には ENDDO 命令が処理されます (ステップ 5)。
  5. ENDDO 命令が処理されて、DOWxx 命令に制御が渡されます (ステップ 2)。 (ステップ 1 では DOWxx ステートメントの条件付け標識は再びテストされない ことに注意してください。)
  6. DOWxx または ENDDO ステートメントの条件付け標識が満たされない時 (ス テップ 1 または 4)、あるいはステップ 2 で演算項目 1 と演算項目 2 の間に xx 関係または指定した条件が存在しない場合には、ENDDO ステートメントの後の ステートメントが処理されます。

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

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

図 1. DOWxx 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *  The DOWLT operation allows the operation within the DO group
 *  to be processed only if FLDA is less than FLDB.  If FLDA is
 *  not less than FLDB, the program branches to the operation
 *  immediately following the ENDDO operation.  If FLDA is less
 *  than FLDB, the operation within the DO group is processed.
C
C     FLDA          DOWLT     FLDB
C
 *
 *  The ENDDO operation causes the program to branch to the first
 *  DOWLT operation where a test is made to determine whether FLDA
 *  is less than FLDB.  This loop continues processing until FLDA
 *  is equal to or greater than FLDB; then the program branches
 *  to the operation immediately following the ENDDO operation.
C
C                   MULT      2.08          FLDA
C                   ENDDO
C
 *  In this example, multiple conditions are tested.  The combined
 *  DOWLT ORLT operation allows the operation within the DO group
 *  to be processed only while FLDA is less than FLDB or FLDC. IF/THEN
 *  neither specified condition exists, the program branches to
 *  the operation immediately following the ENDDO operation. IF/THEN
 *  either of the specified conditions exists, the operation after
 *  the ORLT operation is processed.
C
C     FLDA          DOWLT     FLDB
C     FLDA          ORLT      FLDC
C
 *  The ENDDO operation causes the program to branch to the second
 *  DOWLT operation where a test determines whether specified
 *  conditions exist.  This loop continues until FLDA is equal to
 *  or greater than FLDB and FLDC; then the program branches to the
 *  operation immediately following the ENDDO operation.
C
C                   MULT      2.08          FLDA
C                   ENDDO