= Questions - Réponses pour la préparation de la session 2 de l'année 2019-2020 == A propos du format du sujet * **Quand et où ?**[[BR]] L'examen se déroulera en présentiel sur le campus Pierre et Marie Curie entre le 1er et le 10 juillet 2020. * **Est-ce que c'est un sujet "standard" ?**[[BR]] 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 ?**[[BR]][[BR]] {{{ #!protected C'est la fonction appelée qui a un prologue et un épilogue. [[BR]] Lorsque fonction `f()` appelle une fonction `g()`, elle se contente de placer les argument dans les registres `$4` à `$7`et de faire un saut à `g()` par l'instruction `jal g`. [[BR]][[BR]] **Prologue**[[BR]] Lorsqu'on commence à exécuter `g`, il faut exécuter un prologue dont voici les étapes : 1. créer le contexte d'exécution dans la pile pour `g()` avec l'instruction `addiu $29, $29, -X` où `X` est le nombre d'octet pris dans la pile (c'est toujours un multiple de 4). Ces `X` octets vont servir à trois choses : 1. sauver la valeur des registres persistants que `g()` va utiliser dont `$31`. 2. réserver de la place pour les variables locales de la fonction `g()` 3. réserver de la place pour les arguments des fonctions que `g()` va appeler. 2. Sauver les registres persistants que `g()` va utiliser dans la place réservé pour eux à l'étape précédentes [[BR]] C'est donc une suite de `sw $x, d($29)` où `d` est toujours positif. 3. Sauver les arguments reçus par `g()` (dans `$4` à `$7`) à la place réservé par `f()` (c'est-à-dire dans le contexte de `f()`). Cette étape n'est pas toujours présente, elle n'est utile que si `g()` appelle elle-même des fonctions et qu'elle a besoin de changer la valeur des registres `$4` à `$7` et qu'elle en a besoin après ses fonctions appelées.[[BR]][[BR]] **Epilogue**[[BR]] il s'agit de : 1. restaurer l'état des registres persistants sauvés lors du prologue 2. res }}} * **Quand on est en mode user peut on masquer les interruptions ?**[[BR]]