assembly - ASM 循环更快?

标签 assembly

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

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

最佳答案

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

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

要回答您的问题,您可能会自己编写两个版本并对它们进行概要分析以查看哪个版本胜出。或者,您可以用 C 语言编写代码并为您的平台启用优化(即使用 -O3-march 开关)并查看编译器生成的内容——它肯定会执行正确的事情。

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

关于assembly - ASM 循环更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235954/

相关文章:

c - C文件和S文件一起编译时出错

winapi - 在 NASM 中调用 LONGLONG RtlLargeIntegerDivide(LONGLONG, LONGLONG, LONGLONG*) (stdcall)

assembly - 为什么汇编 POPCNTQ 基准测试会比使用整数技巧的 native Go 函数慢?

c++ - C++ 中的怪异性能(VC 2010)

c++ - 组装拆卸

assembly - 如何在 16 位汇编中执行另一个文件

assembly - gdb 无法从字符串地址访问内存

c - x86 程序集 : Using #define'd constants as arguments in calls to to #define's macros

c++ - LLVM JIT 教程代码因简单的参数化函数而崩溃。为什么?

c - 有助于理解 C 和 C++ 中#define、const 和 enum 在汇编级别上的差异