Académique Documents
Professionnel Documents
Culture Documents
dr.mokrani@gmail.com
1
Chapitre IV
Quelques conventions
Appel de fonctions
Multi-tâche, exceptions & interruptions.
Conclusion.
2
Quelques conventions
3
Convention d’organisation de la
mémoire
$sp ->0x 7FFF FFFF
Pile
.stack
Conventions logiciels
Données
Dynamiques .data
$gp ->0x 1000 8000
Données
Statiques
0x 1000 0000
Instructions du
.Text
programme
pc ->0x 0040 0000
Réservée Partie réservée au système
0 4
Convention de passage d’arguments
5
Appel de fonction
6
Appel de fonction
jal pr2 # appel pr2
add …
sub …
…. Pr2:
add …
sub …
mult…
jr $31 # return
8
Appel de fonction
(Utilisation d’une Pile)
• Une pile est une mémoire qui se manipule via deux
opérations :
push : empiler un élément (le contenu d’un registre) au sommet
de la pile.
pop : dépiler un élément (et le récupérer dans un registre).
9
Appel de sous-programmes
(politique de gestion de la pile)
• Remarque:
un sous-programme doit rendre la pile intacte.
10
Exemple d’appel de fonction
11
Besoin de sauvegarder d’autres
données?
addiu $sp, $sp, -32 # Allocation d’espace dans la pile
sw $t1, 0($sp) # Premier paramètre d’entrée à la Mem[Sp]
sw $t2, 4($sp) # Second paramètre d’entrée à la Mem[Sp+ 4]
sw $t3, 8($sp) # troisième paramètre d’entrée à la Mem[Sp+ 8]
sw $ra, 20($sp) # Sauvegarder l’adresse de retour.
sw $t6, 24($sp) # Sauvegarder $t6 dans la pile
sw $t7, 28($sp) # Sauvegarder $t3 dans la pile
jal FUN # Appeler la fonction JILL
lw $t6, 24($sp) # Restaurer $t6 depuis la pile
lw $t7, 28($sp) # Restaurer $t7 depuis la pile
lw $ra, 20($sp) # Restaurer l’adresse de retour.
lw $t4, 12($sp) # Récupérer le premier paramètre de sortie la fonction à la Mem[Sp+12]
lw $t5, 16($sp) # Récupérer le second paramètre de sortie de la fonction à la Mem[Sp+16]
addiu $sp, $sp, 24 # Libération de l’espace de la pile.
12
Exemple de programmation d’une
fonction appelée
FUN:
lw $a0, 0($sp) # Récupérer le premier paramètre “A” dans Mem[Sp]
lw $a1, 4($sp) # Récupérer le second paramètre “B” dans Mem[Sp+4]
lw $a2, 8($sp) # Récupérer le second paramètre “C” dans Mem[Sp+8]
… # Quelques instruction de la fonction
sw $v0, 12($sp) #Ecrire le premier paramètre de sortie “D” dansMem[Sp+12]
sw $v1, 16($sp) # Ecrire le seconde paramètre de sortie “E” at Mem[Sp+16]
jr $ra # Retour à la fonction appelante
13
Variables locales et Conventions
• Remarque:
– Il faut libérer l’espace du tableau avant de quitter la fonction.
– Faire attention concernant le décalage par rapport au sommer de la pile.
Utilisation du registre $fp (Frame pointer) pour différencier les
paramètres de la fonction et les variables locales
14
Multi-tâches, Exceptions &
Interruptions
15
Multi-tâches
Pour permettre à un processeur d’exécuter plusieurs programme au
même temps.
16
Multi-tâches & Exceptions
• Chaque fois qu’un bouton de la souris est poussé ou la souris est déplacée, ou une
touche du clavier est pressée.
=> l’ordinateur répond !?
=> Sur MIPS: conception d’un coprocesseur (0) qui envoi un signal d’interruption au
contrôleur de processeur lorsque une exception arrive. (Accès au mode noyau).
17
Quelques registres du coprocesseur0
(MIPS)
Ces registres concernent la gestion des exceptions, interruptions et appels systèmes.
• status:
c’est le registre d’état. Il contient les masques d’interruption et le mode ;
• cause:
c’est le registre qui contient la cause de l’exception ;
18
Exécution des exceptions & interruptions
(Mips)
1. Lorsque une interruption est signalée et le processeur est arriver à la fin de
l’instruction en cours d’exécution et avant même de commencer l’exécution de
l’instruction suivante, l’unité de contrôle entre dans un état spécial.
2. Dans cet état spécial:
a) Le contenu du registre PC est sauvegarder dans le registre EPC. Et le conteur PC est
mis-à-jours par l’adresse de la première instruction de la routine à exécuter. Aussi il
faut sauvegarder le contenu des autres registres pour éviter l’écrasement des
données (sauvegarder le contexte du CPU).
b) Le mode d’exécution est changé en mode noyau dans le registre status et les
interruptions sont masquées.
c) Le registre cause est récupéré, pour voir la cause de l’exception. Aussi, le registre
BadVaddr est récupéré avec quelques registres de gestion de mémoire virtuelle.
d) Le processeur exécute les instructions du code associé à l’interruption. (c’est le
programme d’interruption qui règle l’exception).
3. Après la fin d’exécution de la routine d’interruption:
a) Sauvegarder le contenu du registre EPC dans le registre PC. (Revenir à la prochaine
instruction à exécuter sur le programme de départ).
b) Restaurer le contexte du CPU.
c) Sortir de l’état spéciale du contrôleur et continuer l’exécution normale du programme
jusqu’à rencontrer une nouvelle interruption.
19
Conclusion
20
Conclusion
Il faut:
1. Gérer la mémoire selon des conventions définies.
2. Gérer le sauvegarde et la restauration des données lors des
appels des fonctions.
3. Suivre la convention d’utilisation des arguments d’appel de
fonction.
4. Utiliser la pile système pour sauvegarder les variables locales.
5. Avoir un processeur qui permet deux modes d’exécution
(superviseur/ utilisateur) pour pouvoir réaliser le multi-tâche.
6. Avoir un composant matériel liée au processeur qui permet la
gestion des exceptions et les différents modes.
21