这两种工具都直接将汇编指令翻译成机器代码,但是否有可能确定哪一种产生最快和最干净的代码?
6 回答
当您使用汇编程序编写代码时,您正在精确地描述要生成的指令,因此它不依赖于汇编程序。这取决于你。您编写的助记符与机器代码中的实际指令之间存在一一对应的关系。
I don't know about these two specific tools, but there are some instructions that can be encoded differently:
ADD AX,1
is either05 01
or81 c0 01
orfe c0
INT 3
is eithercc
orcd 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.
作为语法问题的旁注。通过将以下行放在源文件的顶部,您可以使 GAS 与 Intel 语法完美配合:
.intel_syntax noprefix
我也在使用 Intel 语法来满足我所有的组装需求。它似乎比 AT&T 语法更自然。它节省了一些击键:-)。
它是汇编......它不会优化代码。它只是按原样翻译。所以最快最干净的代码是由程序员或编译器生成的
显然是 nasm,因为 Intel 语法看起来比 AT&T 语法干净得多。
@Brian:那不是问题...
@cyber98834:好吧,汇编器做了每个汇编器必须做的事情:将每条指令翻译成它的操作码。
没有优化。
哦,还有,没有“最快的代码”这样的东西......我可以问你一个问题吗?CPU的速度是静态的,不是吗?
所以,你不能让代码运行得更快,因为你不能改变 CPU 的速度。
但是,您可以缩减代码,以便 CPU 处理更少的指令,从而减少运行时间。
我希望你明白我想说什么。
我建议您购买(或查找一些 pdf,但我不知道这是否合法)Michael Abrash 的图形编程黑皮书,其中涵盖了许多优化课程。