Changes between Version 56 and Version 57 of Archi-1-TP9


Ignore:
Timestamp:
Dec 4, 2020, 3:17:40 AM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v56 v57  
    104104{{{#!protected ------------------------------------------------------------------------------------
    105105'''''''''''''''
    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`.
     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`.
    107107'''''''''''''''
    108108}}}
     
    122122
    123123**Questions**
    124 1. Supposons que l'adresse du premier registre du `TTY`  se somme ?
    125 {{{#!protected ------------------------------------------------------------------------------------
    126 '''''''''''''''
    127 *
     1241. 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
     128lui   $4, 0xD020
     129ori   $4, $4, 0x0000   // cette instruction ne sert a rien puisqu on ajoute 0, mais je la met pour le cas general
     130ori   $5, 'x'
     131sb    $5, ($4)         // Notez que le 0 devant ($4) n est pas obligatoire
     132}}}
    128133'''''''''''''''
    129134}}}
    130 
    131 
     1351. 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
     137la $r, label
     138}}}
     139 est remplacé par
     140{{{#!asm
     141lui $r, label>>16
     142ori $r, $r, label & 0xFFFF
     143}}}
     144 Réécrivez le code précédent en utilisant `la`
     145{{{#!protected ------------------------------------------------------------------------------------
     146'''''''''''''''
     147{{{#!asm
     148la    $4, __tty_regs_map
     149ori   $5, 'x'
     150sb    $5, ($4)
     151}}}
     152'''''''''''''''
     153}}}
    132154== A3. Chaîne de compilation
    133155
     
    137159
    138160* fonction write buffer en assembleur et en C
    139 * Makefile et make recursif
     161* Makefile et make recurs
    140162* Les struct et les tableaux de structs
    141163* fonction read buffer en C