MIPS跳转不给PC加4

MIPS jump does not add 4 to PC

我正在尝试了解每个分支指令的范围。

beqbne 指令做类似的事情:

PCnew = (PCold + 4) + (距分支点的步数)*4

然而,跳转指令不会将 4 添加到 PCold,尽管我知道每个 mips 指令都会添加 4(以转到下一条指令)。所以如果我写:

j loop 

然后PCnew取loop*4的地址不加4到it.Why是吗?我是不是弄错了什么?

跳转使用绝对地址,而分支使用PC-relative地址。

所以跳转只是将 PC 设置为跳转目标地址。

对于分支,分支 位移(又名偏移)被添加到 PC。但是此时PC已经前进到下一条指令,所以分支目标地址为:<address of branch instruction> + 4 + <relative displacement>.