Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization Gnu汇编程序(GAS)优化_Optimization_Assembly_Gnu Assembler_Fasm - Fatal编程技术网

Optimization Gnu汇编程序(GAS)优化

Optimization Gnu汇编程序(GAS)优化,optimization,assembly,gnu-assembler,fasm,Optimization,Assembly,Gnu Assembler,Fasm,我实际上在学习组装,我用的是汽油,但问题是: 1) 我只知道Intel语法,我在一个页面中看到,在某些情况下,使用Intel语法的Gas并没有很好地优化。这是对的还是我错了?我说的是这个网站: 2) 然后我还看到(我不记得这一页),事实上gas可以在几种架构中组装,这也会减慢组装程序的速度。是这样吗 3) 您推荐我的哪个汇编程序可以生成高度优化的代码?我在其他问题中看到,在某些情况下,每个汇编程序都可以转换为不同的操作码。我在YASM、FASM、GAS和NASM之间,但其他建议被接受。大家都知

我实际上在学习组装,我用的是汽油,但问题是:

1) 我只知道Intel语法,我在一个页面中看到,在某些情况下,使用Intel语法的Gas并没有很好地优化。这是对的还是我错了?我说的是这个网站:

2) 然后我还看到(我不记得这一页),事实上gas可以在几种架构中组装,这也会减慢组装程序的速度。是这样吗

3) 您推荐我的哪个汇编程序可以生成高度优化的代码?我在其他问题中看到,在某些情况下,每个汇编程序都可以转换为不同的操作码。我在YASM、FASM、GAS和NASM之间,但其他建议被接受。大家都知道FASM速度很快


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

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

汇编程序只执行非常少量的优化,而这些优化在任何情况下都是非常琐碎的。主要原因是x86处理器有短跳跃、近跳跃和远跳跃。大多数汇编器可以/将优化跳转,以使用从源地址到目标地址的最小形式的跳转指令。即使这不是自动完成的,1)它很少在速度上产生显著差异(即使在计算单个时钟周期的水平上),2)您通常可以向指令中添加
short
near
,以获得较小的大小(如果无法“达到”,汇编程序将向您发出警告)


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

第二点:这一事实可能会使gas运行变慢,但不会影响由gas生成的可执行文件。您似乎混淆了汇编速度和执行代码的速度。正如Jerry所写的,除了一些较小的代码大小优化之外,几乎所有的优化都必须由您完成。汇编程序不会(至少很少)。您使用它的原因是告诉它您想要什么机器语言。如果你想要一些优化的东西,使用编译器。汇编程序以极快的速度运行。别担心那方面。汇编程序可以在特定的微体系结构上选择在这里或那里节省一个周期的编码,但在大方案中,这不太重要。现代处理器具有难以置信的指令解码带宽。下面是一个小型微体系结构优化的示例:haswell上的ROR。按1位旋转的短形式实际上比按直接常数旋转的长形式更糟糕。汇编程序可能会选择长格式进行“优化”,即使短格式更好。没关系,哈斯韦尔有惊人的解码带宽。