MIPS 32位立即数一般用lui和ori来讲32位立即数读到寄存器里,为什么不能用addi来代替ori?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 01:29:20
MIPS 32位立即数一般用lui和ori来讲32位立即数读到寄存器里,为什么不能用addi来代替ori?

MIPS 32位立即数一般用lui和ori来讲32位立即数读到寄存器里,为什么不能用addi来代替ori?
MIPS 32位立即数
一般用lui和ori来讲32位立即数读到寄存器里,为什么不能用addi来代替ori?

MIPS 32位立即数一般用lui和ori来讲32位立即数读到寄存器里,为什么不能用addi来代替ori?
这个问题有点难想到,因为addi的立即数是有符号数,如果原数的第16位为1,那么在addi中将会变成负数,最终结果就不对.
但是如果你想用addi也是可以的,只要在取高16位的时候再加上第16位的数就行了.
如果原数第16位是0,那么直接addi没事
比如你说的0x1025A152,用addi就错了,因为A是1010.
不过可以在取"1025"的时候加上原数的第16位,也就是1,这样在addi的时候减去A152就正好
加了2^16,再减去A152(要变成补码)
因为+2^16 - (2^16 - (A152原码的绝对值)) = A152原码的绝对值
所以正确了.