Add base pointer paragraph
This commit is contained in:
parent
baf71e1aa5
commit
2f023a33a5
1 changed files with 27 additions and 0 deletions
|
@ -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
|
||||||
|
```
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue