如果装配程序如下:
说一个有74个时钟周期的人是否正确? 我出现混乱的地方是16(后)或4(前进)时钟周期。在我的情况下,我如何得到74个时钟周期,我只是在每个时钟周期加起来。后退和前锋。苦苦寻找关于这个主题的任何信息,以便任何输入都有帮助。
答案 0 :(得分:2)
在回答您的问题之前,我想说这种方法不适用于任何现代流水线/超标量/无序处理器设计。有些指令的延迟为零,例如Core i7上的寄存器寄存器MOV
指令。
后退/前进评论指的是分支是否被采取("后退")或未采取("前进")。分支的延迟取决于它的方向。
该计划将花费超过74个时钟周期。您应该总结执行的每条指令的延迟,并且列表中的大多数指令将执行多次。例如,第一个DEC
将执行65535 * 65535 * 65535次,大约为2 ^ 48。
由于您的程序由循环组成,因此分析它的正确方法是从最内层循环开始并计算其延迟,然后继续进行外循环。最里面的循环从标签back1
开始,包含两个指令,DEC
和JNZ
。由于它执行了65535次迭代,因此该循环的延迟为65535 * 2(DEC
)+ 65534 * 16(取JNZ
)+ 1 * 4(未取JNZ
),其工作正常到1179618。
此循环嵌入在外部循环中,从标签back2
开始,包含MOV
,内循环,DEC
和JNZ
。您可以像以前的计算一样计算此循环的运行时间。之后,您将计算从back3
开始的循环的运行时间。最后,不要忘记第一个MOV
指令,它不包含在任何循环中,只执行一次。