Both tools translate assembly instructions directly into machine code, but is it possible to determine which one produces the fastest and cleanest code?
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
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
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.
@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 .
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 :-).
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.
Obviously nasm because Intel syntax looks much cleaner than AT&T syntax.