基于隐式的寻址

通过省略 RA 操作数并在指令之前的某个点写入 .using 伪操作,将基于隐式的地址指定为指令的操作数。

通过省略 亚美尼亚共和国 操作数并在指令之前的某个点写入 . 使用 伪操作,将基于隐式的地址指定为指令的操作数。 在组装相应的 .using.drop 伪操作之后,汇编程序可以确定要用作基本寄存器的寄存器。 在运行时,处理器会计算有效地址,就像在指令中显式指定了基本地址一样。

基于隐式的地址可以是可重定位的或绝对的,具体取决于在运行时用于指定 RA 操作数内容的表达式类型。 通常, RA 操作数的内容是使用可重定位的表达式指定的,从而生成可重定位的基于隐式的地址。 在这种情况下,当重新定位汇编程序生成的对象模块时,仅会更改基本寄存器 RA 的内容。 位移保持不变,因此 D(RA) 在重定位后仍指向正确的地址。

dsect 是一个参考控制部分,允许您描述数据在存储区域中的布局,而无需实际保留任何存储器。 还可以通过使用 dsect 名称或 dsect 标签指定 RA 的内容来创建基于隐式的地址,从而使基本部分与哑元部分相关联。 当实例化 dsect 时,将在运行时解析 RA 内容的值。

如果使用绝对表达式指定 RA 操作数的内容,那么将生成基于隐式的绝对地址。 在这种情况下,重新定位对象模块时, RA 的内容不会更改。

汇编程序仅支持可重定位的基于隐式的寻址。

使用基于隐式的寻址时,请执行以下操作:

  1. 编写 .using 语句以告知汇编程序一个或多个通用寄存器 (GPRs) 现在将用作基本寄存器。
  2. 在此 .using 语句中,告诉汇编程序每个基本寄存器在执行时将包含的值。 在迂到 .drop 伪操作之前,汇编程序将使用此基本寄存器值来处理需要基于地址的所有指令。
  3. 使用先前指定的值装入每个基本寄存器。

对于基于隐式的寻址,将始终省略 RA 操作数,但保留 D 操作数。 D 操作数可以是绝对表达式, TOC 相对表达式,可重定位表达式或受限外部表达式。

注意:
  1. D 操作数是绝对表达式或受限外部表达式时,汇编程序始终将其转换为 D(0) 格式,因此 .using 伪操作没有任何作用。
  2. .using.drop 伪操作仅影响基于的地址。
    
    .toc
    T.data: .tc data[tc],data[rw]
    .csect data[rw]
            foo: .long 2,3,4,5,6
            bar: .long 777
     
            .csect text[pr]
            .align 2
            l 10,T.data(2)   # Loads the address of
                                     # csect data[rw] into GPR 10.
     
            .using data[rw], 10      # Specify displacement.
            l 3,foo          # The assembler generates l 3,0(10)
            l 4,foo+4        # The assembler generates l 4,4(10)
            l 5,bar          # The assembler generates l 5,20(10)