ITER (繰り返し)

自由形式構文 ITER
コード 演算項目 1 演算項目 2 結果フィールド 標識
ITER

ITER 命令は、DO または FOR グループの中からそのグループの ENDDO または ENDFOR ステートメントに制御を渡します。この命令は、DO、DOU、DOUxx、 DOW、DOWxx、および FOR ループ内で、ループの ENDDO または ENDFOR ステートメントにただちに制御を渡すために使用できます。ITER 命令によって、ループの次の繰り返しが直ちに実行されます。 ITER は一番内側のループに影響を与えます。

制御が渡される ENDDO または ENDFOR ステートメントに条件付け標識があってその条件が満たされない場合には、その ENDDO または ENDFOR 命令の後のステートメントから処理が続行されます。

LEAVE (Do/For グループからの抜け出し)命令は ITER 命令に似ていますが、LEAVE は、ENDDO または ENDFOR 命令の次の ステートメントに制御を渡します。

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

図 301. ITER 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 * 次の例では、DOW ループが入っている DOU ループを使用します。
 * IF ステートメントは標識 01 を検査します。標識 01 が ON の場合には
 * LEAVE 命令が実行されて、一番内側の
 * DOW ループから Z-ADD 命令に制御が渡されます。標識
 * 01 が ON でない場合には、サブルーチン PROC1 が処理されます。次に標識
 * 12 が検査されます。この標識が OFF の場合には、ITER は一番内側の
 * ENDDO に制御を渡して、もう一度 DOW の条件が評価されます。
 * 標識 12 が ON の場合には、サブルーチン PROC2 が処理されます。
C
C                   DOU       FLDA = FLDB
C                   :
C     NUM           DOWLT     10
C                   IF        *IN01
C                   LEAVE
C                   ENDIF
C                   EXSR      PROC1
C     *IN12         IFEQ      *OFF
C                   ITER
C                   ENDIF
C                   EXSR      PROC2
C                   ENDDO
C                   Z-ADD     20            RSLT              2 0
C                   :
C                   ENDDO
C                   :
*...1....+....2....+....3....+....4....+....5....+....6....+....7....+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 * 次の例では、DOW ループが入っている DOU ループを使用します。
 * IF ステートメントは標識 1 を確認します。標識が ON の場合、
 * MOVE 操作、LEAVE 操作の順に実行され、最も内側の DOW ループ
 * から Z-ADD 命令に制御権が移動します。
 * 標識 1 が ON でない場合、ITER によって制御権が最も内側の ENDDO
 * に移動され、DOW の条件が再度評価されます。
 *
C                   :
C     FLDA          DOUEQ     FLDB
C                   :
C     NUM           DOWLT     10
C     *IN01         IFEQ      *ON
C                   MOVE      'UPDATE'      FIELD            20
C                   LEAVE
C                   ELSE
C                   ITER
C                   ENDIF
C                   ENDDO
C                   Z-ADD     20            RSLT              2 0
C                   :
C                   ENDDO
C                   :