Changes between Version 149 and Version 150 of Archi-1-TP9


Ignore:
Timestamp:
Nov 21, 2021, 10:11:17 AM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v149 v150  
    2112111. Écrivez une séquence de code qui affiche la chaîne de caractère `"Hello"` sur `TTY0`. Ce n'est pas une fonction et vous pouvez utiliser tous les registres que vous voulez. Vous supposez que `__tty_regs_maps` est déjà défini.
    212212{{{#!protected ------------------------------------------------------------------------------------
    213 '''''''''''''''
     213''
     214Il faut laisser le temps d'écrire ce programme. Si la notion de section est comprise, si les macros `li` et `la` sont comprises, si l'écriture d'une boucle en assembleur est comprise, si l'usage du registre `write` du TTY est compris, alors c'est très facile, et si on donne la correction trop vite alors même ceux qui n'ont pas tout compris vont trouver ça évident.\\
     215Si les étudiants ne démarrent pas alors on peut donner la section `.data` et l'initialisation des registres `$4` et `$5`.
    214216{{{#!asm
    215217.data
     
    225227    bne     $8, $0, print               // check that it is not null, if ok it must be printed
    226228}}}
    227 '''''''''''''''
     229''
    228230}}}
    229 1. En regardant le dessin de l'espace d'adressage du prototype **almo1**, dites à quelle adresse devra être initialisé le pointeur de pile pour le kernel. Rappelez pourquoi c'est indispensable de le définir avant d'appeler une fonction C et écrivez le code qui fait l'initialisation, en supposant que l'adresse du pointeur de pile vaut celle que représente le nom `__kdata_end`
    230 {{{#!protected ------------------------------------------------------------------------------------
    231 '''''''''''''''
     2311. En regardant le dessin de l'espace d'adressage du prototype **almo1** (plus haut et sur le slide 7 du cours 9), dites à quelle adresse devra être initialisé le pointeur de pile **pour le kernel**. Rappelez pourquoi c'est indispensable de le définir avant d'appeler une fonction C et écrivez le code qui fait l'initialisation, en supposant que l'adresse du pointeur de pile a pour nom `__kdata_end`
     232{{{#!protected ------------------------------------------------------------------------------------
     233''
     234On parle ici du pointeur de pile pour le `kernel`, on doit mettre le pointeur de pile dans une section
    232235* La pile va être initialisée juste à la première adresse au-delà de la zone kdata : `0x80020000` + `0x003E0000` = `0x80400000`
    233236* La première chose que fait une fonction, c'est décrémenter le pointeur de pile pour écrire `$31`, etc. Il faut donc que le pointeur ait été défini.
     
    235238 la  $29, __kdata_end
    236239}}}   
    237 '''''''''''''''
     240''
    238241}}}
    239242