L'interpréteur langage machine

Sommaire du document

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.

  1. /*
  2.  * Répétition du chargement et exécution de l'interpréteur
  3.  */
  4. interpreter{
  5. charger instruction langage machine suivante;
  6. incré;menter le PCR;
  7. decoder instruction;
  8. executer instruction;
  9. }
  10. }

Remarque : le PCR [“Program Counter Register”[4]] est le registre B

 

Rappel : notre micro architecture

 

Interpréteur de langage machine

Adresse Micro
Memory
Micro instructionsExplications
0B -> MAR;MM0 -> MDR;MPC+1 -> MPC;“Fetch next instruction” (en français, « Charge l'instruction suivante »)
Chargement de l'instruction langage machine qui se situe dans la “Main Memory” (en français, « mémoire principale ») à l'adresse contenue dans le registre B.
1B + 1 -> B; MPC + MDR (4MSB) -> MPC;

“Counter + 1 and decode instruction” (en français, « Décode l'instruction suivante »)Le “Micro Program Counter”[9] [MPC] pointe vers l'instruction suivante dans la “Main Memory”[7].
L'instruction langage machine actuelle est décodée en ajoutant la valeur de l'OPCODE [“operation code”[11]] (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 [“Micro Program Counter”[9]]).

Les instructions 2 -> 12 permettent la traduction de l'OPCODE qui est réalisée par l'instruction 1.
Chaque instruction charge en MPC [“Micro Program Counter”[9]] l'adresse en “Micro Memory” (en français, « micro mémoire ») de la première micro instruction du micro programme qui correspond à l'instruction langage machine demandée.
213 -> MPC;Instruction langage machine : LOAD
315 -> MPC;Instruction langage machine : STORE
417 -> MPC;Instruction langage machine : ADD
519 -> MPC;Instruction langage machine : SUBSTRACT
621 -> MPC;Instruction langage machine : MULTIPLY
738 -> MPC;Instruction langage machine : DIVIDE
855 -> MPC;Instruction langage machine : JUMP
956 -> MPC;Instruction langage machine : JUMPZERO
1059 -> MPC;Instruction langage machine : JUMPMSB
1162 -> MPC;Instruction langage machine : JUMPSUB
1265 -> MPC;Instruction langage machine : RETURN
13MDR -> 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.
14MDR - > 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).
15MDR - > MAR;
MPC + 1 -> MPC;
Positionnement du MAR sur l'adresse dans la “Main Memory”[7] à laquelle la valeur sera mémorisée.
Cette adresse est fournie par les 12 bits (16 bits - 4 bits de l'OPCODE).
16A -> MDR;
MDR -> MM(MAR);
0 -> MPC;
Mémorisation dans la “Main Memory”[7] de la valeur contenue dans le registre B, et retour à la première micro instruction de l'interpréteur.
17MDR -> 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).
18A + 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 “Main Memory”[7] ; c'est le rôle de l'instruction STORE. Cette remarque s'applique aux opérations suivantes.
19MDR -> 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
...  
55MDR -> 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.
56MPC + 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).
57MDR -> 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 “Main Memory”[7]) est chargée dans le registre B. Nous avons un JUMPZERO.
580 -> 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 “Main Memory”[7]). Le cours des instructions langage machine n'est pas modifié, nous n'avons donc pas de JUMP.
59MPC + 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”[20]] 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).
60MDR -> B;
0 -> MPC;
Le MSB 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 “Main Memory”[7]) est chargée dans le registre B. Nous avons un JUMPMSB.
610 -> MPC;Le MSB 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 “Main Memory”[7]). Le cours des instructions langage machine n'est pas modifié, nous n'avons donc pas de JUMP.
62MDR -> 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 “Main Memory”[7] dans lequel il faudra enregistrer l'adresse de l'instruction langage machine actuelle.
63B -> 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 “Main Memory”[7].
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.
64C + 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 l'OPCODE).
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 ->[22] + 0001 -> (0010)2 ou (2)10

A l'adresse 2 dans la “Micro Memory”[15], nous trouvons l'instruction de l'intérpreteur langage machine qui pointe vers l'adresse 13.

A l'adresse 13 dans la “Micro Memory”[15] nous trouvons la première instruction du micro programme qui correspond à l'action LOAD.

 

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Notes

  1.  charger : correspond à “fetch » en anglais

  2.  décoder : correspond à “decode » en anglais

  3.  exécuter : correspond à “execute » en anglais

  4. a,b Program Counter Register : correspond à « registre compteur du programme” en français

  5.  PCR : “Program Counter Register” (en français, « registre compteur du programme »)

  6.  Fetch next instruction : correspond à « Charge l'instruction suivante” en français

  7. a,b,c,d,e,f,g,h,i,j,k Main Memory : correspond à « mémoire principale” en français

  8.  Counter + 1 and decode instruction : correspond à « Décode l'instruction suivante” en français

  9. a,b,c,d,e,f Micro Program Counter : correspond à « compteur d'instruction” en français

  10. a,b,c MPC : “Micro Program Counter” (en français, « compteur d'instruction »)

  11. a,b,c,d,e,f,g,h,i operation code : correspond à « code opération” en français

  12. a,b,c,d,e,f,g,h OPCODE : “operation code” (en français, « code opération »)

  13. a,b,c Memory Data Register : correspond à « registre de mots” en français

  14. a,b,c MDR : “Memory Data Register” (en français, « registre de mots »)

  15. a,b,c Micro Memory : correspond à « micro mémoire” en français

  16. a,b Memory Address Register : correspond à « registre d'adresse de la mémoire” en français

  17. a,b 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.

  18.  Control Signals : correspond à « signaux de contrôle” en français

  19.  CS : “Control Signals” (en français, « signaux de contrôle »)

  20. a,b,c,d Most Significant Bit : correspond à « bit de poids significatif” en français

  21. a,b,c MSB : “Most Significant Bit” (en français, « bit de poids significatif »)

  22.  MDR->1 : Le décodage se fait par la micro instruction située à l'adresse 1 dans la Micro Memory

 

Historique et modifications de la page

  • Mardi 19 Janvier 2010, 03:40 : Prise en charge automatique des acronymes, mots étrangers, et recherche de table de matières.

Liste des images

  1. Exemple d'architecture pour un microprogramme (Référence : infobrol)

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-233
Document créé le 09/03/05 06:14, dernière modification le Vendredi 17 Juin 2011, 12:12
Source du document imprimé : http:///www.gaudry.be/langage-machine-interpreteur.html
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Apparence (afficher)
Stats (afficher)
15838 documents
455 astuces.
550 niouzes.
3107 definitions.
447 membres.
8121 messages.

Document genere en :
0,08 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Je n'ai pas de regrets, seulement des projets.

Alfred Brendel
 
l'infobrol
Nous sommes le Mercredi 24 Mai 2017, 00:30, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)