为 AMODE (24) 和 AMODE (31) 汇编语言程序编码 DFHEIENT 宏
对于 AMODE (24) 和 AMODE (31) 程序, DFHEIENT 宏调用 PROLOG 程序,该程序分配工作存储器以保存任何用户变量并供 CICS® 使用。 PROLOG 程序设置此存储器的 CICS 部分。 当程序返回时,此代码将设置由 DFHEIENT 参数指定的寄存器。 转换程序自动插入的 DFHEIENT 宏提供的值可能不足以用于产生大于 4095 字节的转换输出的应用程序。 在这种情况下,您可以提供自己的 DFHEIENT 宏版本,并指定 NOPROLOG 转换程序选项以防止转换程序自动插入其版本的 DFHEIENT 宏。
例如,缺省情况下,转换程序仅设置一个基本寄存器 (寄存器 3) ,这可能会导致程序的可寻址性问题。 您可以使用 CODEREG 操作数提供自己的 DFHEIENT 宏,以便可以指定多个基本寄存器。 如果使用与 CSECT 语句相同的标签对您自己的 DFHEIENT 宏版本进行编码,那么它可以替换源程序中的 CSECT 语句。 如果在没有标签的情况下对 DFHEIENT 宏进行编码,那么它必须紧跟在 CSECT 语句之后。
- 代码
- 指定值 0 (缺省值) 以指定相对寻址。
- 数据 (DATAREG)
- 为应用程序指定一个或多个工作存储器寄存器。 缺省值为寄存器 13 ,建议使用寄存器 13 作为第一个数据动态存储器寄存器。 如果没有, DFHECALL 宏生成的代码将添加额外的指令来处理寄存器 13。 DFHECALL 宏确保寄存器 13 寻址 DFHEISTG 在动态存储器中定义的保存区域。
- EIBREG
- 指定用于寻址 EXEC 接口块 (EIB) 的寄存器。 缺省值为寄存器 11。
- 状态
- 为要使用的应用程序指定一个或多个静态寄存器。 缺省值为 register 3。
- 静态
- 指定静态区域开头的汇编程序标签。 必须指定值; 此参数没有缺省值。
在程序中使用基本寄存器
- CODEREG-基本寄存器 (寄存器 13,14,15 ,不允许 1)
- DATAREG-动态存储器寄存器
- EIBREG-注册以寻址 EIB
INSTRUCT CSECT
EXEC CICS SEND MAP('DFH$AGA') MAPONLY ERASE
END
INSTRUCT DFHEIENT CODEREG=(2,3,4),
DATAREG=(13,5),
EIBREG=6
EXEC CICS SEND
MAP('DFH$AGA')
MAPONLY ERASE
END符号寄存器 DFHEIPLR 等同于显式指定或缺省情况下获取的第一个 DATAREG。 DFHECALL 宏确保寄存器 13 寻址 DFHEISTG 在动态存储器中定义的保存区域,因此建议使用寄存器 13 作为第一个数据动态存储器寄存器。 如果没有, DFHECALL 生成的代码将添加额外的指令来处理寄存器 13。
DFHEIPLR 通过扩展 CICS 命令来包含 DFHEIENT 设置的值。 您应该将此寄存器专用,或者确保在每个 CICS 命令之前将其复原。
在程序中使用相对寻址
- CODEREG=0 ,用于指定不使用任何寄存器来寻址程序指令。
- STATREG ,用于指定一个或多个寄存器以寻址程序中的静态数据区。
- STATIC ,用于指定程序中静态数据的开始地址。
IEABRCX DEFINE Define relative branch mnemonics
RELATIVE DFHEIENT CODEREG=0,STATREG=(8,9),STATIC=MYSTATIC
....
EX R2,VARMOVE Execute instruction in static area
....
MYSTATIC DS 0D Static data area
MYCONST DC C'constant' Static data value
VARMOVE MVC WORKA(0),WORKB Executed instruction
LTORG , Literal pool有关 IEABRCX 宏的更多信息,请参阅 IEABRCX- z/OS MVS Programming: Assembler Services Reference IAR-XCT中的相对分支宏扩展。
需要 LTORG 语句的位置
使用 DLI 选项翻译的汇编语言程序会在每个 CSECT 语句之后插入 DLI 初始化调用。 大于 4095 字节且不使用 DFHEIENT 宏的 CODEREG 操作数来建立多个基本寄存器的汇编语言程序必须包含 LTORG 语句,以确保由 DFHEIENT 或 DLI 初始化调用生成的字面值位于基本寄存器的范围内。
通常,长度超过 4095 字节的每个 CSECT 都需要一个 LTORG 语句。
相关信息
- 有关 DFHEIENT 宏的参考信息,请参阅 DFHEIENT 宏。
- 有关 DFHEIRET 宏的更多信息,请参阅 为汇编语言程序编码 DFHEIRET 宏 和 DFHEIRET 宏。
- 有关 DFHEISTG 存储器的更多信息,请参阅 为汇编语言程序扩展动态存储器。
- 有关 EXEC 接口的参考信息,包括设计概述,控制块,模块,出口和跟踪,请参阅 EXEC 接口。