62 votes

À propos des congés dans l'assemblage x86

On dit que leave est la même chose que:

 mov esp,ebp
pop ebp
 

Mais pour quoi mov esp,ebp ici? Cela ne me semble pas valable ...

91voto

zneak Points 45458

mov esp,ebp définit le pointeur de pile sur l'adresse de la base, libérant ainsi la totalité du cadre. (N'oubliez pas que c'est la syntaxe Intel, la destination vient en premier.) Si vous ne le faites pas, une fois que vous appelez ret , vous utiliseriez toujours le cadre de pile de la fonction appelée avec votre fonction d'appel. , avec des conséquences catastrophiques.

4voto

Abhay Buch Points 1748

Je pense que votre problème est le fait qu'il y a deux façons différentes d'écrire x86 assemblée. L'un est l'AT&T de la notation et de l'autre est le processeur Intel notation. L'ordre des arguments d'une instruction sont inversés dans Intel notation plutôt que AT&T. Votre version de l'assemblée semble être en Intel notation, ce qui signifie qu' mov esp, ebp actaully déplace la valeur en ebp de esp. Dans le plus logique (à mon avis) de AT&T de la notation, il serait mov %ebp, %esp.

2voto

kabab Points 26

Le compilateur utilise cette instruction pour libérer l'espace utilisé par la fonction dans la pile. Il existe d'autres méthodes pour libérer l'espace, comme utiliser une sous-instruction ou l'instruction enter.

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