MIPS代码周期时间

时间:2015-04-01 15:49:25

标签: c assembly mips

我需要帮助确定下面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

格式化道歉。我在这个论坛上的第一篇文章,仍然在努力解决。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

根据您是想要近似时间(通过指令计数)还是确定实际执行时间,无论如何都必须计算if指令。

在大多数现代CPU中,任何类型的跳转指令都包含一些惩罚 - 即使条件分支

,也可能(对于某些CPU)!

惩罚来自cache missespipeline扰动和branch prediction

由于我不明白这句话的含义,我不会进一步剖析代码路径。

TMP = z × y;