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