天然气与NASM:该汇编器会产生最好的代码?(gas vs. nasm: which assembl

2019-08-01 08:28发布

这两个工具将汇编指令直接进入机器代码,但有可能确定哪一个生产最快和最干净的代码?

Answer 1:

当你在编译器的时候, 你是精确描述的方式来产生 ,因此不依赖于汇编。 这取决于你。 还有你写的助记符和实际指令在机器代码之间有一个一一对应。



Answer 2:

我不知道这两个具体的工具,但也有可以被不同地编码的一些指令:

  • ADD AX,1或者是05 0181 c0 01fe c0
  • INT 3或者是cccd 03
  • 新的AVX扩展两个字节的SSE指令的指令要么有2个或者3个字节的前缀。 所有2字节的前缀可以以及编码为3字节的前缀。

这些只是从我的装配如何不同编码相同的指令头顶的几个例子,所以这个问题事实上确实是有意义的。



Answer 3:

作为对语法事项阿里纳斯。 您可以通过将下面一行在你的源文件的顶部有气工作与英特尔的语法完美的罚款:

.intel_syntax noprefix

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



Answer 4:

这是装配台...它没有优化代码。 它只是意为是。 所以最快,最干净的代码是由程序员或编译器生成



Answer 5:

显然NASM因为英特尔的语法看起来比AT&T语法干净多了。



Answer 6:

@布赖恩:这不是问题...

@ cyber98834:嗯,汇编所做的每一个汇编程序必须做到:每个指令其操作码翻译。

有没有优化。

哦,还有,有没有这样的事,作为一个“最快的代码” ......我能问你一个问题吗? CPU的速度是静态的,不是吗?

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

但是,你可以收缩的代码,使CPU处理指令的量少,因此需要较少的运行时间。

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

我建议你买(或者寻找一些PDF格式的,但我不知道这是否是合法的),迈克尔·亚伯拉什的图形编程黑皮书涵盖许多优化的经验教训。



文章来源: gas vs. nasm: which assembler produces the best code?