我想知道如何找到指令的分支位置,例如
bne $s1, $s0, label_name
。根据我的理解,16位立即值是应该添加到PC进行分支的相对偏移量。
我想知道的是如何计算分支地址,因为我发现同样的事情存在多个矛盾的答案。
到目前为止我发现了什么:
这是对的吗?如果是这样,我将如何签署在C中扩展此值?
答案 0 :(得分:1)
这个等式澄清了一切。
PC'=
下一个PC
。
SignImm=
签署延期免税
PC' = PC + 4 + SignImm*4
您可以获得下一个PC
(PC'
)。
将四个添加到当前PC
。
Sign立即扩展16位。
将它向左移动2并将其添加到PC+4
。
我如何签名在C
中进行扩展 int16_t s = -890;
int32_t i = s;