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。)
我有我的学校项目,它写在论文上
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。)