L'interpréteur langage machine
Un interpréteur permettra de traduire (sans compilation) le langage machine vers les micro instructions.
3 phases sont donc nécessaires dans l'algorithme de l'interpréteur :
- « charger » (en anglais, “fetch”)
- « décoder » (en anglais, “decode”)
- « exécuter » (en anglais, “execute”)
Pour déterminer que nous passons à l'instruction suivante, nous devons ajouter une phase : incrémenter le numéro d'instruction à traiter.
Remarque : le PCR [“Program Counter Register”4] est le registre B
Rappel : notre micro architecture
Interpréteur de langage machine
# | Micro instructions | Explications |
0 | B -> MAR; MM0 -> MDR; MPC+1 -> MPC; | « Charge l'instruction suivante »12 Chargement de l'instruction langage machine qui se situe dans la « mémoire principale » (en anglais, “Main Memory”) à l'adresse contenue dans le registre B. |
1 | B + 1 -> B; MPC + MDR (4MSB) -> MPC; | « Décode l'instruction suivante »16 Le MPC pointe vers l'instruction suivante dans la « mémoire principale »13. L'instruction langage machine actuelle est décodée en ajoutant la valeur de l'OPCODE [“operation code”17] (les 4 bits les plus significatifs contenus en MDR sont envoyés en activant le CS21) à l'adresse de la micro instruction en cours (MPC). |
Les instructions 2 -> 12 permettent la traduction de l'OPCODE qui est réalisée par l'instruction 1. Chaque instruction charge en MPC l'adresse en « micro mémoire » (en anglais, “Micro Memory”) de la première micro instruction du micro programme qui correspond à l'instruction langage machine demandée. | ||
2 | 13 -> MPC; | Instruction langage machine : LOAD |
3 | 15 -> MPC; | Instruction langage machine : STORE |
4 | 17 -> MPC; | Instruction langage machine : ADD |
5 | 19 -> MPC; | Instruction langage machine : SUBSTRACT |
6 | 21 -> MPC; | Instruction langage machine : MULTIPLY |
7 | 38 -> MPC; | Instruction langage machine : DIVIDE |
8 | 55 -> MPC; | Instruction langage machine : JUMP |
9 | 56 -> MPC; | Instruction langage machine : JUMPZERO |
10 | 59 -> MPC; | Instruction langage machine : JUMPMSB |
11 | 62 -> MPC; | Instruction langage machine : JUMPSUB |
12 | 65 -> MPC; | Instruction langage machine : RETURN |
13 | MDR -> MAR; MM(MAR) -> MDR; MPC + 1 -> MPC; | Lecture de la valeur à charger, dont l'adresse est fournie par les 12 bits (16 bits - 4 bits de l'OPCODE). Rem : A chaque fois que nous retrouverons "MPC + 1 -> MPC;" cela signifiera un passage à la micro instruction suivante, je ne le signalerais donc pas à chaque fois. |
14 | MDR - > A; 0 -> MPC; | Chargement de la valeur dans le registre A, et retour à la première micro instruction de l'interpréteur (boucle de l'interpréteur). |
15 | MDR - > MAR; MPC + 1 -> MPC; | Positionnement du MAR sur l'adresse dans la « mémoire principale »13 à laquelle la valeur sera mémorisée. Cette adresse est fournie par les 12 bits (16 bits - 4 bits de l'OPCODE) |
16 | A -> MDR; MDR -> MM(MAR); 0 -> MPC; | Mémorisation dans la « mémoire principale »13 de la valeur contenue dans le registre B, et retour à la première micro instruction de l'interpréteur. |
17 | MDR -> MAR; MM(MAR) -> MDR; MPC + 1 -> MPC; | Lecture de la valeur à ajouter, dont l'adresse est fournie par les 12 bits (16 bits - 4 bits de l'OPCODE) |
18 | A + MDR - > A; 0 -> MPC; | Ajout de la valeur qui vient d'être lue (MDR) à celle qui se trouve dans le registre A (ACCUMULATEUR), et retour à la première micro instruction de l'interpréteur. Rem : la valeur est donc dans le registre A, mais n'est pas mémorisée dans la « mémoire principale »13 ; c'est le rôle de l'instruction STORE. Cette remarque s'applique aux opérations suivantes. |
19 | MDR -> MAR; MM(MAR) -> MDR; MPC + 1 -> MPC; | Lecture de la valeur à soustraire, dont l'adresse est fournie par les 12 bits (16 bits - 4 bits de l'OPCODE) |
20 | A - MDR -> A; 0 - > MPC; | Valeur contenue dans le registre A, à laquelle on soustrait la valeur contenue dans le MDR (l'activation du CS 7 en phase 1 permet de réaliser bus1-bus2), et retour à la première micro instruction de l'interpréteur. |
21 | Première micro instruction de l'instruction langage machine MULTIPLY | |
… | ||
38 | Première micro instruction de l'instruction langage machine DIVIDE | |
… | ||
55 | MDR -> B; 0 -> MPC; | Chargement de la valeur dans le registre B, et retour à la première micro instruction de l'interpréteur. Cette valeur correspond à l'adresse de la prochaine instruction langage machine à exécuter. |
56 | MPC + TESTZERO -> MPC; | Lecture de l'adresse de la micro instruction en cours, et application de la condition sur la valeur contenue dans le registre A. Si la valeur contenue dans A est égale à 0, la micro instruction située à l'adresse qui suit directement (57) est exécutée, sinon on passe à la micro instruction suivante (58). |
57 | MDR -> B; 0 -> MPC; | La valeur contenue dans le registre A est égale à zéro. Retour à la première micro instruction de l'interpréteur, mais une nouvelle adresse d'instruction langage machine (dans la « mémoire principale »13) est chargée dans le registre B. Nous avons un JUMPZERO. |
58 | 0 -> MPC; | La valeur contenue dans le registre A est différente de zéro. Retour à la première micro instruction de l'interpréteur, qui fera le décodage de l'instruction langage machine suivante (dans la « mémoire principale »13). Le cours des instructions langage machine n'est pas modifié, nous n'avons donc pas de JUMP. |
59 | MPC + TESTNEG -> MPC; | Lecture de l'adresse de la micro instruction en cours, et application de la condition sur les bits contenus dans le registre A. Si le MSB [“Most Significant Bit”14] des bits du registre A est à 1, la micro instruction située à l'adresse qui suit directement (60) est exécutée, sinon on passe à la micro instruction suivante (61). |
60 | MDR -> B; 0 -> MPC; | Le MSB [“Most Significant Bit”14] des bits du registre A est à 1. Retour à la première micro instruction de l'interpréteur, mais une nouvelle adresse d'instruction langage machine (dans la « mémoire principale »13) est chargée dans le registre B. Nous avons un JUMPMSB. |
61 | 0 -> MPC; | Le MSB [“Most Significant Bit”14] des bits du registre A est à zéro. Retour à la première micro instruction de l'interpréteur, qui fera le décodage de l'instruction langage machine suivante (dans la « mémoire principale »13). Le cours des instructions langage machine n'est pas modifié, nous n'avons donc pas de JUMP. |
62 | MDR -> MAR -> C; MPC + 1 -> MPC; | Chargement dans le registre C de l'adresse de l'instruction langage machine à exécuter, et déplacement du pointeur (MAR) vers un emplacement de la « mémoire principale »13 dans lequel il faudra enregistrer l'adresse de l'instruction langage machine actuelle. |
63 | B -> MDR; MDR -> MM(MAR); MPC + 1 -> MPC; | L'adresse de l'instruction langage machine en cours (contenue dans le registre B) est mémorisée dans la « mémoire principale »13. Le programme y fera appel au moment de la sortie du module qui va être exécuté, pour reprendre le cours normal de sa séquence d'exécutions. |
64 | C + 1 -> B; 0 -> MPC; | L'adresse de la première instruction langage machine du module est chargée dans le registre B. Ce sera donc cette instruction du module (sub) qui sera exécutée. Nous avons un JUMPSUB. |
65 | MDR -> MAR; MM(MAR) -> MDR; MPC + 1 -> MPC; | Lecture de la valeur (adresse de retour), dont l'adresse est fournie par les 12 bits (16 bits - 4 bits de lOPCODE). |
66 | MDR -> B; 0 -> MPC; | Chargement de la valeur dans le registre B, et retour à la première micro instruction de l'interpréteur. Cette valeur correspond à l'adresse de la prochaine instruction langage machine à exécuter. Nous avons donc un retour après un JUMP. |
Exemple de décodage
L'OPCODE de l'instruction LOAD est 0001.
MPC + MDR 1 22 + 0001 (0010)2 ou (2)10
A l'adresse 2 dans la “Micro Memory”19, nous trouvons l'instruction de l'intérpreteur langage machine qui pointe vers l'adresse 13.
A l'adresse 13 dans la “Micro Memory”19 nous trouvons la première instruction du micro programme qui correspond à l'action LOAD.
Version en cache
21/11/2024 09:55:03 Cette version de la page est en cache (à la date du 21/11/2024 09:55:03) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 09/03/2005, dernière modification le 31/10/2018
Source du document imprimé : https://www.gaudry.be/langage-machine-interpreteur.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
- ↑ charger : correspond à “fetch” en anglais
- ↑ décoder : correspond à “decode” en anglais
- ↑ exécuter : correspond à “execute” en anglais
- ↑a,b,c,d,e,f… 9 en plus… Memory Address Register : correspond à « registre d'adresse de la mémoire » en français
- ↑a,b,c,d,e,f… 9 en plus… MAR : “Memory Address Register” (en français, « registre d'adresse de la mémoire ») Plus d'informations sur la page dédiée aux registres MAR.
- ↑a,b,c,d,e,f… 44 en plus… Micro Program Counter : correspond à « registre compteur ordinal » en français
- ↑a,b,c,d,e,f… 44 en plus… MPC : “Micro Program Counter” (en français, « registre compteur ordinal ») Plus d'informations sur la page dédiée aux registres MPC.
- ↑ Charge l'instruction suivante : correspond à “Fetch next instruction” en anglais
- ↑a,b,c,d,e,f… 1 en plus… Most Significant Bit : correspond à « bit de poids significatif » en français
- ↑ Décode l'instruction suivante : correspond à “Counter + 1 and decode instruction” en anglais
- ↑ Control Signals : correspond à « signaux de contrôle » en français
- ↑ MDR->1 : Le décodage se fait par la micro instruction située à l'adresse 1 dans la Micro Memory