MIPS分支指令 - 获取分支位置

时间:2017-05-13 21:40:38

标签: c mips offset sign bitmask

我想知道如何找到指令的分支位置,例如 bne $s1, $s0, label_name。根据我的理解,16位立即值是应该添加到PC进行分支的相对偏移量。

我想知道的是如何计算分支地址,因为我发现同样的事情存在多个矛盾的答案。

到目前为止我发现了什么:

  1. 将当前PC增加四倍。
  2. 将立即值(16位)左移2(乘以4)。
  3. 将立即值扩展为32位。
  4. 添加PC和即时值。
  5. 这是对的吗?如果是这样,我将如何签署在C中扩展此值?

1 个答案:

答案 0 :(得分:1)

这个等式澄清了一切。

PC'=下一个PC

SignImm=签署延期免税

  PC' = PC + 4 + SignImm*4 

您可以获得下一个PCPC')。

  1. 将四个添加到当前PC

  2. Sign立即扩展16位。

  3. 将它向左移动2并将其添加到PC+4

  4. 我如何签名在C

    中进行扩展
         int16_t s = -890;
         int32_t i = s;