我正在尝试理解每个分支指令的范围。
beq
和bne
指令执行类似的操作:
PCnew =(PCold + 4)+(从分支点开始)* 4
然而,跳转指令不会向PCold添加4,尽管我知道每个mips指令都添加4(转到下一条指令)。所以,如果我写:
j loop
然后PCnew获取循环* 4的地址并且不添加四个。为什么?我错了吗?
答案 0 :(得分:2)
跳转使用绝对地址,而分支使用 PC相对地址。
因此跳转只会将PC设置为跳转目标地址。
对于分支,分支位移(又名偏移)被添加到PC。但是此时PC已经前进到下一条指令,因此分支目标地址为:<address of branch instruction> + 4 + <relative displacement>
。