MIPS 32位立即数
答案:2 悬赏:70
解决时间 2021-03-08 01:59
- 提问者网友:生亦何欢
- 2021-03-07 09:08
一般用lui和ori来讲32位立即数读到寄存器里,为什么不能用addi来代替ori?
最佳答案
- 二级知识专家网友:眠于流年
- 2021-03-07 09:57
这个问题有点难想到,因为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原码的绝对值
所以正确了。
但是如果你想用addi也是可以的,只要在取高16位的时候再加上第16位的数就行了。
如果原数第16位是0,那么直接addi没事
比如你说的0x1025A152,用addi就错了,因为A是1010.
不过可以在取"1025"的时候加上原数的第16位,也就是1,这样在addi的时候减去A152就正好
加了2^16,再减去A152(要变成补码)
因为+2^16 - (2^16 - (A152原码的绝对值)) = A152原码的绝对值
所以正确了。
全部回答
- 1楼网友:随心随缘不随便
- 2021-03-07 11:36
编译64位程序,不一定要编译机器是64位的,但是32位机器默认安装的gcc编译环境还是不能用来编译64位程序。 编译64位程序,需要加上-m64编译器参数,默认安装的gcc已经支持该参数,但是缺少64位机器指令相关的文件,所以不能编译
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯