DFHECALL 宏

对于汇编语言应用程序,当 CICS ® 转换程序检测到 CICS 命令时,每个命令都将替换为 DFHECALL 宏的调用。 DFHECALL 宏用于设置命令参数并调用初始 CICS 命令处理器来处理命令。

此宏扩展为使用寄存器 15,14 , 0 和 1 的系统标准调用序列。 这些寄存器的内容如下:
  • 寄存器 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)。

除了调用 DFHECALL 宏外,转换程序还会将以下宏插入到源程序中:
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 必须为大写才能使转换程序识别它们。

图 1 中的示例显示了一个简单的汇编语言应用程序,该程序使用 BMS 命令 SEND MAP 将映射发送到终端,然后在转换程序 INSTRUCT 后输出。
图 1。 CICS 命令的源程序和转换代码
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