11

这两种工具都直接将汇编指令翻译成机器代码,但是否有可能确定哪一种产生最快和最干净的代码?

4

6 回答 6

28

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

于 2009-08-15T19:27:41.533 回答
8

I don't know about these two specific tools, but there are some instructions that can be encoded differently:

  • ADD AX,1 is either 05 01 or 81 c0 01 or fe c0
  • INT 3 is either cc or cd 03
  • New AVX instructions that extend two-byte SSE instructions will either have a 2-byte or 3-byte prefix. All 2-byte prefixes can be encoded as 3-byte prefixes as well.

These are just a few examples off the top of my head of how assemblers can encode the same instruction differently, so the question does in fact make sense.

于 2009-08-15T20:07:18.630 回答
5

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

.intel_syntax noprefix

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

于 2009-08-17T22:40:22.213 回答
4

它是汇编......它不会优化代码。它只是按原样翻译。所以最快最干净的代码是由程序员或编译器生成的

于 2009-08-15T19:27:41.893 回答
2

显然是 nasm,因为 Intel 语法看起来比 AT&T 语法干净得多。

于 2009-08-15T19:28:08.977 回答
1

@Brian:那不是问题...

@cyber98834:好吧,汇编器做了每个汇编器必须做的事情:将每条指令翻译成它的操作码。

没有优化。

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

所以,你不能让代码运行得更快,因为你不能改变 CPU 的速度。

但是,您可以缩减代码,以便 CPU 处理更少的指令,从而减少运行时间。

我希望你明白我想说什么。

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

于 2009-08-15T19:38:10.843 回答