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

Sif-10531 Cours 8 n 5. Appels de fonctions u Concepts de pile u Concepts de passage de paramètres u Concepts de variable locale n Le matériel u Chapitre.

Présentations similaires


Présentation au sujet: "Sif-10531 Cours 8 n 5. Appels de fonctions u Concepts de pile u Concepts de passage de paramètres u Concepts de variable locale n Le matériel u Chapitre."— Transcription de la présentation:

1 sif Cours 8 n 5. Appels de fonctions u Concepts de pile u Concepts de passage de paramètres u Concepts de variable locale n Le matériel u Chapitre 8 CSA u Synthèse du professeur

2 sif Appel de fonctions Lors de lappel à une fonction, comment fait-on pour retourner à la suite de lexécution de la fonction appelante après que la fonction appelée soit terminée ? Quel est le mécanisme qui permet ce retour ?

3 sif 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 ?

4 sif Architecture CISC MAR: Memory adr. reg. MDR: Memory data reg. MBR: Memory byte reg. PC: Program counter SP: stack pointer LV: base pointer

5 sif MPC: program counter MIR: instruction register Architecture CISC

6 sif Architecture CISC n Piles u Les langages de programmation supportent le concept de procédure et de variables locales associées à chaque procédure u Où sont placées ces variables locales ? u Dans des adresses (RAM) absolues ? u NON ! F Si plusieurs appels à une procédure donnée (récursivité) F Partage des variables F Problème dintégrité

7 sif Architecture CISC n Une pile est indispensable pour le bon fonctionnement de nos programmes n Une pile est un ensemble despaces mémoire qui permet de stocker les variables locales dune procédure u LV pointe au début du bloc mémoire où sont stockées les variables locales dune procédure u SP pointe sur la variable locale sur le dessus de la pile u Chaque variable est accédée en donnant le décalage par rapport à LV

8 sif Architecture CISC n Une pile permet de stocker les variables locales u LV pointe au début du bloc mémoire où sont stockées les variables locales dune procédure (Voir fig. 4-8 (a)) u SP pointe sur la variable locale sur le dessus de la pile u Chaque variable est accédée en donnant le décalage par rapport à LV

9 sif Architecture CISC n Une pile permet de stocker les variables locales u Si la procédure A appelle la procédure B (Voir fig. 4-8 (b)) u Si la procédure B appelle la procédure C (Voir fig. 4-8 (c)) u Quand proc. C termine la pile est ajustée (Voir fig. 4-8 (b)) u Après la terminaison de proc. C et B, proc. A appelle D (Voir fig. 4-8 (d))

10 sif Architecture CISC (pile) PROC() { int a1, a2, a3 ; }

11 sif Introduction au ISA de MIC-1 n Une pile permet de stocker les opérandes d opérations arithmétiques u 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))

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

13 sif Introduction au ISA de MIC-1 n Modèle mémoire u Architecture consiste en une mémoire pouvant être vue de deux façons: 4 GB ou 1 G mots de 32 bits. u Le niveau ISA na 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)

14 sif Introduction au ISA de MIC-1 n Modèle mémoire u Subdivisions de la mémoire F Espace des constantes: Contient des constantes, chaînes de caractères et des pointeurs à dautres espaces mémoires. Cet espace mémoire est chargé quand un programme est chargé en mémoire mais nest pas modifié après. Cet espace est accessible à partir du pointeur CPP (Voir fig. 4-10) F Espace des variables locales: A chaque appel dune 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 lappel dune procédure.

15 sif Introduction au ISA de MIC-1 n Modèle mémoire u Subdivisions de la mémoire F Espace des opérandes: Cet espace contient les opérandes dopérations données. Les opérandes sont accessibles par le pointeur SP. F 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 loctet suivant

16 sif Introduction au ISA de MIC-1 n Modèle mémoire

17 sif Introduction au ISA de MIC-1 n Jeu dinstructions u Chaque instruction consiste en un code dopération (opcode) et occasionnelle- ment dune opérande. u Chaque code d opération peut être représenté par un code hexadécimal (ex: BIPUSH => 0x10) u Lopérande peut être un décalage mémoire (memory offset) ou un constante.

18 sif Introduction au ISA de MIC-1 n Jeu dinstructions

19 sif Introduction au ISA de MIC-1 n Jeu dinstructions u Instructions PUSH de diverses sources F Espace des constantes: LDC_W F Espace des variables locales: ILOAD F Linstruction elle-même: BIPUSH u Instruction POP vers une variable locale: ISTORE u Opérations arithmétiques: IADD, ISUB u Opérations booléennes: IAND, IOR u 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)

20 sif Introduction au ISA de MIC-1 n Jeu dinstructions u Instructions de branchements: F Inconditionnel: GOTO F 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 u Instruction de permutation de deux mots sur la pile: SWAP u Instruction de duplication dun mot sur la pile: DUP u Instruction délimination d un mot sur la pile: POP

21 sif Introduction au ISA de MIC-1 n Jeu dinstructions u Instructions dappel à une procédure ou une autre instruction: INVOKEVIRTUAL u Instructions de retour dune procédure: IRETURN F Le mécanisme dappel (CALL, INVOKEVIRTUAL disp) La procédure appelante dépose sur la pile, un pointeur sur lobjet appelé (OBJREF) La procédure appelante dépose les paramètres sur la pile (Voir fig (a)) INVOKEVIRTUAL est exécuté

22 sif Introduction au ISA de MIC-1 n Jeu dinstructions u Instruction INVOKEVIRTUAL F disp indique la position dans lespace des constantes où est située ladresse de départ de la procédure dans lespace des programmes F 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 lespace des variables locales

23 sif Introduction au ISA de MIC-1 n Jeu dinstructions u Instruction INVOKEVIRTUAL (CALL) F Phases dexé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 dun 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 lancien LV (Previous LV) PC <- adr. proc. PC <- PC + 5 pour pointer au début du code de la procédure dans lespace programme

24 sif Introduction au ISA de MIC-1 PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A

25 sif Introduction au ISA de MIC-1 PROCA(P1,P2) PROCB(P1,P2,P3) RETURN_B RETURN_A Avant lappel à INVOKEVIRTUAL (CALL) Fonction appelante PROCA PUSH les paramètres P1, P2, P3 passés à la procédure appelée PROCB

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

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

28 sif Introduction au ISA de MIC-1 n Jeu dinstructions u Instruction IRETURN F Phases dexécution (Voir fig. 4-13) Libération de lespace utilisé par la procédure appelée Restaure la pile à son état avant lappel 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 lancien é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 linstruction INVOKEVIRTUAL dans PROCA

29 sif Introduction au ISA de MIC-1

30 sif La pile et ladresse de retour EIP du PENTIUM est léquivalent du PC de MIC 1

31 sif La pile et pointeur de pile ESP du PENTIUM est léquivalent du SP de MIC 1

32 sif Fonction en langage C

33 sif Éléments fondamentaux de la programmation en langage C n Fonctions et passage de paramètres u En langage C, nous pouvons passer des informations aux fonctions via son interface et ce de deux façons distinctes: F Passage par valeur: valeurs actuelles sont passées F Passage par référence (adresse): pointeurs sont passés

34 sif Éléments fondamentaux de la programmation en langage C n Fonctions, passage de paramètres (par valeur) et valeur retournée Prototype de la fonction

35 sif Éléments fondamentaux de la programmation en langage C n Fonctions et passage de paramètres (par adresse)

36 sif Accès à la pile

37 sif Appel de fonction et assembleur Passage de paramètres Appel de fonction EBP pointe sur le début de la zone pile réservée à la fonction Fin de la fonction Dans le DEBUGGER taper ALT+8 pour obtenir le code assembleur

38 sif Appel de fonctions et la pile EBP du PENTIUM est équivalent au LV du MIC-1

39 sif Erreur typique de pointeur en langage C


Télécharger ppt "Sif-10531 Cours 8 n 5. Appels de fonctions u Concepts de pile u Concepts de passage de paramètres u Concepts de variable locale n Le matériel u Chapitre."

Présentations similaires


Annonces Google