mips在beq指令中查找偏移量

时间:2018-05-16 01:23:48

标签: mips32

我是MIPS-32的新手,我在理解以下指令的偏移量方面遇到了问题:

beq $a0,$a1,0x00401200

知道

PC=0x0040122C

我认为

$a0=00100
$a1=00101

该指令应为000100 | 00100 | 00101 | 0001 0010 0000 0000。

解决方案说偏移是-12,但我不明白为什么。 谁能帮我一把?

1 个答案:

答案 0 :(得分:2)

目标地址由TA = PC + 4(offset)

找到

所以offset = (TA - PC)/4

0x00401200是您的目标地址。我们看到它正在倒退,因此我们必须确保答案是否定的。在这种情况下,我更喜欢PC-TA,然后找到2s补码。

PC - TA : 0x0040122C - 0x00401200 = 0x002C

我们可以通过这样做找到2s补码

0xFFFF(16)-0x002C = 0xFFFD4

现在我们可以通过右移2位来除以4以找到TA

1111 1111 1111 1101 0100 -> 11 1111 1111 1111 0101 The offset = 0xFFF5

我最终以offset = -11(0xFFF5)结束。但是,如果我将其重新插入 TA = PC + 4(偏移),我得到0x401200。