我正在尝试弄清ori t1,100000
在MIPS中是如何分解的。 MIPS说它变成了。
lui $1,1
ori $1,$1,34464
or $9,$9,$1
我不确定lui
的值是1,ori
的值是34464。
答案 0 :(得分:2)
如果使用任何计算器将100000转换为十六进制,您将得到
100000 = 0x186a0
其大小优于16位,并且在MIPS中,立即数不能大于16位。我们不能在一条指令中输入该值。
查看不同的上部和下部。
0x186a0 = 0x10000 + 0x86a0
=(0x1 << 16)+ 0x86a0
和
0x86a0 = 34464
现在我们拥有编写代码所需的一切。
# store 0x10000==1<<16 in an intermediate register with lui (load upper immediate)
# MIPS asm uses $1 (or $at) as intermediate register
lui $1,1
# content of $1 is 0x00010000
ori $1,$1,34464
# nor we can OR this register with t1 (also called $9)
or $9,$9,$1