DOUxx (条件までの繰り返し)
自由形式構文 | (許可されていない - DOU 命令コードを使用) |
コード | 演算項目 1 | 演算項目 2 | 結果フィールド | 標識 | ||
---|---|---|---|---|---|---|
DOUxx | 被比較値 | 被比較値 |
DOUxx 命令コードは、最低 1 回 (おそらくはそれ以上) 実行したい命令のグルー プの前に置かれます。 対応する ENDDO ステートメントは、このグループの終わりを示します。DO グループの詳細と xx の意味については、構造化プログラミング命令を参照してください。
演算項目 1 と演算項目 2 には、リテラル、名前のついた定数、フィールド 名、テーブル名、配列要素、形象定数、またはデータ構造名を入れなければな りません。 演算項目 1 と演算項目 2 は同じデータ・タイプでなければなりませ ん。
DOUxx ステートメントでは、関係 xx を指示します。 より複雑な条件を指定するため
には、DOUxx ステートメントの直後に ANDxx また
は ORxx ステートメントを続けます。 DOUxx グループの命令は
1 回処理された後で、
次のいずれかに該当するまで繰り返されます。
- 演算項目 1 と演算項目 2 の間にこの関係が存在する
- DOUxx、ANDxx、または ORxx 命令を組み合わせて指定した条件が存在する
このグループは、グループの開始時にこの条件が 真でない場合であっても、常に最低 1 回は処理されます。
DOUxx 命令自体のほかに、 DOUxx グループは、DOUxx および ENDDO ステートメントの条件付け標識に よっても制御されます。 DOUxx ステートメントの条件付け標識は、DOUxx 命令を開始するかどうかを 制御します。 対応する ENDDO ステートメントの条件付け標識では、DO ループを早期に終了 させることができます。
DOUxx 命令は次のステップに従って実行されます。
- DOUxx 命令は、DOUxx ステートメント行の条件付け標識が満たされた場合 に処理されます (ステップ 2)。 標識が満たされない場合には、対応する ENDDO ステートメントの後で処理され る次の命令に制御が渡されます (ステップ 6)。
- DOUxx 命令が処理されて、処理可能な次の命令に制御が渡されます (ステ ップ 3)。 DOUxx 命令では、この時点で演算項目 1 と演算項目 2 が比較されたり、指定さ れた条件がテストされることはありません。
- DO グループのそれぞれの命令が処理されます。
- ENDDO ステートメントの条件付け標識が満たされない場合には、対応する ENDDO ステートメントの後の次の演算命令に制御が渡されます (ステップ 6)。 そうでない場合には ENDDO 命令が処理されます (ステップ 5)。
- ENDDO 命令が処理されて、DOUxx 命令の演算項目 1 と演算項目 2 が比較さ れるか、あるいは命令を組み合わせて指定した条件がテストされます。 演算項目 1 と演算項目 2 の間に関係 xx が存在するか、または指定された条件が存在 する場合には、DO グループが終了されて、ENDDO ステートメントの後の次の演 算命令に制御が渡されます (ステップ 6)。 演算項目 1 と演算項目 2 の間に関 係 xx が存在しないか、または指定された条件が存在しない場合には、DO グル ープの命令が繰り返されます (ステップ 3)。
- DOUxx または ENDDO ステートメントの条件付け標識が満たされない場合 (ステップ 1 または 4)、あるいはステップ 5 で演算項目 1 と演算項目 2 の間 に関係 xx が存在するかまたは指定された条件が存在する場合には、ENDDO ス テートメントの後のステートメントが処理されます。
これらの命令が DOUxx 命令にどのような影響を与えるかについて は、LEAVE (Do/For グループからの抜け出し)および ITER (繰り返し)を参照してください。
詳細については、比較命令または 構造化プログラミング命令を参照してください。
図 1. DOUxx 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* The DOUEQ operation runs the operation within the DO group at
* least once.
C
C FLDA DOUEQ FLDB
C
*
* At the ENDDO operation, a test is processed to determine whether
* FLDA is equal to FLDB. If FLDA does not equal FLDB, the
* preceding operations are processed again. This loop continues
* processing until FLDA is equal to FLDB. When FLDA is equal to
* FLDB, the program branches to the operation immediately
* following the ENDDO operation.
C
C SUB 1 FLDA
C ENDDO
C
*
* The combined DOUEQ ANDEQ OREQ operation processes the operation
* within the DO group at least once.
C
C FLDA DOUEQ FLDB
C FLDC ANDEQ FLDD
C FLDE OREQ 100
C
*
* At the ENDDO operation, a test is processed to determine whether
* the specified condition, FLDA equal to FLDB and FLDC equal to
* FLDD, exists. If the condition exists, the program branches to
* the operation immediately following the ENDDO operation. There
* is no need to test the OREQ condition, FLDE equal to 100, if the
* DOUEQ and ANDEQ conditions are met. If the specified condition
* does not exist, the OREQ condition is tested. If the OREQ
* condition is met, the program branches to the operation
* immediately following the ENDDO. Otherwise, the operations
* following the OREQ operation are processed and then the program
* processes the conditional tests starting at the second DOUEQ
* operation. If neither the DOUEQ and ANDEQ condition nor the
* OREQ condition is met, the operations following the OREQ
* operation are processed again.
C
C SUB 1 FLDA
C ADD 1 FLDC
C ADD 5 FLDE
C ENDDO