E.1 Basic Assembler Syntax
The assembler used by GNAT and gcc is based not on the Intel assembly
language, but rather on a language that descends from the AT&T Unix
assembler as (and which is often referred to as “AT&T syntax”).
The following table summarizes the main features of as syntax
and points out the differences from the Intel conventions.
See the gcc as and gas (an as macro
pre-processor) documentation for further information.
- Register names
- gcc / as: Prefix with “%”; for example
%eax
Intel: No extra punctuation; for example eax
- Immediate operand
- gcc / as: Prefix with “$”; for example
$4
Intel: No extra punctuation; for example 4
- Address
- gcc / as: Prefix with “$”; for example
$loc
Intel: No extra punctuation; for example loc
- Memory contents
- gcc / as: No extra punctuation; for example
loc
Intel: Square brackets; for example [loc]
- Register contents
- gcc / as: Parentheses; for example
(%eax)
Intel: Square brackets; for example [eax]
- Hexadecimal numbers
- gcc / as: Leading “0x” (C language syntax); for example
0xA0
Intel: Trailing “h”; for example A0h
- Operand size
- gcc / as: Explicit in op code; for example
movw
to move
a 16-bit word
Intel: Implicit, deduced by assembler; for example mov
- Instruction repetition
- gcc / as: Split into two lines; for example
rep
stosl
Intel: Keep on one line; for example rep stosl
- Order of operands
- gcc / as: Source first; for example
movw $4, %eax
Intel: Destination first; for example mov eax, 4