Changes between Version 2 and Version 3 of Doc-MIPS-Archi-Asm-kernel


Ignore:
Timestamp:
Sep 17, 2020, 9:43:52 AM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Doc-MIPS-Archi-Asm-kernel

    v2 v3  
    1717L'architecture externe représente ce que doit connaître un utilisateur souhaitant programmer en assembleur, ou souhaitant écrire un compilateur. Elle définit:
    1818
    19  - Les registres visibles du logiciel.
    20  - L'adressage de la mémoire.
    21  - Le jeu d'instructions.
     19 - Les registres visibles du logiciel ;
     20 - L'adressage de la mémoire ;
     21 - Le jeu d'instructions ;
    2222 - Les mécanismes de traitement des interruptions, des exceptions et appels système.
    2323
    24 Le processeur MIPS32 est un processeur 32 bits conçu dans les années 1980. Son jeu d'instructions est de type RISC (Reduced Instruction Set Computer). Il existe de nombreuses réalisations industrielles de cette architecture (SIEMENS, NEC, LSI LOGIC, SILICON GRAPHICS, MICROCHIP, etc.) 
     24Le processeur MIPS32 est un processeur 32 bits conçu dans les années 1980. Son jeu d'instructions est de type RISC (Reduced Instruction Set Computer). Il existe de nombreuses réalisations industrielles de cette architecture (SIEMENS, NEC, LSI LOGIC, SILICON GRAPHICS, MICROCHIP, etc.).
    2525
    2626Cette architecture est suffisamment simple pour présenter les principes de base de l'architecture des processeurs, et suffisamment puissante pour supporter un système d'exploitation multitâches tel qu'UNIX, puisqu’il supporte deux modes de fonctionnement utilisateur (''user'') et superviseur (''kernel'').
    2727
    2828 - Dans le mode ''user'', certaines régions de la mémoire et certains registres du processeur sont protégés et donc inaccessibles.
    29  - Dans le mode ''kernel'', toutes les ressources sont accessibles, c'est-à-dire toutes la mémoire et tous les registres.
    30 
    31 L'architecture interne n'est pas présentée dans ce module. Elle dépend des choix de réalisation matérielle. Plusieurs implémentations matérielles de cette architecture ont été réalisées à Sorbonne Université dans un but d'enseignement et de recherche : une version microprogrammée, simple mais peu performante (1 instruction s'exécute en 4 cycles d'horloge), une version pipeline plus performante (1 instruction par cycle) mais plus complexe, une version superscalaire, encore plus performante (2 instructions par cycle) mais beaucoup plus complexe.
    32 
    33 La spécification du langage d'assemblage,  des conventions d’utilisation des registres, ainsi que des conventions d’utilisation de la pile fait l'objet d'un document séparé.
     29 - Dans le mode ''kernel'', toutes les ressources sont accessibles, c'est-à-dire toute la mémoire et tous les registres.
     30
     31L'architecture interne n'est pas présentée dans ce module. Elle dépend des choix de réalisation matérielle. Plusieurs implémentations matérielles ont été réalisées à Sorbonne Université dans un but d'enseignement et de recherche : une version microprogrammée, simple mais peu performante (1 instruction s'exécute en 4 cycles d'horloge), une version pipeline plus performante (1 instruction par cycle) mais plus complexe, une version superscalaire, encore plus performante (2 instructions par cycle) mais beaucoup plus complexe.
     32
     33La spécification du langage d'assemblage,  les conventions d’utilisation des registres, ainsi que les conventions d’utilisation de la pile font l'objet d'un document séparé.
    3434
    3535
     
    4646
    4747
    48 Le processeur possède 35 registres manipulés par les instructions standards (c'est-à-dire les instructions qui peuvent s'exécuter aussi bien en mode ''user'' qu'en mode ''kernel'').
    49 
    50  Registres GPR `$0` à `$31`::
    51    32 registres généraux (GPR : ''General Purpose Register'')\\
    52    Ces registres sont directement adressés par les instructions, et permettent de stocker des résultats de calculs intermédiaires.\\
     48Le processeur possède 35 registres utilisables par les instructions standards (c'est-à-dire les instructions qui peuvent s'exécuter aussi bien en mode ''user'' qu'en mode ''kernel'').
     49
     50 Les registres GPR `$0` à `$31`::
     51   Il y a 32 registres généraux (GPR signifie ''General Purpose Register'')\\
     52   Ces registres sont directement utilisés par les instructions et permettent de stocker des résultats de calculs intermédiaires.\\\\
    5353   Le registre `$0` est particulier:\\
    5454   — la lecture fournit la valeur constante `0x00000000` \\
    55    — l’écriture ne modifie pas son contenu.\\
     55   — l’écriture ne modifie pas son contenu.\\\\
    5656   Le registre `$31` est utilisé par les instructions d'appel de fonctions pour sauvegarder l'adresse de retour.\\
    5757   — Les instructions d'appel de fonctions sont : `bgezal`, `bltzal`, `jal`et `jalr`
    5858
    59  Registre `PC`::
    60    Registre compteur de programme (''Program Counter'').\\
     59 Le registre `PC`::
     60   C'est le ''Program Counter'' ou compteur de programme en français.\\
    6161   Ce registre contient l'adresse de l'instruction en cours d'exécution. Sa valeur est modifiée
    6262   par toutes les instructions.
    6363
    64  Registres `HI` et `LO`::
    65    Registres pour la multiplication entière ou la division Euclidienne.\\
     64 Les registres `HI` et `LO`::
     65   Ces sont les registres de la multiplication entière et de la division Euclidienne.\\
    6666   Ces deux registres 32 bits sont utilisés pour stocker le résultat d'une multiplication
    6767   ou d'une division.\\
    68    La multiplication de deux nombre de 32 bits est un mot de 64 bits.\\
    69    La division Euclidienne de deux nombres 32 bits produit un quotient sur 32 bits
    70    et un reste sur 32 bits
     68   La multiplication de deux nombre de 32 bits est un mot de 64 bits (poids forts dans HI et poids faibles dans LO).\\
     69   La division Euclidienne de deux nombres 32 bits produit un quotient sur 32 bits dans LO
     70   et un reste sur 32 bits dans HI.
    7171
    7272
     
    7575
    7676
    77 L'architecture du MIPS32 définit 32 registres protégés (numérotés de 0 à 31). Ces registres protégés ne sont accessibles, en lecture comme en écriture, que par les instructions privilégiées `mtc0` et `mfc0` ne pouvant être exécutées qu'en mode ''kernel''. `mtc0` et `mfc0` signifient respectivement ''Move-To-Coprocessor-0'' et ''Move-From-Coprocessor-0''. Ces registres appartiennent au "coprocesseur système" (appélé aussi `c0` pour ''Coprocessor 0''). En pratique, cette version du processeur MIPS32 en définit 6. Ils sont utilisés par le système d’exploitation pour la gestion des interruptions, des exceptions et des appels système  (voir chapitre E).
    78 
    79  Registre `c0_sr`::
     77L'architecture du MIPS32 définit 32 registres protégés (numérotés de $0 à $31). Ces registres protégés ne sont accessibles, en lecture comme en écriture, que par les instructions privilégiées `mtc0` et `mfc0` ne pouvant être exécutées qu'en mode ''kernel''. `mtc0` et `mfc0` signifient respectivement ''Move-To-Coprocessor-0'' et ''Move-From-Coprocessor-0''. En effet, ces registres appartiennent au "coprocesseur système" n°0 (appélé aussi `c0` pour ''Coprocessor 0''). En pratique, cette version du processeur MIPS32 en définit 6. Ils sont utilisés par le système d’exploitation pour la gestion des interruptions, des exceptions et des appels système  (voir chapitre E).
     78
     79 Le registre `c0_sr`::
    8080   Le registre `sr` de `c0` est le registre d'état (''Status Register'').
    8181   Il contient en particulier le bit qui définit le mode : ''user'' ou ''kernel'',
     
    8383   Ce registre a le numéro `$12`.
    8484
    85  Registre `c0_cause`::
     85 Le registre `c0_cause`::
    8686   Le registre `cause` de `c0` est le registre de cause (''Cause Register'').
    8787   En cas d'interruption, d'exception ou d'appel système, le code en cours d'exécution
     
    9090   Ce registre a  le numéro `$13`.
    9191
    92  Registre `c0_epc`::
     92 Le registre `c0_epc`::
    9393   Le registre `epc` de `c0 est le registre d'exception (''Exception Program Counter'').
    9494   Il contient soit l'adresse de retour (PC + 4) en cas d'interruption, soit l'adresse de l'instruction courante
     
    9696   Ce registre a le numéro `$14`.
    9797
    98  Registre `c0_bar`::
     98 Le registre `c0_bar`::
    9999   Le registre `bar` de `c0` est legistre d'adresse illégale (''Bad Address Register'').
    100100   En cas d'exception de type "adresse illégale", il contient la valeur de l'adresse mal formée.\\     
    101101   Ce registre a le numéro `$8`.
    102102 
    103  Registre `c0_procid`::
     103 Le registre `c0_procid`::
    104104   Le registre `procid` est le registre en lecture seulement contenant le numéro du processeur.
    105105   Cet index « cablé » est utilisé par le noyau du système d’exploitation
     
    107107   Ce registre possède le numéro `$15`.
    108108
    109  Registre `c0_count`::
     109 Le registre `c0_count`::
    110110   Le registre `count` de `c0` est le registre en lecture seulement contenant
    111111   le nombre de cycles exécutés depuis l’initialisation du processeur. \\