【问题标题】:Gnu Assembler (GAS) OptimizationsGnu 汇编器 (GAS) 优化
【发布时间】:2011-07-11 11:42:48
【问题描述】:

我实际上是在学习组装,我选择了 Gas,但问题是:

1) 我只知道 Intel 语法,我在一个页面中看到带有 Intel 语法的 Gas 在某些情况下优化得不是很好。这是正确的还是我错的?我在谈论这个网站:

http://wiki.osdev.org/FASM

2) 然后我还看到(我不记得页面了)gas 可以在多种架构中组装的事实也会减慢组装程序的速度。对吗?

3) 你推荐我的哪个汇编程序产生高度优化的代码?我在其他问题中看到,在某些情况下,每个汇编程序都可以转换为不同的操作码。我介于 YASM、FASM、GAS 和 NASM 之间,但接受其他建议。众所周知,FASM 非常快...

非常感谢!保持这个伟大的社区!

【问题讨论】:

  • 至第 2 点:这一事实可能会使 gas 运行速度变慢,但不会影响由它构建的可执行文件。
  • 您似乎混淆了组装速度和执行代码的速度。正如 Jerry 所写,几乎所有的优化都必须由您完成,除了一些小的代码大小优化。
  • 编译器优化。汇编程序没有(至少,很少)。您使用它的原因是准确地告诉它您想要什么机器语言。如果您想要优化的东西,请使用编译器。
  • 汇编程序以惊人的速度运行。不要担心那方面。汇编器可以选择在特定微架构上到处保存循环的编码,但在宏伟的方案中,这不太重要。现代处理器具有令人难以置信的指令解码带宽。
  • 这是一个小型微架构优化的示例:ROR on haswell。旋转 1 位的短格式实际上比旋转立即常数的长格式差。汇编器可能会选择长格式来“优化”,即使短格式 应该 更好。没关系,haswell 拥有惊人的解码带宽。

标签: optimization assembly gnu-assembler fasm


【解决方案1】:

汇编语言的主要特点是您编写的内容可以直接转换为单独的机器指令。几乎所有优化都取决于你,程序员。

汇编器只进行极少量的优化,这些优化在任何情况下都非常微不足道。第一个是x86处理器有短跳、近跳和远跳。大多数汇编程序可以/将优化跳转以使用从源地址到目标地址的最小形式的跳转指令。即使/如果不是自动完成,1)它很少会在速度上产生显着差异(即使在计算单个时钟周期的水平上),以及 2)您通常可以在指令中添加 shortnear获得更小的尺寸(如果这不会“达到”,汇编程序会给你一个警告)。

底线:优化很少是选择一个汇编程序而不是另一个的主要原因。真正的原因是对您关心的指令集和您想要定位的平台的支持。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多