DFHECALL 宏
对于汇编语言应用程序,当 CICS ® 转换程序检测到 CICS 命令时,每个命令都将替换为 DFHECALL 宏的调用。 DFHECALL 宏用于设置命令参数并调用初始 CICS 命令处理器来处理命令。
- 寄存器 15 包含 EXEC 接口程序中入口点的地址。
- 寄存器 14 包含应用程序中返回点的地址。
- 未定义寄存器 0。
- 寄存器 1 包含参数列表的地址。
在 EXEC 接口处理器中解析了寄存器 15 中的入口点,该入口点必须与应用程序进行链接编辑。 对于 AMODE (24) 和 AMODE (31) 应用程序,此 EXEC 接口处理器是 DFHEAI; 对于 AMODE (64) 应用程序,它是 DFHEAG。
您可以通过源程序中的 EXEC CICS RETURN 命令指定应用程序的出口。 或者,您可以使用 DFHEIRET 宏,这将恢复寄存器并将控制权返回到寄存器 14 中的地址。 除非指定 NOEPILOG 转换程序选项,否则转换程序会在 END 语句之前立即插入 DFHEIRET 宏 (未指定任何参数)。 您可以使用此宏从顶级程序返回,但建议不要从较低级别的程序返回。
在组装期间, DFHECALL 宏会在动态存储器中构建参数列表,以便应用程序可重入。 然后,宏调用针对 AMODE (24) 或 AMODE (31) 应用程序的 EXEC 接口程序 DFHEIP ,或针对 AMODE (64) 应用程序的 DFHEIG。 这些程序也服从系统标准,如前所述。
对于 AMODE (64) 应用程序,虽然应用程序和初始命令处理器以 64 位寻址方式运行,但 DFHECALL 宏设置并传递到初始命令处理器的参数包含 31 位地址。 因此,在其中构建调用参数的存储器 (DFHEISTG 存储器) 必须是 31 位存储器 (高于 16 MB 但低于 2 GB)。
- DFHEIGBL
如果您在批处理或联机 CICS 应用程序中使用 EXEC DLI ,那么此宏将设置全局值。 在 DFHEIGBL 中,如果 DFHEIDL 设置为 1 ,那么这意味着程序包含 EXEC DLI 命令。 如果 DFHEIDB 设置为 1 ,这意味着程序是批处理 DL/I。 如果您未使用 DL/I ,那么会将其注释并设置为 0。
- DFHEIENT
- 此宏插入在第一个 CSECT 或 START 指令之后。 它执行 prolog 代码以分配用于存放任何用户变量和供 CICS 使用的工作存储器:
- 它保存寄存器
- 它获取 DFHEISTG 定义的存储器的初始分配
- 它设置基本寄存器 (缺省寄存器 3)
- 它设置动态存储器寄存器 (缺省寄存器 13)
- 它设置一个寄存器来寻址 EIB (缺省寄存器 11)
- DFHEIRET
- 此宏执行附日志代码以释放应用程序的工作存储器:
- 它会恢复寄存器。
DFHEIRET RCREG=nn ,其中 nn (除 13 以外的任何寄存器号) 包含要在寄存器 15 恢复后放在寄存器 15 中的返回码。
- 它将控制权返回到寄存器 14 中的地址。
- 它会恢复寄存器。
- DFHEISTG 和 DFHEIEND
- 这些宏定义动态存储器:
- 它们定义参数列表所需的存储器
- 它们定义保存区域。
有关这些宏与 AMODE (64) 应用程序的进一步详细信息,请参阅 编码 EXEC CICS (r) 汇编程序接口。
包含描述 EIB 的 DSECT 的副本 DFHEIBLK 也会自动包含。
程序必须具有 END 语句,因为转换程序不会以其他方式插入缺省宏。 此外, CSECT 或 START 和 END 必须为大写才能使转换程序识别它们。
Source program
INSTRUCT CSECT
EXEC CICS SEND MAP('DFH$AGA') MAPONLY ERASE
END
This source program is translated to:
DFHEIGBL , INSERTED BY TRANSLATOR
INSTRUCT CSECT
DFHEIENT INSERTED BY TRANSLATOR
* EXEC CICS SEND MAP('DFH$AGA') MAPONLY ERASE
DFHECALL =X'1804C0000800000000046204000020',
(CHA7,=CL7'DFH$AGA*'),(______RF,DFHEIV00)
DFHEIRET INSERTED BY TRANSLATOR
DFHEISTG INSERTED BY TRANSLATOR
DFHEIEND INSERTED BY TRANSLATOR
END