Patricia Renault UPMC 2005/2006

Slides:



Advertisements
Présentations similaires
La boucle for : init7.c et init71.c
Advertisements

Les fonctions A quoi ça sert ?
Rappels C.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
GEF 243B Programmation informatique appliquée
Interface Matériel/logiciel
La pile un élément essentiel
Interface Matériel/logiciel
C.
Les structures de données
Paramètres et pointeurs
6. Les sous-programmes P. Costamagna – ISEN N1.
Système d’exploitation : Assembleur
Principes de programmation (suite)
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Semaine #1 INF155 par Frédérick Henri.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les piles Djamal Rebaïne.
La récursivité Une procédure est dite récursive si, et seulement si, elle fait appel à elle-même, soit directement soit indirectement Djamal Rebaïne Djamal.
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
Système d’exploitation : Assembleur
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Introduction à la programmation (Java)
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Environnements d'exécution
Architecture et technologie des ordinateurs II
COURS DE PROGRAMMATION ORIENTEE OBJET :
Méthode et Outils pour la Programmation
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Plan cours La notion de pointeur et d’adresse mémoire.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Ch. PAUL - Piles et Files à l'aide de listes chainées
Cours Architecture des Systèmes Informatiques
SIF-1053 Architecture des ordinateurs
Argc et argv Utilisation des paramètres de la ligne de commande.
Communication avec l’environnement
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Programmation Système et Réseau
Introduction au langage C Fonctions et Procédures
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Variables et environnement utilisateur W. Barhoumi.
Évaluation et application des fonctions Let f = function x -> ( function y -> x+y );; Type :int -> (int ->int) int -> int ->int f int.
Processus Légers. Rappel sur le fork() fork() Processus 1 Pile Data Text Processus 2 Pile Data Text.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
UE MAREP Cours 12 : Révisions
UE MAREP Cours 8 : La pile d’exécution (Fonctions imbriquées et fonctions récursives) Patricia Renault UPMC 2005/2006.
UE MAREP Cours 9 : Tableaux
Patricia Renault UPMC 2005/2006
UE MAREP Cours 10 : Projet Patricia Renault UPMC 2005/2006.
UE MAREP Cours 5 : Structures de contrôle représentées en assembleur
Patricia Renault UPMC 2005/2006
8PRO107 Éléments de programmation Les adresses et les pointeurs.
PRO-1027 Programmation Scientifique en C
Les instructions de contrôle
Chapitre 3 L’accès aux données.

Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.
CHAPITRE 10 Les sous-programmes 1. Sous-programme Suite d’instructions appelée de manière répétitive Par un programme Par plusieurs programmes distincts.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
Transcription de la présentation:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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