Télécharger la présentation
Publié parCaterine Verdier Modifié depuis plus de 10 années
1
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
31/03/2017 5. Appels de fonctions Concepts de pile Concepts de passage de paramètres Concepts de variable locale Le matériel Chapitre 8 CSA Synthèse du professeur sif-1053
2
Appel de fonctions Lors de l’appel à une fonction, comment fait-on pour retourner à la suite de l’exécution de la fonction appelante après que la fonction appelée soit terminée ? Quel est le mécanisme qui permet ce retour ? sif-1053
3
Appel de fonctions Dans un environnement multitâche, plusieurs programmes peuvent faire appel à des fonctions dans une librairie dynamique Comment les variables locales peuvent-elles rester intègre ? sif-1053
4
Architecture CISC MAR: Memory adr. reg. MDR: Memory data reg.
MBR: Memory byte reg. PC: Program counter SP: stack pointer LV: base pointer sif-1053
5
Architecture CISC MPC: program counter MIR: instruction register
sif-1053
6
Architecture CISC Piles
Les langages de programmation supportent le concept de procédure et de variables locales associées à chaque procédure Où sont placées ces variables locales ? Dans des adresses (RAM) absolues ? NON ! Si plusieurs appels à une procédure donnée (récursivité) Partage des variables Problème d’intégrité sif-1053
7
Architecture CISC Une pile est indispensable pour le bon fonctionnement de nos programmes Une pile est un ensemble d’espaces mémoire qui permet de stocker les variables locales d’une procédure LV pointe au début du bloc mémoire où sont stockées les variables locales d’une procédure SP pointe sur la variable locale sur le dessus de la pile Chaque variable est accédée en donnant le décalage par rapport à LV sif-1053
8
Architecture CISC Une pile permet de stocker les variables locales
LV pointe au début du bloc mémoire où sont stockées les variables locales d’une procédure (Voir fig. 4-8 (a)) SP pointe sur la variable locale sur le dessus de la pile Chaque variable est accédée en donnant le décalage par rapport à LV sif-1053
9
Architecture CISC Une pile permet de stocker les variables locales
Si la procédure A appelle la procédure B (Voir fig. 4-8 (b)) Si la procédure B appelle la procédure C (Voir fig. 4-8 (c)) Quand proc. C termine la pile est ajustée (Voir fig. 4-8 (b)) Après la terminaison de proc. C et B, proc. A appelle D (Voir fig. 4-8 (d)) sif-1053
10
Architecture CISC (pile)
PROC() { int a1, a2, a3 ; } sif-1053
11
Introduction au ISA de MIC-1
Une pile permet de stocker les opérandes d ’opérations arithmétiques a1 <- a2 + a3 push a2 (Voir fig. 4-9 (a)) push a3 (Voir fig. 4-9 (b)) pop a2 pop a3 push (a2+a3) pop (a2+a3) a1 <- (a2+a3) } Instruction (voir fig. 4-9 (c)) sif-1053
12
Architecture CISC (pile)
{ a1 = a2 + a3 ; } sif-1053
13
Introduction au ISA de MIC-1
Modèle mémoire Architecture consiste en une mémoire pouvant être vue de deux façons: 4 GB ou 1 G mots de 32 bits. Le niveau ISA n’a pas accès directement aux adresses absolues en mémoire, mais peut avoir accès à la mémoire de façon indirecte en utilisant l ’indexage par rapport à des pointeurs de références (ex: CPP, LV, PC) sif-1053
14
Introduction au ISA de MIC-1
Modèle mémoire Subdivisions de la mémoire Espace des constantes: Contient des constantes, chaînes de caractères et des pointeurs à d’autres espaces mémoires. Cet espace mémoire est chargé quand un programme est chargé en mémoire mais n’est pas modifié après. Cet espace est accessible à partir du pointeur CPP (Voir fig. 4-10) Espace des variables locales: A chaque appel d’une procédure un espace est réservé pour le stockage des variables locales. Au début, de cet espace réside les paramètres passés lors de l’appel d’une procédure. sif-1053
15
Introduction au ISA de MIC-1
Modèle mémoire Subdivisions de la mémoire Espace des opérandes: Cet espace contient les opérandes d’opérations données. Les opérandes sont accessibles par le pointeur SP. Espace des programmes: Contient les programmes. Les instructions à exécuter sont accessibles par le pointeur PC. PC pointe sur des octets contrairement aux pointeurs CPP, LV, SP. LV pointe sur le premier word (32 bits) LV + 1 pointe sur le deuxième word PC pointe sur un octet PC + 1 point sur l’octet suivant sif-1053
16
Introduction au ISA de MIC-1
Modèle mémoire sif-1053
17
Introduction au ISA de MIC-1
Jeu d’instructions Chaque instruction consiste en un code d’opération (opcode) et occasionnelle-ment d’une opérande. Chaque code d ’opération peut être représenté par un code hexadécimal (ex: BIPUSH => 0x10) L’opérande peut être un décalage mémoire (memory offset) ou un constante. sif-1053
18
Introduction au ISA de MIC-1
Jeu d’instructions sif-1053
19
Introduction au ISA de MIC-1
Jeu d’instructions Instructions PUSH de diverses sources Espace des constantes: LDC_W Espace des variables locales: ILOAD L’instruction elle-même: BIPUSH Instruction POP vers une variable locale: ISTORE Opérations arithmétiques: IADD, ISUB Opérations booléennes: IAND, IOR Avec les opérations arithmétiques et booléennes: deux mots sont extraits de la pile (POP) et le résultat est déposé sur le dessus de la pile (PUSH) sif-1053
20
Introduction au ISA de MIC-1
Jeu d’instructions Instructions de branchements: Inconditionnel: GOTO Conditionnel: IFEQ , IFLT, IF_ICMPEQ Lorsque le branchement est effectué, le PC est ajusté en lui additionnant un décalage donné sur 16 bits signés Instruction de permutation de deux mots sur la pile: SWAP Instruction de duplication d’un mot sur la pile: DUP Instruction d’élimination d ’un mot sur la pile: POP sif-1053
21
Introduction au ISA de MIC-1
Jeu d’instructions Instructions d’appel à une procédure ou une autre instruction: INVOKEVIRTUAL Instructions de retour d’une procédure: IRETURN Le mécanisme d’appel (CALL, INVOKEVIRTUAL disp) La procédure appelante dépose sur la pile, un pointeur sur l’objet appelé (OBJREF) La procédure appelante dépose les paramètres sur la pile (Voir fig (a)) INVOKEVIRTUAL est exécuté sif-1053
22
Introduction au ISA de MIC-1
Jeu d’instructions Instruction INVOKEVIRTUAL disp indique la position dans l’espace des constantes où est située l’adresse de départ de la procédure dans l’espace des programmes Au début de chaque procédure nous trouvons 4 octets: 2 octets (16 bits) donnant le nombre de paramètres (OBJREF inclus) 2 octets (16 bits) donnant la dimension de l’espace des variables locales sif-1053
23
Introduction au ISA de MIC-1
Jeu d’instructions Instruction INVOKEVIRTUAL (CALL) Phases d’exécution (Voir fig. 4-12) adr. proc (espace programme) <- [cpp + disp] LV pointe initialement sur OBJREF [LV] est mis à jour et LV pointe dorénavant sur une adresse d’un emplacement de la pile contenant le PC de la procédure appelante (Previous PC) link ptr <- LV + # paramètres + # var. loc. Sur le dessus de la pile et pointé par SP, nous trouvons un emplacement sur la pile contenant l’ancien LV (Previous LV) PC <- adr. proc. PC <- PC + 5 pour pointer au début du code de la procédure dans l’espace programme sif-1053
24
Introduction au ISA de MIC-1
PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A sif-1053
25
Introduction au ISA de MIC-1
PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A Fonction appelante PROCA PUSH les paramètres P1, P2, P3 passés à la procédure appelée PROCB Avant l’appel à INVOKEVIRTUAL (CALL) sif-1053
26
Introduction au ISA de MIC-1
PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A adr. proc. <- [CPP + disp] LV <- SP - # de paramètres [LV] = link ptr = LV + # paramètres + # var. loc. sif-1053
27
Introduction au ISA de MIC-1
PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A SP <- SP + # var. loc. + 1 [[LV]] <- Vieux PC (adr. de retour dans PROCA) [[LV]+1] <- Vieux LV sif-1053
28
Introduction au ISA de MIC-1
Jeu d’instructions Instruction IRETURN Phases d’exécution (Voir fig. 4-13) Libération de l’espace utilisé par la procédure appelée Restaure la pile à son état avant l’appel sauf: OBJREF et les paramètres sont éliminés de la pile (POP) La valeur de retour de PROCB est placée sur le dessus de la pile Pour rétablir l’ancien état (PROCA), PC <- Previous PC et LV <- Previous LV SP est mis à jour et pointe sur le dessus de la pile (Voir fig (b)) La valeur de retour qui est sur le dessus de la pile avant l ’exécution du IRETURN est copiée à la place du Link ptr. (OBJREF) Le programme recommence après l’instruction INVOKEVIRTUAL dans PROCA sif-1053
29
Introduction au ISA de MIC-1
sif-1053
30
La pile et l’adresse de retour
EIP du PENTIUM est l’équivalent du PC de MIC 1 sif-1053
31
La pile et pointeur de pile
ESP du PENTIUM est l’équivalent du SP de MIC 1 sif-1053
32
Fonction en langage C sif-1053
33
Éléments fondamentaux de la programmation en langage C
Fonctions et passage de paramètres En langage C, nous pouvons passer des informations aux fonctions via son interface et ce de deux façons distinctes: Passage par valeur: valeurs actuelles sont passées Passage par référence (adresse): pointeurs sont passés sif-1053
34
Prototype de la fonction
Éléments fondamentaux de la programmation en langage C Fonctions, passage de paramètres (par valeur) et valeur retournée Prototype de la fonction sif-1053
35
Éléments fondamentaux de la programmation en langage C
Fonctions et passage de paramètres (par adresse) sif-1053
36
Accès à la pile sif-1053
37
Appel de fonction et assembleur
EBP pointe sur le début de la zone pile réservée à la fonction Fin de la fonction Appel de fonction Passage de paramètres Dans le DEBUGGER taper ALT+8 pour obtenir le code assembleur sif-1053
38
Appel de fonctions et la pile
EBP du PENTIUM est équivalent au LV du MIC-1 sif-1053
39
Erreur typique de pointeur en langage C
sif-1053
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.