2016-03-08 45 views
0
  1. 我们可以使用

orhi r8,r0,%hi(0xffffffff)为什么在movia中使用%hiadj?

addi r8,r0,%lo(0xffffffff)

代替%hiadjorhi

  • 还是必须是
  • orhi r8,r0,%hi(0xffffffff)

    ori r8,r0,%lo(0xffffffff)

    如果我坚持在orhi%hi使用?

    1. %hiadj(0xffffffff) = 0x0001的结果吗?

    2. 以后就不会

    orhi r8,r0,%hi(0xffffffff)

    addi r8,r0,%lo(0xffffffff)

    产生0x0001ffffr8? 32位地址不会保留。

    回答

    0
    1. 是的,你可以但它不会做你认为它做的事。
    2. ori r8,r0,%lo(0xffffffff)会覆盖前面指令的结果,因此没有任何意义。
    3. 不,这是0x00000xffff + 1
    4. “然后”可以,但因为它不是,它不会:)

    addi使用符号扩展和%hiadj弥补了通过添加位#15。在orhi r8,r0,%hiadj(0xffffffff)r80x00000000addi r8,r0,%lo(0xffffffff)汇编为addi r8,r0,0xffff,但立即在运行时由cpu扩展为0xffffffff。这个,当加到0x00000000时明显给出0xffffffff。一个更好的例子是试图加载0x0001ffff。在这里,%hiadj将给0x00020000,所以添加符号扩展0xffffffff将再次产生正确的结果。