Lui MIPS细分

时间:2019-03-02 02:52:29

标签: assembly mips

我正在尝试弄清ori t1,100000在MIPS中是如何分解的。 MIPS说它变成了。

lui $1,1
ori $1,$1,34464
or $9,$9,$1

我不确定lui的值是1,ori的值是34464。

1 个答案:

答案 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