.set 伪操作

用途

在类型和值中设置一个等于表达式的符号。

语法

描述
.set 姓名, 表达式

描述

.set 伪操作将在类型和值中设置等于 表达式 值的 姓名 符号。 使用 .set 伪操作可能有助于避免使用频繁使用的表达式时出现错误。 将该表达式等同于符号,然后引用该符号而不是该表达式。 要更改表达式的值,请仅在 .set 语句中进行更改。 但是,重新组装程序是必需的,因为 .set 分配仅在组装时发生。

当汇编程序迂到 .set 伪操作时,将对 表达式 参数进行求值。 此评估是使用 表达式的组合处理 中的规则完成的; 评估结果的类型和值存储在内部。 如果对 表达式进行求值导致无效类型,那么所有使用符号 姓名 的指示信息都将发生错误。

在其他指示信息中使用 姓名 时,将使用符号 姓名的存储类型和值,而不是原始表达式定义。

参数

描述
名称 表示可以在 .set 语句中其定义之前使用的符号; 允许在模块中使用转发引用。
expression 用于定义符号 姓名的类型和值。 必须定义在表达式中引用的符号; 不允许转发引用。 这些符号不能是未定义的外部 expressions.The 符号不必在出现 .set 伪操作 appears.The Expression 参数也可以引用寄存器号,但不能在运行时引用寄存器的内容。

示例

  1. 以下示例说明了如何使用 .set 伪操作:
    
    .set ap,14 # Assembler assigns value 14 
                # to the symbol ap -- ap
                # is absolute.
      .
      .
    lil ap,2
     
            # Assembler substitutes value 14
            # for the symbol.
            # Note that ap is a register
            # number in context
            # as lil's operand.
    
  2. 以下示例将导致由于类型无效而发生组合件错误:
    
         .csect  a1[PR]
     L1:  l       20,30(10)
          .csect  a2[rw]
          .long   0x20
     L2:  .long   0x30
          .set    r1, L2 - L1  # r1 has type of E_REXT
                               # r1 has value of 8
          .long   r1 + 10
          .long   L2 - r1      #  Error will be reported.
                               #    L2 is E_REL
                               #    r1 is E_REXT
                               #  E_REL - E_REXT ==> Invalid type