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


Ignore:
Timestamp:
Jun 25, 2020, 7:14:00 AM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • FAQ-oct19-S2

    v4 v5  
    1313  * GIET et un peu d'archi (probablement un QCM)
    1414
     15== Programmation assembleur
     16
     17* **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}}}
     41
     42* **Quand on est en mode user peut on masquer les interruptions ?**[[BR]]
     43