MIPS上分支地址的计算



我不明白MIPS中的分支地址是如何计算的。

以下是程序计数器(PC)的全貌:PC = PC + 4 + ((signed-extended offset)<<2)

我明白了为什么偏移量在添加到PC之前是signed-extended,它只是16位值,需要转换为32位值,但为什么我们需要left double shift有符号扩展数???(此外,<<2意味着我们将数字乘以4)

在我们讨论这个问题时,我将扩大问题的范围:当我们从立即值(寄存器)偏移时,为什么不执行<<2

谢谢!

需要知道的重要一点是,指令是四字节对齐的。因此,不需要存储两个最低有效地址位,这允许16位位移给出2^18字节的范围。

此外,您可能会注意到,数据的位移不会发生偏移,因为数据需要是字节可寻址的。

地址必须是四的倍数,因此通过自动乘以四,可以留下更多有效位供实际使用。(换句话说,在某种程度上,这就像你真的有18个比特。)

最新更新