Changes between Version 149 and Version 150 of Archi-1-TP9
- Timestamp:
- Nov 21, 2021, 10:11:17 AM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP9
v149 v150 211 211 1. É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. 212 212 {{{#!protected ------------------------------------------------------------------------------------ 213 ''''''''''''''' 213 '' 214 Il 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.\\ 215 Si les étudiants ne démarrent pas alors on peut donner la section `.data` et l'initialisation des registres `$4` et `$5`. 214 216 {{{#!asm 215 217 .data … … 225 227 bne $8, $0, print // check that it is not null, if ok it must be printed 226 228 }}} 227 '' '''''''''''''229 '' 228 230 }}} 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 ''''''''''''''' 231 1. 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 '' 234 On parle ici du pointeur de pile pour le `kernel`, on doit mettre le pointeur de pile dans une section 232 235 * La pile va être initialisée juste à la première adresse au-delà de la zone kdata : `0x80020000` + `0x003E0000` = `0x80400000` 233 236 * 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. … … 235 238 la $29, __kdata_end 236 239 }}} 237 '' '''''''''''''240 '' 238 241 }}} 239 242