Version 8 (modified by 4 years ago) (diff) | ,
---|
Questions - Réponses pour la préparation de la session 2 de l'année 2019-2020
A propos du format du sujet
- Où et quand ?
L'examen se déroulera dans l'amphi 34B sur le campus Pierre et Marie Curie le mercredi 1er juillet 2020.
- Est-ce que c'est un sujet "standard" ?
Hormis le fait qu'il n'y a que 3 parties, ce sera un sujet standard. Vous pouvez vous référer aux annales corrigées.- Assembleur
- Cache
- GIET et un peu d'archi (probablement un QCM)
Programmation assembleur
- Qui fait le prologue et l’épilogue la fonction appelante ou la fonction appelée ?
C'est la fonction appelée qui a un prologue et un épilogue.
Lorsque fonctionf()
appelle une fonctiong()
, elle se contente de placer les arguments dans les registres$4
à$7
et de faire un saut àg()
par >l'instructionjal g
.Prologue
Lorsqu'on commence à exécuterg
, il faut exécuter un prologue dont voici les étapes :- créer le contexte d'exécution dans la pile pour
g()
avec l'instructionaddiu $29, $29, -X
oùX
est le nombre d'octets pris dans la pile (c'est > >toujours un multiple de 4). CesX
octets vont servir à trois choses :- sauver la valeur des registres persistants que
g()
va utiliser dont$31
. - réserver de la place pour les variables locales de la fonction
g()
- réserver de la place pour les arguments des fonctions que
g()
va appeler.
- sauver la valeur des registres persistants que
- Sauver les registres persistants que
g()
va utiliser dans la place réservée pour eux à l'étape précédente
C'est donc une suite desw $x, d($29)
oùd
est toujours positif et multiple de 4. - Sauver les arguments reçus par
g()
(dans$4
à$7
) à la place réservée parf()
(c'est-à-dire dans le contexte def()
).
Cette étape n'est pas toujours présente, elle n'est utile que sig()
appelle elle-même. des fonctions et qu'elle a donc besoin de changer la valeur des registres$4
à$7
alors qu'elle en a besoin après ses fonctions appelées.
Epilogue
Avant de sortir deg
on doit exécuter l'épilogue qui consiste à :- restaurer l'état des registres persistants sauvés lors du prologue avec une séquence de
lw $x, d($29)
- restaurer l'état du pointeur de pile
addiu $29, $29, X
- créer le contexte d'exécution dans la pile pour
- Quand on est en mode user peut on masquer les interruptions ?
Non, c'est impossible parce que pour masquer les interruptions, il faut :
- soit écrire dans le registre status en utilisant l'instruction mtc0.
Or cette instruction est interdite en mode user, l'utiliser provoque une exception. - soit écrire dans le registre de masque de l'ICU dont l'adresse est "mappée" (placée) au-delà de 0x80000000.
Or y écrire est interdit en mode user, cela provoque une exception.
- soit écrire dans le registre status en utilisant l'instruction mtc0.