39 votes

Que représentent les signes dollar ($) et pourcentage (%) dans l'assembleur x86 ?

J'essaie de comprendre le fonctionnement du langage d'assemblage pour un cours d'architecture de micro-ordinateur, et je me heurte sans cesse à des syntaxes différentes dans les exemples :

sub $48, %esp
mov %eax, 32(%esp)

Que signifient ces codes ? Que signifie l'opérande 32 : une addition au registre esp ?

39voto

Necrolis Points 17569

Ce n'est pas la syntaxe Intel, c'est Syntaxe AT&T également appelé Syntaxe du gaz .

le site $ est pour les immédiats (constantes), et le préfixe % Le préfixe est pour les registres (ils sont requis 1 ).

Pour en savoir plus sur la syntaxe AT&T, voir aussi le site [att] wiki tag .


1 À moins que le noprefix est spécifiée, voir ici & ici . Mais généralement noprefix n'est utilisé qu'avec .intel_syntax noprefix pour obtenir une syntaxe de type MASM.

8voto

Lưu Vĩnh Phúc Points 3183

Par rapport à la syntaxe Intel, la syntaxe AT&T présente de nombreuses différences

  • $ signifie une constante (littéral entier). Sans lui, le nombre est une adresse absolue
  • % désigne un registre
  • L'ordre source/destination est inversé
  • () est utilisé pour la référence à la mémoire, comme [] en syntaxe Intel

Ainsi, l'extrait ci-dessus est équivalent à

sub esp, 48         ; esp -= 48
mov [esp+32], eax   ; store eax to the value at the address `esp + 32`

2voto

aqua Points 162

Oui, "32(%esp)" indique un décalage de 32 par rapport à %esp.

1voto

Stephen Canon Points 58003

Comme l'a dit @Necrolis, c'est écrit dans la syntaxe AT&T. Cela signifie :

subtract 48 from the register esp (the stack pointer).
store the contents of eax to the four bytes starting at (esp + 32).

0voto

hirschhornsalz Points 16306

C'est la syntaxe AT&T pour x86. En AT&T % désigne généralement un registre, tandis que $ est réservé à l'immédiateté. Si vous omettez le $ l'assembleur interpréterait le 48 comme une adresse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X