我是MIPS-32的新手,我在理解以下指令的偏移量方面遇到了问题:
beq $a0,$a1,0x00401200
知道
PC=0x0040122C
我认为
$a0=00100
$a1=00101
该指令应为000100 | 00100 | 00101 | 0001 0010 0000 0000。
解决方案说偏移是-12,但我不明白为什么。 谁能帮我一把?
答案 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。