10 ms·
This is the GNU assembler AT&T syntax though, which is known to be horrendous. Other assemblers have much nicer syntax.
by mitchi 11y ago
This is the GNU assembler AT&T syntax though, which is known to be horrendous. Other assemblers have much nicer syntax.
- userbinator 11y agoAgreed; most programmers I know who write a lot of x86 Asm tend to stick with the Intel syntax. I've never found the "it's easier to parse" argument for AT&T syntax particularly convincing, especially as GAS is written in C while some of the Intel syntax assemblers existing at the time were themselves written in x86 Asm. Neither is the "it makes it more consistent with the other arch's assemblers" - just look at GAS' syntax for MIPS and ARM. It seems to me like someone was really obsessed with the SPARC syntax (which I find roughly as horrendous.) http://x86asm.net/articles/what-i-dislike-about-gas/ http://x86asm.net/articles/what-i-dislike-about-gas/
- Narishma 11y agoI don't think either syntax is nicer than the other. It's just a matter personal preference and familiarity.
- cbd1984 11y agoIntel syntax has more intuitive memory access syntax: AT&T syntax: movl mem_location(%ebx,%ecx,4), %eax Intel syntax: mov eax, [ebx + ecx*4 + mem_location] The other differences are minor compared to that, IMHO. https://en.wikipedia.org/wiki/X86_assembly_language#Syntax https://en.wikipedia.org/wiki/X86_assembly_language#Syntax
- lokedhs 11y agoI can agree with most of that, except for the fact that Intel arguments are backwards. That throws me off every time. I don't know of any other assembler syntax that uses that argument order.
- oso2k 11y agoFor me, I remember the notation by correlating it to its "high-level" equivalent. mov eax, [ ptr ] is like eax = *ptr; // or, eax = ptr[ 0 ]; The offset/multiplier memory addressing format for AT&T syntax was always more troubling for me. Coming from a TASM/MASM/NASM/PASCAL/x86 background first, it felt "icky" to put offsets outside of the "brackets" (or parenthesis, as it were) [0][1]. [0] https://github.com/lpsantil/rt0/blob/master/src/lib/00_start.c#L14 https://github.com/lpsantil/rt0/blob/master/src/lib/00_start... [1] https://github.com/lpsantil/rt0/blob/master/src/lib/00_start.c#L21 https://github.com/lpsantil/rt0/blob/master/src/lib/00_start...
- userbinator 11y agoStandard ARM, MIPS, PowerPC, x86, and Z80 Asm syntax all have the destination on the far left. 68k, Alpha, PDP-11, SPARC, and VAX have the destination on the far right. The order is probably as contentious as the great endianness debate, but I think one of the most awkward parts of having src, dst order is that subtraction looks backwards. I prefer dst, src because it corresponds closely with the direction of assignment in higher-level languages: op a, b, c ; a = b op c op a, b ; a op= b