orhi r8,r0,%hi(0xffffffff)
addi r8,r0,%lo(0xffffffff)
而不是%hiadj
的{{1}}?
orhi
orhi r8,r0,%hi(0xffffffff)
如果我坚持在ori r8,r0,%lo(0xffffffff)
使用%hi
?
结果为orhi
= %hiadj(0xffffffff)
?
然后不会
0x0001
orhi r8,r0,%hi(0xffffffff)
在addi r8,r0,%lo(0xffffffff)
生成0x0001ffff
?不保留32位地址。
答案 0 :(得分:0)
ori r8,r0,%lo(0xffffffff)
会覆盖上一条指令的结果,因此没有意义。0x0000
(0xffff + 1
) addi
使用符号扩展,%hiadj
通过添加第15位来补偿它。在orhi r8,r0,%hiadj(0xffffffff)
r8
为0x00000000
之后。 addi r8,r0,%lo(0xffffffff)
汇总到addi r8,r0,0xffff
,但是在运行时cpu将符号扩展为0xffffffff
。这一点,当添加到0x00000000
时,显然会0xffffffff
。一个更好的例子是尝试加载0x0001ffff
。在此,%hiadj
会0x00020000
,因此添加符号0xffffffff
将再次生成正确的结果。