MIPS跳转不给PC加4
MIPS jump does not add 4 to PC
我正在尝试了解每个分支指令的范围。
beq
和 bne
指令做类似的事情:
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>
.
我正在尝试了解每个分支指令的范围。
beq
和 bne
指令做类似的事情:
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>
.