1 / 39

Cours 8

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

melia
Download Presentation

Cours 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  12. Architecture CISC (pile) { a1 = a2 + a3 ; } sif-1053

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

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

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

  16. Introduction au ISA deMIC-1 • Modèle mémoire sif-1053

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

  18. Introduction au ISA deMIC-1 • Jeu d’instructions sif-1053

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

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

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

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

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

  24. Introduction au ISA deMIC-1 PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A sif-1053

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

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

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

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

  29. Introduction au ISA deMIC-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. É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

More Related