safwensafwen
Messages postés10Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention13 novembre 2008
-
12 mars 2007 à 13:04
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 2008
-
12 mars 2007 à 17:14
Bonours,
je voudrais savoir si le pointeur SP change automatiquement lors d'une opération push ou Pop?
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 avril 2011 12 mars 2007 à 13:29
Salut,
Oui bien entendu, c'est le principe même de PUSH/PUSHA/POP/POPA d'empiler ou récuperer des données dans la pile tout en maintenant SP/ESP qui est le pointeur de pile à jour.
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 12 mars 2007 à 17:14
Bonjour,
Pour apporter quelques précisions,
En mode 32 bits, ESP diminue de 4 (4octets) après un PUSH et augmente de 4 après un POP.
Lorsque tu appelle une fonction nécessitant 2 paramètres (2 dwords) tu auras
push dword paramètre2
push dword paramètre1
call fonction
...
fonction:
ESP pointe sur l'adresse de retour (adresse qui suit l'instruction call fonction)
ESP+4 pointe sur le dernier paramètre empilé avant l'appel, soit paramètre1
ESP+8 pointe sur l'avant dernier " " " " " " " " " " " paramètre2
En stdcall, la fonction se terminera par RET 8 (2x4 octets dépilés après retour) - la pile est vidée des paramètres mis
En convention C, c'est le< programme principal qui nettoie la pile en remontant la pointeur de pile
add esp,8