AT&T (assembleur)

Un article de Wikipédia, l'encyclopédie libre.

La syntaxe AT&T correspond à l'une des variantes du langage d'assemblage des processeurs x86. Il s'agit d'une transposition vers cette architecture du langage reconnu par l'assembleur de UNIX, as, qui ciblait alors les mini-ordinateurs de la famille PDP. Cette représentation est notamment utilisée par GAS, l'assembleur du projet GNU.

Concepts[modifier | modifier le code]

Par opposition à la syntaxe Intel, la syntaxe AT&T place les opérandes dans l'ordre Source avant Destination.

Les principales caractéristiques de cette syntaxe sont :

  • L'assembleur fait toujours la différence entre majuscules et minuscules
  • Les constantes sont écrites avec la notation habituelle en C
  • Les opérandes immédiats (constantes) sont préfixés d'un dollar '$'
  • Les registres sont préfixés d'un '%'
  • Les sauts (jmp/call) absolus sont préfixés d'un astérisque '*'
  • L'indirection (déférenciation) est marquée par des parenthèses : un opérande basé sur EBX+table donne table(%ebx)
  • Ordre des opérandes : Source avant Destination (ordre choisi pour des raisons de compatibilité avec d'autres assembleurs UNIX)
  • La taille des opérandes peut être précisée grâce au dernier caractère de l'opération (en syntaxe Intel, jusqu'au Pentium inclus, des opérateurs spécifiques sur les opérandes sont utilisés, par exemple l'opérateur PTR avec MASM) :
    • bbyte (8 bits - 1 octet)
    • wword (16 bits - 2 octets)
    • sshort (32 bits - 4 octets, pour les opérations en virgule flottante)
    • llong (32 bits - 4 octets pour les entiers, 64 bits - 8 octets pour les flottants)
    • qquad (64 bits - 8 octets)
    • tten bytes (80 bits - 10 octets)
    • oocto (128 bits - 16 octets), pour l'architecture x86-64!
  • Les sauts « longs » (ljump/lcall) absolus ont la syntaxe suivante : $sélecteur, $offset, et non pas section:offset comme dans la syntaxe des manuels Intel
  • Pas de support pour de multiples segments, les programmes utilisent un unique adressage virtuel linéaire

Exemples[modifier | modifier le code]

Par exemple, une instruction en norme Intel :

 mov eax, 0FFh

Donnera en norme AT&T

 movl $0xFF, %eax

L'équivalent en AT&T de

 mov byte ptr [ebx], 0FFh

Est

 movb $0xFF, (%ebx)

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]