AT&T Syntax versus Intel Syntax
In order to maintain compatibility with the output of `gcc', `as'
supports AT&T System V/386 assembler syntax. This is quite different
from Intel syntax. We mention these differences because almost all
80386 documents use Intel syntax. Notable differences between the two
* AT&T immediate operands are preceded by `$'; Intel immediate
operands are undelimited (Intel `push 4' is AT&T `pushl $4').
AT&T register operands are preceded by `%'; Intel register operands
are undelimited. AT&T absolute (as opposed to PC relative)
jump/call operands are prefixed by `*'; they are undelimited in
* AT&T and Intel syntax use the opposite order for source and
destination operands. Intel `add eax, 4' is `addl $4, %eax'. The
`source, dest' convention is maintained for compatibility with
previous Unix assemblers. Note that instructions with more than
one source operand, such as the `enter' instruction, do _not_ have
reversed order. i386-Bugs.
* In AT&T syntax the size of memory operands is determined from the
last character of the instruction mnemonic. Mnemonic suffixes of
`b', `w', and `l' specify byte (8-bit), word (16-bit), and long
(32-bit) memory references. Intel syntax accomplishes this by
prefixing memory operands (_not_ the instruction mnemonics) with
`byte ptr', `word ptr', and `dword ptr'. Thus, Intel `mov al,
byte ptr FOO' is `movb FOO, %al' in AT&T syntax.
* Immediate form long jumps and calls are `lcall/ljmp $SECTION,
$OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
SECTION:OFFSET'. Also, the far return instruction is `lret
$STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
* The AT&T assembler does not provide support for multiple section
programs. Unix style systems expect all programs to be single
automatically generated byinfo2html