suivant: Appel système
monter: GPIas32bits
précédent: Valeurs constantes
La pile est gérée par les registres %esp (dernière valeur
empilée) et %ebp (base de la pile). Elle croit dans le
sens décroissant des adresses.
- pushl %reg : empile le contenu de %reg
- popl %reg : dépile la tête de la pile et la copie dans %reg
Pour chaque fonction, l'espace appelé stack frame, délimité
par %esp et %ebp, définie l'espace associé aux
variables locales. La définition d'un stack frame de 3
variables (i.e. 12 bits) corresponds à l'exécution des instructions
suivantes:
- pushl %esp : sauvegarde la base de la pile
- movl %esp, %ebp : déplace la base de la pile
- subl $12, %esp : réserve 12 bits dans la nouvelle pile
Les trois instructions spécifiques aux appels de fonction sont:
- call L0 : appelle la fonction associée au label
L0 (i.e. empile %eip puis place
%eip sur la première instruction de la fonction associée au
label L0)
- leave : restaure le cadre de pile précédent
(i.e. movl %ebp,%esp puis popl %ebp)
- ret : définie la fin d'un appel de fonction
(i.e. popl %eip); la valeur de retour éventuelle est
posée dans %eax
Les paramètres d'une fonction sont empilés dans l'ordre inverse avant
exécution de call. Dans la fonction appelée:
- 4(%ebp) : adresse de retour de la fonction
- 8(%ebp) : 1er paramètre de la fonction
- 12(%ebp) : 2ième paramètre de la fonction
- 4+4*n(%ebp) : Nième paramètre de la fonction
suivant: Appel système
monter: GPIas32bits
précédent: Valeurs constantes
n 2005-04-18