【发布时间】:2011-07-11 11:42:48
【问题描述】:
我实际上是在学习组装,我选择了 Gas,但问题是:
1) 我只知道 Intel 语法,我在一个页面中看到带有 Intel 语法的 Gas 在某些情况下优化得不是很好。这是正确的还是我错的?我在谈论这个网站:
2) 然后我还看到(我不记得页面了)gas 可以在多种架构中组装的事实也会减慢组装程序的速度。对吗?
3) 你推荐我的哪个汇编程序产生高度优化的代码?我在其他问题中看到,在某些情况下,每个汇编程序都可以转换为不同的操作码。我介于 YASM、FASM、GAS 和 NASM 之间,但接受其他建议。众所周知,FASM 非常快...
非常感谢!保持这个伟大的社区!
【问题讨论】:
-
至第 2 点:这一事实可能会使 gas 运行速度变慢,但不会影响由它构建的可执行文件。
-
您似乎混淆了组装速度和执行代码的速度。正如 Jerry 所写,几乎所有的优化都必须由您完成,除了一些小的代码大小优化。
-
编译器优化。汇编程序没有(至少,很少)。您使用它的原因是准确地告诉它您想要什么机器语言。如果您想要优化的东西,请使用编译器。
-
汇编程序以惊人的速度运行。不要担心那方面。汇编器可以选择在特定微架构上到处保存循环的编码,但在宏伟的方案中,这不太重要。现代处理器具有令人难以置信的指令解码带宽。
-
这是一个小型微架构优化的示例:ROR on haswell。旋转 1 位的短格式实际上比旋转立即常数的长格式差。汇编器可能会选择长格式来“优化”,即使短格式 应该 更好。没关系,haswell 拥有惊人的解码带宽。
标签: optimization assembly gnu-assembler fasm