Changes between Version 56 and Version 57 of Archi-1-TP9
- Timestamp:
- Dec 4, 2020, 3:17:40 AM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP9
v56 v57 104 104 {{{#!protected ------------------------------------------------------------------------------------ 105 105 ''''''''''''''' 106 * Si les adresses utilisées par `TTY0` commencent à `0x D0200000` alors celles de `TTY1` commencent à l'adresse `0xD0200010` et donc `TTY_READ` est à l'adresse `0xD0200018`.106 * Si les adresses utilisées par `TTY0` commencent à `0xd0200000` alors celles de `TTY1` commencent à l'adresse `0xd0200010` et donc `TTY_READ` est à l'adresse `0xd0200018`. 107 107 ''''''''''''''' 108 108 }}} … … 122 122 123 123 **Questions** 124 1. Supposons que l'adresse du premier registre du `TTY` se somme ? 125 {{{#!protected ------------------------------------------------------------------------------------ 126 ''''''''''''''' 127 * 124 1. Nous savons que l'adresse du premier registre du `TTY` est `0xd0200000` est qu'à cette adresse se trouve le registre `TTY_WRITE` du `TTY0`. Écrivez le code permettant d'écrire le code ASCII `'x'` sur le terminal 0. Vous avez droit à tous les registres du MIPS. 125 {{{#!protected ------------------------------------------------------------------------------------ 126 ''''''''''''''' 127 {{{#!asm 128 lui $4, 0xD020 129 ori $4, $4, 0x0000 // cette instruction ne sert a rien puisqu on ajoute 0, mais je la met pour le cas general 130 ori $5, 'x' 131 sb $5, ($4) // Notez que le 0 devant ($4) n est pas obligatoire 132 }}} 128 133 ''''''''''''''' 129 134 }}} 130 131 135 1. Le problème est que l'adresse du `TTY` est un choix de l'architecte du prototype et s'il décide de placer le `TTY` ailleurs dans l'espace d'adressage, il faudra réécrire le code précédent. Nous allons utiliser une étiquette, supposons que l'adresse du premier registre du `TTY` se nomme `__tty_regs_map`. Le code assembleur ne connait pas l'adresse, il ne connait que le symbole. Si nous voulons toujours écrire `'x'` sur le terminal 0. Nous allons utiliser la macro `la $r, label` qui est remplacée par les deux instructions `lui` et `ori`. Pour être plus précis 136 {{{#!asm 137 la $r, label 138 }}} 139 est remplacé par 140 {{{#!asm 141 lui $r, label>>16 142 ori $r, $r, label & 0xFFFF 143 }}} 144 Réécrivez le code précédent en utilisant `la` 145 {{{#!protected ------------------------------------------------------------------------------------ 146 ''''''''''''''' 147 {{{#!asm 148 la $4, __tty_regs_map 149 ori $5, 'x' 150 sb $5, ($4) 151 }}} 152 ''''''''''''''' 153 }}} 132 154 == A3. Chaîne de compilation 133 155 … … 137 159 138 160 * fonction write buffer en assembleur et en C 139 * Makefile et make recurs if161 * Makefile et make recurs 140 162 * Les struct et les tableaux de structs 141 163 * fonction read buffer en C