EXEC语句语句中的位置参数
EXEC语句有两个位置参数,PGM和PROC,每条EXEC语句必须有且仅有其中一个
一、PGM参数
//STEP1 EXEC PGM=UPDT
//STEP2 EXEC DSNAME=SYS1.LINKLIB(P40),DISP=OLD
//STEP3 EXEC PGM=*.STEP2.DDA
STEP1是直接调用。直接调用PDS中的PGM成员,这些成员都已经被编成二进制,这种就是统一嘛,版本控制方便
STEP3,间接调用,它从前面的中间生成LOAD库中,找需要的PGM,
多此一举啦,正常业务中都分的很细,但我今天工作里确见到STEP2的写法,就是从某个库中取出来特定PGM步骤
二、PROC参数
过程名可以是:
编目过程的成员名,像是单独写出来SHELL脚本
JCL流内PROC,像是在JCL的PROC和PEND中间追加定义区
//STEP1 EXEC PROC=MYPROC
//STEP2 EXEC MYPROC2
三、SUB
一般有的子程序不能直接用JCL调用,就要写一个JCL driver,来间接调用这个程序。
在汇编语言中,通常用术语过程(procedure)来指代子程序。在其他语言中,子程序也被称为方法或函数。
过程可以非正式地定义为:由返回语句结束的已命名的语句块。过程用 PROC 和 ENDP 伪指令来定义,并且必须为其分配一个名字(有效标识符)。到目前为止,所有编写的程序都包含了一个名为 main 的过程,例如:
main PROC
.
.
main ENDP
当在程序启动过程之外创建一个过程时,就用 RET 指令来结束它。RET 强制 CPU 返回到该过程被调用的位置:
sample PROC
.
.
ret
sample ENDP
默认情况下,标号只在其被定义的过程中可见。这个规则常常影响到跳转和循环指令。在下面的例子中,名为 Destination 的标号必须与 JMP 指令位于同一个过程中:
jmp Destination
解决这个限制的方法是定义全局标号,即在名字后面加双冒号 (::)。
Destination::
就程序设计而言,跳转或循环到当前过程之外不是个好主意。过程用自动方式返回并调整运行时堆栈。如果直接跳出一个过程,则运行时堆栈很容易被损坏。