考虑这个I型指令(BNE,分支不相等):0001 0100 1010 1001 1111 1111 1110 1111。当满足网元条件时,PC值的变化是什么,即PC = PC + _____?
问题的答案是-68,但我不完全确定为什么。我知道对于 I-Type 指令,最后 16 位如果偏移量,源目标和您分支的位置之间的有符号差异也是如此。所以所有的 1 都表示负值?但是,我仍然不明白值 68 是如何得出的。
指令的直接部分是
1111 11111110 1111
等于 -17。这是由于 2 的补码编码,可以很容易地验证通过在这个数字上加 17,我们得到 2^16(如果我们只保留 16 个前位,则为零)。
MIPS指令是32位(4字节),它们是对齐的,即它们的地址始终是4的倍数。MIPS架构利用这一特性来增加分支范围,由于PC始终是4的倍数,因此分支偏移量在添加到PC之前将乘以4。这允许存储 4 倍大的偏移量。
因此,一个值 0 4*(-17) 将被添加到 PC,即 -68。
确切地说,MIPS官方文档指出
18 位有符号偏移量(16 位偏移量字段左移 2 位)添加到以下指令的地址中 分支(不是分支本身)在分支延迟槽中,以形成 PC 相对有效的目标地址。
一个等效的公式是,在获取指令阶段将 -68 的值增加 4 后,该值将被添加到 PC 中。