gas vs. nasm: which assembler produces the best code?

前端 未结 6 1439
挽巷
挽巷 2021-02-14 02:46

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

相关标签:
6条回答
  • 2021-02-14 03:21

    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

    0 讨论(0)
  • 2021-02-14 03:22

    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.

    0 讨论(0)
  • 2021-02-14 03:24

    @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 .

    0 讨论(0)
  • 2021-02-14 03:33

    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 :-).

    0 讨论(0)
  • 2021-02-14 03:34

    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.

    0 讨论(0)
  • 2021-02-14 03:34

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

    0 讨论(0)
提交回复
热议问题