Add base pointer paragraph

This commit is contained in:
Yorick Barbanneau 2023-09-27 23:00:14 +02:00
parent baf71e1aa5
commit 2f023a33a5

View file

@ -81,4 +81,31 @@ f:
## Le Base Pointer ## Le Base Pointer
Lors de l'entrée dans une fonction, nous sauvegardons l'adresse contenue dans
`ebp` sur la pile puis on copie l'adresse contenue dans `esp` dans `epb`,
```asm
f:
pushl %ebp ; on sauvegarde l'adresse contenue dans %ebp sur la pile
movl %esp, %ebp ; puis copier l'adresse courante d'%esp dans %ebp
```
Sur l'architecture x86, ces deux instructions peuvent être remplacées par le
mnémonique `enter`.
Il nous est mainteant possible de retrouver simplement les paramètres passées à
notre fonction par rapport à `ebp` tout en instanciant des variables locales sur
la pile que nous retrouverons en fonction d'`esp`. **C'est à la fonction appelée
de mettre en place le *base pointer***
À la fin de notre fonction, nous allons positionner le retour dans `%eax` et
remettre les choses en places:
```asm
;[...]
movl -4(%ebp), %eax ; on met notre valeur de retour dans %eax
movl %ebp, %esp ; on restaure %esp
popl %ebp ; on pop le haut de la pile dans %ebp on restaure ainsi
; sa valeur avant l'appel de notre fonction
ret
```