经典MIPS硬件:分支延迟槽是否计入总周期?循环指令数如何统计?
问题解答
1. 经典MIPS分支延迟槽与总周期数的关系
在经典MIPS硬件中,分支指令后的延迟槽会计入总周期数。因为经典MIPS的分支延迟槽机制要求,无论分支是否发生跳转,延迟槽内的指令都会被执行,这条指令的执行周期必然会被算入总运行周期中。
2. 循环指令计数问题
原代码的循环指令数量
给出的代码中,循环的范围是从标签l1到bne $t5, $zero, L1这条分支指令,共7条指令:
sll $t2, $t0, 2add $t3, $a0,$t2lw $t4, 0($t3)add $t1, $t1, $t4addi $t0, $t0,1slt $t5, $t0, $a1bne $t5, $zero, L1
最后的add $v0, $zero, $t1是循环退出后才执行的收尾指令,不属于循环体的一部分,因此循环包含7条指令,不是8条。
若bne后无其他指令的情况
即使bne $t5, $zero, L1之后没有其他指令,循环包含的指令数量依然是7条。分支指令本身属于循环体,而原代码中紧跟bne的add并非循环迭代内的执行内容,移除它不会改变循环体的指令构成。
内容的提问来源于stack exchange,提问作者Begin
相关产品推荐
相关产品推荐

