gas vs. nasm:哪个汇编程序产生最佳代码?

时间:2009-08-15 19:25:35

标签: nasm assembly gas

这两个工具都将汇编指令直接转换为机器代码,但有可能确定哪一个生成最快,最干净的代码?

6 个答案:

答案 0 :(得分:27)

当您使用汇编程序编写时,您正在精确地描述生成的指令,因此它不依赖于汇编程序。这取决于你。您编写的助记符与机器代码中的实际指令之间存在一对一的对应关系。

答案 1 :(得分:7)

我不知道这两个特定的工具,但有些指令可以采用不同的编码方式:

  • ADD AX,1可以是05 0181 c0 01fe c0
  • INT 3可以是cccd 03
  • 扩展双字节SSE指令的新AVX指令将具有2字节或3字节前缀。所有2字节前缀也可以编码为3字节前缀。

这些只是我脑海中的几个例子,汇编者可以用不同的方式编码相同的指令,所以这个问题确实有意义。

答案 2 :(得分:5)

作为语法问题的旁注。通过将以下行放在源文件的顶部,您可以使GAS与Intel语法完美配合:

.intel_syntax noprefix

我也在使用英特尔语法来满足我的所有需求。它似乎比AT& T语法更自然。它节省了一些按键: - )。

答案 3 :(得分:4)

它是声明......它没有优化代码。它只是按原样翻译。因此,程序员或编译器生成最快,最干净的代码

答案 4 :(得分:2)

显然是天真的,因为英特尔语法看起来比AT& T语法更清晰。

答案 5 :(得分:1)

@Brian:那不是问题......

@ cyber98834: 好吧,汇编程序会执行每个汇编程序必须执行的操作:将每条指令转换为其操作码。

没有优化。

哦,而且,没有“最快的代码”这样的东西......我可以问你一个问题吗? CPU的速度是静态的,不是吗?

因此,您无法使代码运行得更快,因为您无法更改CPU的速度。

但是,您可以缩小代码,以便CPU处理更少的指令,因此运行时间更短。

我希望你能理解我想说的话。

我建议你购买(或寻找一些pdf,但我不知道这是否合法)Michael Abrash的图形编程黑皮书涵盖了许多优化课程。