Next: , Up: Inline Assembler


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