MIPS/UP16 分支指令

MIPS/UP16 Branch instructions

我有我的学校项目,它写在论文上

1 nop
2 add , ;    //RF[1]=RF[1]=RF[2]
3 beq , , #1 //if (RF[1]==RF[3]) skip inst 5
4 nop
5 add ,      //RF[4]=RF[4]+RF[1]
6 add ,      //RF[5]=RF[5]+RF[1]

所以在第3行,SET指令中的BEQ为

pc += sign_ext(immed) + 1;

那么,PC 不是在 (3+1+1) = 5 而不是跳过指令 5 吗?

beq后面有一个可疑的nop,所以你应该看看手册是否MIPS有delayed branches,也就是说在分支之前, 下一条指令总是会被执行。然后这条指令可能会计入 pc.

(只是猜测,因为我不知道 MIPS,但是 Wikipedia does。)