400 likes | 522 Views
Cours 8. 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. Appel de fonctions. Lors de l’appel à une fonction, comment fait-on pour
E N D
Cours 8 • 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
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
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
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
Architecture CISC MPC: program counter MIR: instruction register sif-1053
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
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
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
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
Architecture CISC (pile) PROC() { int a1, a2, a3 ; } sif-1053
Introduction au ISA deMIC-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
Architecture CISC (pile) { a1 = a2 + a3 ; } sif-1053
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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
Introduction au ISA deMIC-1 • Modèle mémoire sif-1053
Introduction au ISA deMIC-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
Introduction au ISA deMIC-1 • Jeu d’instructions sif-1053
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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, INVOKEVIRTUALdisp) • 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. 4-12 (a)) • INVOKEVIRTUAL est exécuté sif-1053
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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
Introduction au ISA deMIC-1 PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A sif-1053
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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
Introduction au ISA deMIC-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. 4-13 (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
Introduction au ISA deMIC-1 sif-1053
La pile et l’adresse de retour EIP du PENTIUM est l’équivalent du PC de MIC 1 sif-1053
La pile et pointeur de pile ESP du PENTIUM est l’équivalent du SP de MIC 1 sif-1053
Fonction en langage C sif-1053
É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
É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
Éléments fondamentaux de la programmation en langage C • Fonctions et passage de paramètres (par adresse) sif-1053
Accès à la pile sif-1053
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
Appel de fonctions et la pile EBP du PENTIUM est équivalent au LV du MIC-1 sif-1053