39
sif-1053 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-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

Embed Size (px)

Citation preview

Page 1: 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

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

Page 2: 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

sif-1053 2

Appel de fonctions

Lors de l’appel à une fonction, comment fait-on pourretourner à 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 ?

Page 3: 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

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 ?

Page 4: 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

sif-1053 4

Architecture CISC

MAR: Memory adr. reg.MDR: Memory data reg.MBR: Memory byte reg.PC: Program counterSP: stack pointerLV: base pointer

Page 5: 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

sif-1053 5

MPC: program counterMIR: instruction register

Architecture CISC

Page 6: 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

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é

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

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

Page 8: 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

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

Page 9: 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

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

Page 10: 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

sif-1053 10

Architecture CISC (pile)

PROC()

{

int a1, a2, a3 ;

}

Page 11: 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

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

Page 12: 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

sif-1053 12

Architecture CISC (pile)

{

a1 = a2 + a3 ;

}

Page 13: 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

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)

Page 14: 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

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.

Page 15: 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

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

Page 16: 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

sif-1053 16

Introduction au ISA deMIC-1 Modèle mémoire

Page 17: 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

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.

Page 18: 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

sif-1053 18

Introduction au ISA deMIC-1 Jeu d’instructions

Page 19: 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

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)

Page 20: 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

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

Page 21: 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

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,

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. 4-12 (a))

• INVOKEVIRTUAL est exécuté

Page 22: 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

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

Page 23: 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

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

Page 24: 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

sif-1053 24

Introduction au ISA deMIC-1PROCA(P1,P2)

PROCB(P1,P2,P3)

RETURN_B

RETURN_A

Page 25: 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

sif-1053 25

Introduction au ISA deMIC-1PROCA(P1,P2)

PROCB(P1,P2,P3)

RETURN_B

RETURN_A

Avant l’appel à INVOKEVIRTUAL (CALL)

Fonction appelante PROCA PUSH les paramètres P1, P2, P3 passés à la procédure appelée PROCB

Page 26: 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

sif-1053 26

Introduction au ISA deMIC-1PROCA(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.

Page 27: 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

sif-1053 27

Introduction au ISA deMIC-1PROCA(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

Page 28: 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

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

Page 29: 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

sif-1053 29

Introduction au ISA deMIC-1

Page 30: 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

sif-1053 30

La pile et l’adresse de retour

EIP du PENTIUM est l’équivalent du PC de MIC 1

Page 31: 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

sif-1053 31

La pile et pointeur de pile

ESP du PENTIUM est l’équivalent du SP de MIC 1

Page 32: 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

sif-1053 32

Fonction en langage C

Page 33: 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

sif-1053 33

Éléments fondamentaux de la programmation en langage C

Fonctions et passage de paramètresEn 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

Page 34: 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

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

Page 35: 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

sif-1053 35

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

Page 36: 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

sif-1053 36

Accès à la pile

Page 37: 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

sif-1053 37

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

Page 38: 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

sif-1053 38

Appel de fonctions et la pile

EBP du PENTIUM est équivalent au LV du MIC-1

Page 39: 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

sif-1053 39

Erreur typique de pointeur en langage C