计算程序在时钟周期中的运行时间

时间:2017-04-18 14:21:51

标签: assembly x86

如果装配程序如下:

enter image description here

说一个有74个时钟周期的人是否正确? 我出现混乱的地方是16(后)或4(前进)时钟周期。在我的情况下,我如何得到74个时钟周期,我只是在每个时钟周期加起来。后退和前锋。苦苦寻找关于这个主题的任何信息,以便任何输入都有帮助。

1 个答案:

答案 0 :(得分:2)

在回答您的问题之前,我想说这种方法不适用于任何现代流水线/超标量/无序处理器设计。有些指令的延迟为零,例如Core i7上的寄存器寄存器MOV指令。

后退/前进评论指的是分支是否被采取("后退")或未采取("前进")。分支的延迟取决于它的方向。

该计划将花费超过74个时钟周期。您应该总结执行的每条指令的延迟,并且列表中的大多数指令将执行多次。例如,第一个DEC将执行65535 * 65535 * 65535次,大约为2 ^ 48。

由于您的程序由循环组成,因此分析它的正确方法是从最内层循环开始并计算其延迟,然后继续进行外循环。最里面的循环从标签back1开始,包含两个指令,DECJNZ。由于它执行了65535次迭代,因此该循环的延迟为65535 * 2(DEC)+ 65534 * 16(取JNZ)+ 1 * 4(未取JNZ),其工作正常到1179618。

此循环嵌入在外部循环中,从标签back2开始,包含MOV,内循环,DECJNZ。您可以像以前的计算一样计算此循环的运行时间。之后,您将计算从back3开始的循环的运行时间。最后,不要忘记第一个MOV指令,它不包含在任何循环中,只执行一次。