La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Patricia Renault UPMC 2005/2006

Présentations similaires


Présentation au sujet: "Patricia Renault UPMC 2005/2006"— Transcription de la présentation:

1 Patricia Renault UPMC 2005/2006
UE MAREP Cours 6 : La pile d’exécution (Fonctions sans variables locales - Passage des arguments par valeur) Patricia Renault UPMC 2005/2006

2 Plan Qu’est-ce qu’une pile ? Appel de sous-programme
Implantation d’une pile d’exécution en MIPS

3 Plan Qu’est-ce qu’une pile ? Appel de sous-programme
Structure d’une pile Opérations relatives à une pile Appel de sous-programme Implantation d’une pile d’exécution en MIPS

4 Structure d’une pile Une pile permet de représenter une collection d’éléments en conservant l’ordre dans lequel les éléments sont apparus et en les retirant dans l’ordre inverse d’apparition Exemple : pile d’assiette

5 Structure d’une pile Représentation possible d’une pile P … Y en en-1
X Sommet de pile Vers les adresses faibles

6 Opérations relatives à une pile
Empile(e,P) Avant Après Y en en-1 e1 X e en en-1 e1 X Sommet de pile Sommet de pile

7 Opérations relatives à une pile
Dépile(e,P) Avant Après e=en Y en en-1 e1 X Y en en-1 e1 X Sommet de pile Sommet de pile

8 Opérations relatives à une pile
Est-vide(P) renvoie VRAI si P=  FAUX sinon Est_pleine (P) renvoie VRAI si | P | = taille_max

9 Plan Qu’est-ce qu’une pile ? Appel de fonction
Exemple Mécanisme d’appel et retour de fonction Mécanisme de retour d’une valeur de la fonction appelée vers la fonction appelante Mécanisme de passage des arguments Mécanisme de sauvegarde des registres persistants Appel d’une fonction par une fonction Convention Implantation d’une pile d’exécution en MIPS

10 Exemple int fmin(int a, int b){ if (a<b) return a; else return b ;
} int x = 2, y = 3, z = 4; int t1, t2; void main(){ t1 = fmin(x,y); t2 = fmin(t1,z); printf("%d\n",t2); exit(0);

11 Exemple Dans cet exemple, la fonction fmin est appelée par la fonction main. On appelle : fmin la fonction appelée main la fonction appelante

12 Mécanisme d’appel et retour de sous-programme
int fmin(int a, int b){ if (a<b) return a; else return b ; } int x = 2, y = 3, z = 4; int t1, t2; void main(){ t1 = fmin(x,y); t2 = fmin(t1,z); printf("%d\n",t2); exit(0); Adresse de retour après 1er appel de min Adresse de retour après 2sd appel de min Adresse de retour de fmin dynamique

13 Mécanisme d’appel et retour de sous-programme
Instruction d’appel de fonction : jal (jump and link) jal fmin saut au label f sauvegarde dans $31 l’adresse de retour (l’adresse de l’instruction suivante) Instruction de retour à la fonction appelante : jr (jump register) jr $31 saut à l’adresse contenue dans le registre $31

14 Mécanisme de retour d’une valeur de l’appelé vers l’appelant
Par convention, la valeur retournée par la fonction appelée est sauvegardée dans le registre 2 la fonction appelée range dans le registre 2 la valeur à retourner à la fonction appelante la fonction appelante trouve dans le registre 2 la valeur retournée par la fonction appelée

15 Mécanisme de passage des arguments
La fonction appelante transmet à la fonction appelée via la pile les valeurs des arguments (dans l’exemple, a prend 2 et b prend 3). La fonction appelée lit dans la pile les valeurs des arguments donnés par la fonction appelante.

16 Mécanisme de sauvegarde des registres persistants
La fonction appelée sauvegarde tous les registres qu’elle utilise avant de les utiliser. La fonction appelée restaure tous les registres qu’elle utilise avant de retourner à la fonction appelante.

17 Convention La fonction appelante La fonction appelée
Empile les arguments (en commençant par le dernier) Effectue l’appel à l’appelé Obtient le résultat dans $2 Dépile les arguments La fonction appelée Empile $31 Empile les registres dont elle se sert dans son traitement Effectue son traitement et place le résultat dans $2 Restaure les valeurs des registres qu’elle avait sauvegardées Dépile $31 Retourne à l’appelant prologue épilogue

18 Plan Qu’est-ce qu’une pile ? Appel de sous-programme
Implantation d’une pile d’exécution en MIPS Introduction Exemple Cas général

19 Introduction Pile implantée en mémoire dans le segment stack
.stack m : réserve m octets pour la pile progresse par adresse décroissante sommet de pile repéré par $29 ($29 repère le dernier mot empilé) lors du chargement d’un programme $29 contient 0x7FFF EFFC

20 Introduction Empiler le mot contenu dans $5
addiu $29,$29, -4 sw $5, ($29) Dépiler un mot dans $6 lw $6, ($29) addiu $29,$29, 4 $5 X3X2X1X0 $29 $29 avant empilement Y3Y2Y1Y0 X3X2X1X0 $29 avant dépilement $29 $6 contient le mot Y3Y2Y1Y0

21 Exemple int fmin(int a, int b){ if (a<b) return a; else return b ;
} int x = 2, y = 3, z = 4; int t1, t2; void main(){ t1 = fmin(x,y); t2 = fmin(t1,z); printf("%d\n",t2); exit(0);

22 Exemple .data x : .word 2 y : .word 3 z : .word 4 t1 : .word
.stack 256 #256 octets pour la pile .text __start : lui $3, x>>16 ori $3, $3, x & 0xFFFF lw $3, ($3) # x dans $3

23 Exemple addiu $29, $29, -8 lui $4, y>>16 ori $4, $4, y & 0xFFFF
lw $4, ($4) # y dans $4 lui $5, z>>16 ori $5, $5, z & 0xFFFF lw $5, ($5) # z dans $5 addiu $29, $29, -8 sw $4, 4($29) # passage de y sw $3, ($29) # passage de x jal fmin addiu $29, $29, 8

24 Exemple lui $15, t1 >> 16 ori $15, $15, t1 & 0xFFFF
sw $2, ($15) # met fmin(x,y) ds mot t1 addiu $29, $29, -8 sw $5, 4($29) # passage de z sw $2, ($29) # passage de t1 jal fmin addiu $29, $29, 8

25 Exemple lui $15, t2 >> 16 ori $15, $15, t2 & 0xFFFF
sw $2, ($15) # met fmin(t1,z) ds mot t2 ori $4, $2, 0 # affichage ori $2, $0, 1 syscall ori $2, $0, 10 # fin

26 Exemple fmin : addiu $29, $29, -16 #$31+3 registres sw $31, 12($29)
lw $8, 16($29) # $8 contient a lw $9, 20($29) # $9 contient b slt $10, $8, $9 # $10 = 1 si a < b bgtz $10, cas_if

27 Exemple ori $2, $9, 0 # valeur de retour = b j fin_fonction cas_if :
ori $2, $8, 0 # valeur de retour = a fin_fonction : lw $10, ($29) lw $9, 4($29) lw $8, 8($29) lw $31, 12($29) addiu $29, $29, 16 jr $31

28 Cas général f appelle une fonction g avec na arguments. g utilise nr registres pour réaliser le traitement. Soient RAi le registre contenant l’argument i (dans l’appelant f ) RRj le registre persistant numéro j (dans l’appelé g) RPk le registre contenant le paramètre k (dans l’appelé g) Code de f : addiu $29, $29, -4 * na sw $Ana-1, (4*na-1)($29) sw $Ana-2, (4*na-2)($29) sw $A0, 0($29) jal g addiu $29, $29, 4 * na

29 Cas général code de g g : addiu $29, $29, -4*(nr +1) # prologue
sw $31, 4*nr ($29)# sauvegarde des registres sw $Rnr, 4 * (nr – 1) ($29) sw $R0, 0($29) lw $P0, 4*(nr+1)($29) # récupération des arg lw $P1,4*(nr+2)($29) lw $Pna-1, 4*(nr + na)($29) … traitement de la fonction # $2 contient le résultat de la fonction

30 Cas général code de g lw $R0, 0($29) # épilogue …
lw $Rnr, 4 * (nr – 1) ($29) lw $31, 4 * (nr) ($29) addiu $29, $29, 4* (nr +1) jr $31 # retour appelant


Télécharger ppt "Patricia Renault UPMC 2005/2006"

Présentations similaires


Annonces Google