gas vs. nasm: which assembler produces the best co

2019-04-05 08:07发布

问题:

Both tools translate assembly instructions directly into machine code, but is it possible to determine which one produces the fastest and cleanest code?

回答1:

When you're writing in assembler, you are precisely describing the instructions to generate so it doesn't depend on the assembler. It depends on you. There's a one-to-one correspondence between the mnemonics you write and actual instructions in machine code.



回答2:

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.



回答3:

As a sidenote on the syntax-matter. You can have GAS work perfectly fine with Intel syntax by putting the following line at the top of your source file:

.intel_syntax noprefix

I am using Intel syntax too for all my assmebly needs. It seems far more natural than the AT&T syntax. And it saves some keystrokes :-).



回答4:

It is assember... it does not optimize code. It just translates as is. So the fastest and cleanest code is produced by programmer or compiler



回答5:

Obviously nasm because Intel syntax looks much cleaner than AT&T syntax.



回答6:

@Brian: that was not the question ...

@cyber98834: Well, an assembler does what every assembler must do : translate every instruction to its opcode .

There's no optimization .

Oh and also, there's not such a thing as a "fastest code" ... Can I ask you a question ? The CPU's speed is static, isn't it ?

So, you can't make a code run faster because you can't change the CPU's speed .

But, you can shrink the code so that the CPU handles less amount of instructions, and so takes less time to run .

I hope you understand what I'm trying to say .

I suggest you to buy ( or to look for some pdf's, but I don't know if that's legal ) Michael Abrash's Graphics Programming Black Book which covers many optimization lessons .