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
|
||||
|
||||
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