Registre SP

safwensafwen Messages postés 10 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008 - 12 mars 2007 à 13:04
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 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?

Merci
Safwen

2 réponses

_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 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.

Gentoo... que du bonheur ...
0
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
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

A+
0
Rejoignez-nous