我需要帮助确定下面MIPS代码的周期数。
我的主要问题是确定是否满足条件,if语句是否仍然执行(因此增加了总循环次数)
假设单周期实现方案,即每条指令都需要 一个时钟周期执行。 1.执行代码所需的周期数是多少 一个。小号== 0? 湾小号== 1?
这就是我自己想出来的:
一个。 9个周期
湾8个循环(它不执行if语句中包含的指令,并且不跳转到endif语句 - (转到函数)然后是最终结束。
这是MIPS的样本:
main:
# Evaluate the expression.
# Put the final result in a0 to prepare for the syscall.
addi $sp, $sp, -4 # Make space on stack.
sw $ra, 0($sp) # Save return address.
li $t0, 1 # Put 0 in a register
li $a1, 4 # Put 4 in a register
li $a2, 6 # Put 6 in a register
if: bne $t0, $zero, else # (i == 0) ?
add $v0, $a1, $a2 # v0 = a1 + a2
j endif
else: jal func
endif:
add $a0, $v0, $zero
li $v0, 1
所以我需要确定一个周期数。 s = 1,b。 s = 0,假设每条指令需要1个周期。
这个的C代码是
main()
{
int A; a=4; b=6; s=3;
int function(a,b);
if (s==0)
A = a+b;
else
A = function(a,b)
return;
}
# Function to multiply two numbers
function(z,y)
{
int TMP;
TMP = z × y;
ret
格式化道歉。我在这个论坛上的第一篇文章,仍然在努力解决。非常感谢任何帮助。
答案 0 :(得分:0)
根据您是想要近似时间(通过指令计数)还是确定实际执行时间,无论如何都必须计算if
指令。
在大多数现代CPU中,任何类型的跳转指令都包含一些惩罚 - 即使条件分支不
,也可能(对于某些CPU)!惩罚来自cache misses,pipeline扰动和branch prediction。
由于我不明白这句话的含义,我不会进一步剖析代码路径。
TMP = z × y;