如何在 IBM (HLASM) 中使用显式寻址

Posted

技术标签:

【中文标题】如何在 IBM (HLASM) 中使用显式寻址【英文标题】:How to use explicit addressing in IBM (HLASM) 【发布时间】:2019-07-14 06:40:30 【问题描述】:

我一直在网上寻找有关显式寻址的信息,但什么都没有,但解释很模糊。我希望有人可以详细解释我,如果可能的话,举个例子。 我想知道,index、base应该用什么寄存器,位移值应该是什么

示例 8(,4) 或 5(0,5) 或 6(7)

【问题讨论】:

如果你大声说出来,你有点学习“语言”......大多数时候,寄存器在括号内,有时还有长度。 【参考方案1】:

它可能取决于正在执行的指令。请参阅 IBM 的此参考资料,以帮助整理详细信息。作为一个老 Z 表演者,当人们询问有关表演的问题时,答案几乎总是“这取决于”

看到这个article

未以符号汇编语言显式编码的寄存器 机器指令的表示,但仍然由 汇编的机器指令,分为两类:基础 隐含在指定符号地址中的寄存器。 (看 地址。)可以通过检查对象来识别寄存器 代码或分配基址寄存器的 USING 指令 源模块。

机器指令使用的寄存器,但 不会出现在汇编的目标代码中。 对于双移位和全字乘除指令,奇数寄存器,其编号比指定为第一个操作数的偶数寄存器大一。

对于 Move Long 和 Compare Logical Long 指令, 奇数寄存器,其编号大于 1 两个操作数中指定的偶数寄存器。

对于索引高位分支 (BXH) 和索引低位或相等分支 (BXLE) 指令,如果为第二个操作数指定的寄存器是 偶数寄存器,使用下一个更高的奇数寄存器 包含要用于比较的值。

对于加载多个(LM,LAM)和存储多个(STM,STAM)指令,位于前两个操作数中指定的寄存器之间的寄存器。

对于扩展精度浮点指令,第二个寄存器 寄存器对。

对于比较和形成代码字 (CFC) 指令,使用寄存器 1、2 和 3。 > 对于翻译和测试 (TRT) 指令,使用寄存器 1 和 2。对于更新树 (UPT) 指令,使用寄存器 0-5。

对于编辑和标记 (EDMK) 指令,使用寄存器 1。对于某些控制指令,使用寄存器0-4和寄存器14中的一个或多个。参见“控制 适用的 z/Architecture 操作原则中的说明” 手动的。

对于某些输入和输出指令,使用寄存器 1 和 2 中的一个或两个。请参阅适用的 z/Architecture 操作原则手册中的“输入/输出说明”。 在具有向量功能的处理器上:

    对于在向量寄存器中操作长浮点数据的指令,奇数向量 寄存器,其编号比偶数向量大一 每个操作数中指定的寄存器。

    用于操作的指令 向量寄存器中的 64 位带符号二进制数据,奇数向量 寄存器,其编号比偶数向量大一 每个操作数中指定的寄存器。

【讨论】:

以上是关于如何在 IBM (HLASM) 中使用显式寻址的主要内容,如果未能解决你的问题,请参考以下文章

将整数提升到 8 个字节,包括使用 IBM xlf 编译器显式声明的整数

如何在 64 位汇编程序中使用 RIP 相对寻址?

如何在 64 位汇编程序中使用 RIP 相对寻址?

如何使用 WCF 实现 WS 寻址?

shmget 如何分配内存?无法使用线性寻址访问(地址边界错误)

如何从从 Assembly 返回到 COBOL 的指针中寻址数据缓冲区