Upload
caterine-verdier
View
117
Download
4
Embed Size (px)
Citation preview
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-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 ?
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 counterSP: stack pointerLV: base pointer
sif-1053 5
MPC: program counterMIR: instruction register
Architecture CISC
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,
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é
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-1PROCA(P1,P2)
PROCB(P1,P2,P3)
RETURN_B
RETURN_A
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
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.
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
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è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
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
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
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