13 | | - Dans le mode ''kernel'', toutes les ressources sont accessibles, c'est-à-dire toute la mémoire et tous les registres. C'est dans ce mode que s'exécute le noyau du système d'exploitation. |
14 | | |
15 | | Nous allons donc voir les éléments de l'architecture et du langage d'assemblage, sq |
16 | | |
17 | | |
18 | | == B) REGISTRES VISIBLES DU LOGICIEL |
19 | | |
20 | | |
21 | | Tous les registres visibles du logiciel, c'est-à-dire ceux dont la valeur peut être lue ou modifiée par les instructions, sont des registres 32 bits. Il y a deux catégories de registres, protégés et non protégés, dont l'accès dépend du mode d'exécution du processeur. En mode ''user'', seuls les registres non protégés sont accessibles. En mode ''kernel'', tous les registres sont accessibles. |
22 | | |
23 | | |
24 | | |
25 | | |
26 | | === 1) Registres non protégés |
27 | | |
28 | | |
29 | | 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''). |
30 | | |
31 | | Les registres GPR:: |
32 | | Il y a 32 registres généraux (GPR signifie ''General Purpose Register'') numétotés de `$0` à `$31`\\ |
33 | | Ces registres sont directement utilisés par les instructions et permettent de stocker des résultats de calculs intermédiaires.\\\\ |
34 | | Le registre `$0` est particulier:\\ |
35 | | — la lecture fournit la valeur constante `0x00000000` \\ |
36 | | — l’écriture ne modifie pas son contenu.\\\\ |
37 | | Le registre `$31` est utilisé par les instructions d'appel de fonctions pour sauvegarder l'adresse de retour.\\ |
38 | | — Les instructions d'appel de fonctions sont : `bgezal`, `bltzal`, `jal`et `jalr` |
39 | | |
40 | | Le registre `PC`:: |
41 | | C'est le ''Program Counter'' ou compteur ordinal en français.\\ |
42 | | Ce registre contient l'adresse de l'instruction en cours d'exécution. Sa valeur est modifiée |
43 | | par toutes les instructions. |
44 | | |
45 | | Les registres `HI` et `LO`:: |
46 | | Ces sont les registres de la multiplication entière et de la division Euclidienne.\\ |
47 | | Ces deux registres 32 bits sont utilisés pour stocker le résultat d'une multiplication |
48 | | ou d'une division.\\ |
49 | | La multiplication de deux nombre de 32 bits est un mot de 64 bits (poids forts dans `HI` et poids faibles dans `LO`).\\ |
50 | | La division Euclidienne de deux nombres 32 bits produit un quotient sur 32 bits dans `LO` |
51 | | et un reste sur 32 bits dans `HI`. |
52 | | |
53 | | |
54 | | |
55 | | === 2) Registres protégés |
56 | | |
57 | | |
58 | | L'architecture du MIPS32 définit 32 registres protégés (numérotés également de `$0` à `$31` mais ils sont dans un coprocesseur). 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). |
| 15 | - Dans le mode ''kernel'', toutes les ressources sont accessibles, c'est-à-dire toute la mémoire et tous les registres. Dans ce mode, toutes les instructions sont autorisées, à la fois les instructions standards (`add`, `or`, `lw`, `mul`, etc.), mais aussi des **''instructions privilégiées''** qui vont permettre de contrôler l'état de fonctionnement du processeur. C'est dans ce mode que s'exécute le noyau du système d'exploitation. |
| 16 | |
| 17 | Ce document détaille les éléments de l'architecture du processeur et du langage d'assemblage spécifique au mode ''kernel''. |
| 18 | |
| 19 | |
| 20 | = 2. Registres protégés utilisables seulement en mode kernel |
| 21 | |
| 22 | |
| 23 | En mode ''kernel'', tous les registres sont accessibles, à la fois les registres non protégés et aussi des registres protégés. Pour rappel, les registres non protégés sont les GPR (`$0` à `$31`), le registre `PC`(accessible implicitement avec les instructions de branchement) et les registres `HI` et `LO`. Les registres protégés sont destinés au calcul alors que les **''registres protégés''** sont destinés au contrôle de l'état du processeur. |
| 24 | |
| 25 | L'architecture du MIPS32 définit 32 registres protégés, numérotés de `$0` à `$31`, c'est-à-dire comme les registres GPR mais ils ont des instructions d'accès spécifiques. En effet, ces registres protégés ne sont accessibles que par les instructions privilégiées `mtc0` et `mfc0`. |
| 26 | Ces instruction ne utilisables qu'en mode ''kernel''. `mtc0` et `mfc0` signifient respectivement ''Move-To-Coprocessor-0'' et ''Move-From-Coprocessor-0''. |
| 27 | |
| 28 | Ces registres appartiennent au "coprocesseur système" n°0 (appélé aussi `c0` pour ''Coprocessor 0''). Dans cette version du processeur MIPS32, il y en a 6. Ils sont tous utilisés par le système d’exploitation pour la gestion des interruptions, des exceptions et des appels système. |
98 | | ||**`mtc0 $gpr, $c0`** || || Copro. 0 (`$c0`) <--- Reg. GPR (`$gpr`) || || `$c0` = `$8`, `$12`, `$13`, `$14`, `$15` ou `$16` ; `$gpr` = `$0` .. `$31` || |
99 | | ||**`mfc0 $gpr, $c0`** || || Reg. GPR (`$gpr`) <--- Copro. 0 (`$c0`) || || `$c0` = `$8`, `$12`, `$13`, `$14`, `$15` ou `$16` ; `$gpr` = `$0` .. `$31` || |
| 71 | ||**`mtc0 $gpr, $c0`** || || Copro. 0 (`$c0`) ← GPR (`$gpr`) || || `$c0 ` = `$8`, `$12`, `$13`, `$14`, `$15` ou `$16`\\`$gpr` = `$0` ... `$31` || |
| 72 | ||**`mfc0 $gpr, $c0`** || || GPR (`$gpr`) ← Copro. 0 (`$c0`) || || `$c0` = `$8`, `$12`, `$13`, `$14`, `$15` ou `$16`\\`$gpr ` = `$0` ... `$31` || |