以下I-Type指令如何更改程序计数器?

时间:2019-04-07 21:49:11

标签: mips machine-instruction

请考虑以下I型指令(BNE,分支不相等):0001 0100 1010 1001 1111 1111 11101111。当满足NE条件时,PC值的变化是什么,即PC = PC + _____ ?

这个问题的答案是-68,但是我不确定为什么。我知道,对于I型指令,如果偏移量,源目标位置和您要分支的位置之间的有符号差异,则最后16位也是如此。那么所有的1都表示一个负值吗?但是,我仍然不知道值68是如何得出的。

1 个答案:

答案 0 :(得分:0)

指令的直接部分是

  

1111 1111 1110 1111

等于-17。这是由于二进制补码编码,并且可以很容易地验证出,通过向该数字加17,我们得到2 ^ 16(如果仅保留前16位,则为零)。

MIPS指令为32位(4字节),并且已对齐,即它们的地址始终为4的倍数。MIPS架构使用此特性来增加分支范围,并且由于PC始终为4的倍数,因此分支偏移将乘以4,然后再添加到PC中。这样可以存储4倍大的偏移量。

因此,将值0 4 *(-17)添加到PC,即-68。

确切地说,official MIPS documentation指出

  

18位带符号偏移量(16位偏移量字段左移2位)被添加到以下指令的地址中   分支延迟槽中的分支(而不是分支本身),以形成相对于PC的有效目标地址。

一个等效的公式是,在 fetch指令阶段将-68的值增加4后,会将其添加到PC。