为什么在movia中使用%hiadj?

时间:2016-03-08 12:25:13

标签: assembly nios

  1. 我们可以使用
  2. orhi r8,r0,%hi(0xffffffff)

    addi r8,r0,%lo(0xffffffff)

    而不是%hiadj的{​​{1}}?

    1. 或者必须
    2. orhi

      orhi r8,r0,%hi(0xffffffff)

      如果我坚持在ori r8,r0,%lo(0xffffffff)使用%hi

      1. 结果为orhi = %hiadj(0xffffffff)

      2. 然后不会

      3. 0x0001

        orhi r8,r0,%hi(0xffffffff)

        addi r8,r0,%lo(0xffffffff)生成0x0001ffff?不保留32位地址。

1 个答案:

答案 0 :(得分:0)

  1. 是的,你可以,但它不会做你认为它做的事情。
  2. ori r8,r0,%lo(0xffffffff)会覆盖上一条指令的结果,因此没有意义。
  3. 不,是0x00000xffff + 1
  4. "然后"它会,但因为它不是,它不会:)
  5. addi使用符号扩展,%hiadj通过添加第15位来补偿它。在orhi r8,r0,%hiadj(0xffffffff) r80x00000000之后。 addi r8,r0,%lo(0xffffffff)汇总到addi r8,r0,0xffff,但是在运行时cpu将符号扩展为0xffffffff。这一点,当添加到0x00000000时,显然会0xffffffff。一个更好的例子是尝试加载0x0001ffff。在此,%hiadj0x00020000,因此添加符号0xffffffff将再次生成正确的结果。