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.
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 09/03/2005, zuletzt geändert 31/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/langage-machine-interpreteur.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
- ↑ charger : entspricht “fetch” en anglais
- ↑ décoder : entspricht “decode” en anglais
- ↑ exécuter : entspricht “execute” en anglais
- ↑a,b,c,d,e,f… 9 weitere Links… Memory Address Register : entspricht « registre d'adresse de la mémoire » en français
- ↑a,b,c,d,e,f… 9 weitere Links… 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 weitere Links… Micro Program Counter : entspricht « registre compteur ordinal » en français
- ↑a,b,c,d,e,f… 44 weitere Links… 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 : entspricht “Fetch next instruction” en anglais
- ↑a,b,c,d,e,f… 1 weitere Links… Most Significant Bit : entspricht « bit de poids significatif » en français
- ↑ Décode l'instruction suivante : entspricht “Counter + 1 and decode instruction” en anglais
- ↑ Control Signals : entspricht « 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