3

汇编器中的代码循环是否更快/等于/更慢,然后只需编写指令x次,这是需要的吗?还是依赖于代码?但是机器何时执行二进制文件更快:如果 16 位 CPU 直接读取其 16 位还是返回 32 位?

最后;asm中的循环是什么意思?

4

2 回答 2

6

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

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

要回答您的问题,您可能会自己编写这两个版本并分析它们以查看哪一个获胜。或者,您可以用 C 编写代码并为您的平台启用优化(即使用-O3-march开关)并查看编译器生成什么——它肯定会做正确的事情。

希望能帮助到你。祝你好运!

于 2013-03-05T23:20:10.743 回答
1

loop在 asm 中通常表示分支如果相等或类似的东西。如果您使用的是 HLE 并且不在一个在一条指令中执行比较和分支的平台上工作,则它可能是一个伪指令,相当于 x86cmplje.

MIPS 分支指令:http ://en.wikibooks.org/wiki/MIPS_Assembly/Control_Flow_Instructions#Branch_Instructions

另请查看以下问题:

于 2013-03-05T23:28:40.880 回答