Changes between Version 5 and Version 6 of FAQ-oct19-S2


Ignore:
Timestamp:
Jun 25, 2020, 7:41:42 PM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • FAQ-oct19-S2

    v5 v6  
    44
    55* **Quand et où ?**[[BR]]
    6   L'examen se déroulera en présentiel sur le campus Pierre et Marie Curie entre le 1er et le 10 juillet 2020.
     6  L'examen se déroulera dans l'**amphi 34B** sur le campus Pierre et Marie Curie le **mercredi 1er juillet 2020**.
    77
    88* **Est-ce que c'est un sujet "standard" ?**[[BR]]
     
    1616
    1717* **Qui fait le prologue et l’épilogue la fonction appelante ou la fonction appelée ?**[[BR]][[BR]]
    18 
    19 {{{
    20 #!protected
    21   C'est la fonction appelée qui a un prologue et un épilogue. [[BR]]
    22   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]]
    23   **Prologue**[[BR]]
    24   Lorsqu'on commence à exécuter `g`, il faut exécuter un prologue dont voici les étapes :
    25   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 :
    26      1. sauver la valeur des registres persistants que `g()` va utiliser dont `$31`.
    27      2. réserver de la place pour les variables locales de la fonction `g()`
    28      3. réserver de la place pour les arguments des fonctions que `g()` va appeler.
    29   2. Sauver les registres persistants que `g()` va utiliser dans la place réservé pour eux à l'étape précédentes
    30      [[BR]]
    31      C'est donc une suite de `sw $x, d($29)` où `d` est toujours positif.
    32   3. Sauver les arguments reçus par `g()` (dans `$4` à `$7`) à la place réservé par `f()` (c'est-à-dire dans le
    33      contexte de `f()`).  Cette étape n'est pas toujours présente, elle n'est utile que si `g()` appelle elle-même
    34      des fonctions et qu'elle a besoin de changer la valeur des registres `$4` à `$7` et qu'elle en a besoin après
    35      ses fonctions appelées.[[BR]][[BR]]
    36   **Epilogue**[[BR]]
    37   il s'agit de :
    38   1. restaurer l'état des registres persistants sauvés lors du prologue
    39   2. res
    40 }}}
     18>C'est la fonction appelée qui a un prologue et un épilogue. [[BR]]
     19>Lorsque fonction `f()` appelle une fonction `g()`, elle se contente de placer les arguments dans les registres `$4` à `$7`et de faire un saut à `g()` par >l'instruction `jal g`.
     20>
     21>**Prologue**[[BR]]
     22>Lorsqu'on commence à exécuter `g`, il faut exécuter un prologue dont voici les étapes :
     23>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'octets pris dans la pile (c'est > >toujours un multiple de 4). Ces `X` octets vont servir à trois choses :
     24>   1. sauver la valeur des registres persistants que `g()` va utiliser dont `$31`.
     25>   2. réserver de la place pour les variables locales de la fonction `g()`
     26>   3. réserver de la place pour les arguments des fonctions que `g()` va appeler.
     27>2. Sauver les registres persistants que `g()` va utiliser dans la place réservée pour eux à l'étape précédente [[BR]]
     28>   C'est donc une suite de `sw $x, d($29)` où `d` est toujours positif et multiple de 4.
     29>3. Sauver les arguments reçus par `g()` (dans `$4` à `$7`) à la place réservée par `f()` (c'est-à-dire dans le
     30>   contexte de `f()`).  Cette étape n'est pas toujours présente, elle n'est utile que si `g()` appelle elle-même.
     31>   des fonctions et qu'elle a donc besoin de changer la valeur des registres `$4` à `$7` alors qu'elle en a besoin après
     32>   ses fonctions appelées.
     33
     34>**Epilogue**[[BR]]
     35>Avant de sortir de `g` on doit exécuter l'épilogue qui consiste à :
     36>1. restaurer l'état des registres persistants sauvés lors du prologue avec une séquence de `lw $x, d($29)`
     37>2. restaurer l'état du pointeur de pile `addiu $29, $29, X`
    4138
    4239* **Quand on est en mode user peut on masquer les interruptions ?**[[BR]]