我试图找出如何创建跳转指令代码并拥有正确的代码,但我不确定原因。
所以,如果我有这个:
addi $s1, $s1, 0
addi $s1, $s1, 0
lui $s1, 0x1001
top: bne $s1, $s2, end
addi $s1, $s1, 1
end: j top
我想找出j top
正确答案是0x08100003。我只是不确定如何。
top的地址是0x0040000C。
快速而肮脏的计算方法就是弄明白x * 4 =目标地址。因此,x * 4 = 4(1)并且x * 4 = 12(3)。所以,我明白为什么指令中有1和3。
跳转的操作码是2hex,所以我们从0000 10开始(操作码为6位)。然后我不确定接下来该做什么。我知道指令的结尾将是3,但我怎么知道将1放在哪里?
我希望这是有道理的。谢谢您的帮助。
答案 0 :(得分:3)
J
的指令字由一个值为%000010
的6位操作码组成,后跟26位,其中包含目标地址的低28位,右移2位。
如果我们取0x040000C
,则将其向右移2位,并以二进制形式显示结果,只有低位26位%00000100000000000000000011
。
让我们将操作码位添加到其中,这给我们%00001000000100000000000000000011
。如果我们将该数字拆分为四位组,则更容易看到十六进制表示:
0000 1000 0001 0000 0000 0000 0000 0011
0 8 1 0 0 0 0 3