分解lui MIPS

问题描述 投票:-2回答:1

我试图找出ori t1,100000如何在MIPS中崩溃。 MIPS说它变成了。

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

我不确定它是如何获得lui的值1和ori的34464。

assembly mips
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.