循环ASM更快?

时间:2013-03-05 23:12:14

标签: assembly

是汇编程序中的代码循环更快/相等/更慢然后只需要编写指令x次,这是必需的吗?还是代码依赖? 但是什么时候机器执行二进制文件的速度更快:如果16位-cpu直接读取其16位或者返回32位?

最后;什么意味着在asm中循环?

2 个答案:

答案 0 :(得分:6)

这取决于。重复执行一些指令可能会更快。这种技术通常称为loop unrolling。未展开的循环也可以变得更有效,因为代码将更小,并且许多CPU能够并且通常可以识别循环模式并预测它。也可以具有部分展开的循环。例如,不是直接执行20条指令或进行20次循环迭代,而是可以进行5次循环迭代,每次执行4条指令。

通常,如果不知道您所针对的架构(即CPU的品牌和型号),很难说出什么是最好的。这就是为什么人们不会真正编写汇编代码的原因 - 分析不同方法的优缺点,执行成本,以及为不同的CPU品牌和模型生成不同的代码是编译器开发人员所做的事情。然后其他人用他们选择的语言编写代码,编译器为目标平台生成最好的程序集,这在99%的情况下都有效。

要回答您的问题,您可能要么自己编写两个版本并对其进行分析以查看哪个版本获胜。或者,您可以用C编写代码并为您的平台打开优化(即使用-O3-march开关)并查看编译器生成的内容 - 它肯定是正确的。

希望它有所帮助。祝你好运!

答案 1 :(得分:1)

asm中的

loop通常意味着分支 - 如果相等或类似的东西。如果你正在使用HLE并且没有在一个指令中进行比较和分支的平台上工作,它可能是一个伪指令,用于等同于x86 cmpl然后je

MIPS分支说明:http://en.wikibooks.org/wiki/MIPS_Assembly/Control_Flow_Instructions#Branch_Instructions

同时查看问题: