MIPS五级流水线代码执行周期计算及程序终止性疑问
MIPS流水线周期计算与程序终止性疑问
背景
32位MIPS处理器,五级流水线支持停顿但无转发,分支指令比较在执行阶段完成,无分支延迟槽。需计算从foo标签后的addi指令取指周期开始,到jr指令取指周期(含)的时钟周期总数。
汇编代码
.data .align 2 numbers: .space 40 .align 2 .text start: la $a0, numbers addi $a1, $0, 10 jal foo foo: addi $sp, $sp, -4 sw $a0, 0($sp) loop: sw $a1, 0($a0) addi $a0, $a0, 4 addi $a1, $a1, -1 bne $a1, $0, loop lw $t3, 0($sp) addi $sp, $sp, 4 lw $t0, 0($t3) lw $t1, 4($t3) add $v0, $t0, $t1 jr $ra
周期计算分歧
我的计算逻辑:无数据/控制冒险时总周期为52(首条addi指令占5个时钟周期,后续47条指令每个增加1个周期),加上52个冒险延迟周期,总周期应为104。但参考答案仅累加48个延迟周期,得出总周期96的结论,我认为这个答案有误。
程序终止性疑问
我认为这段程序会正常终止,但参考答案认为程序不会终止,希望能得到明确的解答。
内容的提问来源于stack exchange,提问作者Need_MathHelp
相关产品推荐
相关产品推荐

