0

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

问题的答案是-68,但我不完全确定为什么。我知道对于 I-Type 指令,最后 16 位是偏移量,源目标和分支位置之间的有符号差异。所以所有的1都表示负值?但是,我仍然不明白值 68 是如何得出的。

4

1 回答 1

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。

准确地说,官方 MIPS 文档指出

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

一个等效的公式是这个值 -68 将被添加到 PC,在它在获取指令阶段增加 4 之后。

于 2019-04-07T22:29:10.390 回答