Changes between Version 2 and Version 3 of Doc-MIPS-Archi-Asm-kernel
- Timestamp:
- Sep 17, 2020, 9:43:52 AM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Doc-MIPS-Archi-Asm-kernel
v2 v3 17 17 L'architecture externe représente ce que doit connaître un utilisateur souhaitant programmer en assembleur, ou souhaitant écrire un compilateur. Elle définit: 18 18 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 ; 22 22 - Les mécanismes de traitement des interruptions, des exceptions et appels système. 23 23 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.) 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.). 25 25 26 26 Cette 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''). 27 27 28 28 - 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 toute sla 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 architectureont é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 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 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, les conventions d’utilisation des registres, ainsi que les conventions d’utilisation de la pile font l'objet d'un document séparé. 34 34 35 35 … … 46 46 47 47 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.\\48 Le 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.\\\\ 53 53 Le registre `$0` est particulier:\\ 54 54 — la lecture fournit la valeur constante `0x00000000` \\ 55 — l’écriture ne modifie pas son contenu.\\ 55 — l’écriture ne modifie pas son contenu.\\\\ 56 56 Le registre `$31` est utilisé par les instructions d'appel de fonctions pour sauvegarder l'adresse de retour.\\ 57 57 — Les instructions d'appel de fonctions sont : `bgezal`, `bltzal`, `jal`et `jalr` 58 58 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.\\ 61 61 Ce registre contient l'adresse de l'instruction en cours d'exécution. Sa valeur est modifiée 62 62 par toutes les instructions. 63 63 64 Registres `HI` et `LO`::65 Registres pour la multiplication entière oula division Euclidienne.\\64 Les registres `HI` et `LO`:: 65 Ces sont les registres de la multiplication entière et de la division Euclidienne.\\ 66 66 Ces deux registres 32 bits sont utilisés pour stocker le résultat d'une multiplication 67 67 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. 71 71 72 72 … … 75 75 76 76 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`::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''. 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`:: 80 80 Le registre `sr` de `c0` est le registre d'état (''Status Register''). 81 81 Il contient en particulier le bit qui définit le mode : ''user'' ou ''kernel'', … … 83 83 Ce registre a le numéro `$12`. 84 84 85 Registre `c0_cause`::85 Le registre `c0_cause`:: 86 86 Le registre `cause` de `c0` est le registre de cause (''Cause Register''). 87 87 En cas d'interruption, d'exception ou d'appel système, le code en cours d'exécution … … 90 90 Ce registre a le numéro `$13`. 91 91 92 Registre `c0_epc`::92 Le registre `c0_epc`:: 93 93 Le registre `epc` de `c0 est le registre d'exception (''Exception Program Counter''). 94 94 Il contient soit l'adresse de retour (PC + 4) en cas d'interruption, soit l'adresse de l'instruction courante … … 96 96 Ce registre a le numéro `$14`. 97 97 98 Registre `c0_bar`::98 Le registre `c0_bar`:: 99 99 Le registre `bar` de `c0` est legistre d'adresse illégale (''Bad Address Register''). 100 100 En cas d'exception de type "adresse illégale", il contient la valeur de l'adresse mal formée.\\ 101 101 Ce registre a le numéro `$8`. 102 102 103 Registre `c0_procid`::103 Le registre `c0_procid`:: 104 104 Le registre `procid` est le registre en lecture seulement contenant le numéro du processeur. 105 105 Cet index « cablé » est utilisé par le noyau du système d’exploitation … … 107 107 Ce registre possède le numéro `$15`. 108 108 109 Registre `c0_count`::109 Le registre `c0_count`:: 110 110 Le registre `count` de `c0` est le registre en lecture seulement contenant 111 111 le nombre de cycles exécutés depuis l’initialisation du processeur. \\