Go to the first, previous, next, last section, table of contents.
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 used only Intel syntax. Notable differences
between the two syntaxes are:
-
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 Intel syntax.
-
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.
-
In AT&T syntax the size of memory operands is determined from the last
character of the opcode name. Opcode suffixes of `b', `w',
and `l' specify byte (8-bit), word (16-bit), and long (32-bit)
memory references. Intel syntax accomplishes this by prefixes memory
operands (not the opcodes themselves) 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 stack-adjust'.
-
The AT&T assembler does not provide support for multiple section
programs. Unix style systems expect all programs to be single sections.
Go to the first, previous, next, last section, table of contents.