Correction série N° 3
Concepts Fondamentaux L'énoncé définit deux structures essentielles avant de commencer la trace : Structure de l'instruction machine : C'est l'ensemble de bits qui définit l'opération à effectuer (le code d'instruction) ainsi que les opérandes (les adresses ou registres cibles).
D'après le document Correction série N° 3
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source
Programming, Math, etc. · PDF · 14 pages · 2015
Afficher l'aperçu du document
Concepts Fondamentaux
L'énoncé définit deux structures essentielles avant de commencer la trace :
- Structure de l'instruction machine : C'est l'ensemble de bits qui définit l'opération à effectuer (le code d'instruction) ainsi que les opérandes (les adresses ou registres cibles).
- Structure du Mot d'État Programme (MEP / ME) : C'est un registre spécifique qui indique le contexte et l'état actuel du programme (ex: mode d'exécution maître ou esclave). Il permet d'identifier la routine à exécuter lors d'une interruption. Deux mots appartenant à la même routine partagent le même MEP.
Question 1 - Configuration initiale du processeur
À l'état initial, le processeur présente la configuration suivante :
- ME (Mot d'État) =
0F000000 - CO (Compteur Ordinal) =
00008000 - Registres (R0 à R3) =
00000000
Analyse de l'état :
Le Compteur Ordinal pointe sur 00008000, ce qui indique l'adresse de démarrage du programme.
Le Mot d'État est 0F000000. Le bit ou quartet de poids fort est à 0, ce qui indique que le mode d'exécution est à 0. Le processeur démarre donc en mode esclave.
Les quatre registres de travail sont initialisés à 0, ils sont donc considérés comme vides.
Question 2 - Trace de l'exécution
Nous allons tracer l'exécution instruction par instruction. La mémoire RAM et l'état du processeur sont mis à jour à chaque étape.
Étape 1 - Adresse 00008000
- Instruction lue :
02 2 08200 - Code d'instruction :
02 - Opération : Copier le mot situé à l'adresse RAM
00008200dans le registreR2. La valeur lue en RAM est implicitement0000000F.
| Processeur | RAM |
|---|---|
| ME = 0F000000 | (Pas de changement) |
| CO = 00008004 | |
| R0 = 00000000 | |
| R1 = 00000000 | |
| R2 = 0000000F | |
| R3 = 00000000 |
Étape 2 - Adresse 00008004
- Instruction lue :
04 2 08204 - Code d'instruction :
04 - Opération : Additionner le contenu du registre
R2(0000000F) avec le mot situé à l'adresse RAM00008204(dont la valeur est000000FA), et stocker le résultat dansR2. - Calcul mathématique : 0000000F + 000000FA = 00000109. (En hexadécimal : F + A = 19, on pose 9 et on retient 1. 0 + F + 1 = 10 en hexadécimal, donc 0 avec une retenue de 1. Résultat = 109).
| Processeur | RAM |
|---|---|
| ME = 0F000000 | (Pas de changement) |
| CO = 00008008 | |
| R0 = 00000000 | |
| R1 = 00000000 | |
| R2 = 00000109 | |
| R3 = 00000000 |
Étape 3 - Interruption 1C et branchement (Adresse 00000F00)
Une interruption de code 1C survient avant l'exécution de l'adresse 00008008.
Le vecteur d'interruption indique que la routine pour 1C possède un MEP de 0000101C (le 1 indique le mode maître, qui est prioritaire) et démarre à l'adresse 00000F00.
Le processeur sauvegarde l'adresse de retour (00008008) dans la file d'attente et bascule sur le nouveau contexte.
- Nouvelle File d'attente :
[ 00008008 ] - Instruction lue (à 00000F00) :
0F 0 01E00 - Code d'instruction :
0F - Opération : Copier le contenu du CO actuel et du MEP dans la RAM à partir de l'adresse
01E00.
| Processeur | RAM |
|---|---|
| ME = 0000101C | @ 01E00 = 00000F00 |
| CO = 00000F04 | @ 01E01 = 0000101C |
| R0 = 00000000 | |
| R1 = 00000000 | |
| R2 = 00000109 | |
| R3 = 00000000 |
Étape 4 - Adresse 00000F04
- Instruction lue :
F0 0 01F08 - Note sur l'énoncé : L'instruction indique l'adresse
01F08, mais la trace mémoire écrite montre un stockage à l'adresse01E08. Nous suivrons les adresses mémoire validées par le tableau de RAM de la source (01E08). - Code d'instruction :
F0 - Opération : Copier le contenu des 4 registres dans la RAM à partir de
01E08.
| Processeur | RAM |
|---|---|
| ME = 0000101C | @ 01E00 = 00000F00 |
| CO = 00000FA0 | @ 01E01 = 0000101C |
| R0 = 00000000 | @ 01E08 = 00000000 |
| R1 = 00000000 | @ 01E09 = 00000000 |
| R2 = 00000109 | @ 01E10 = 00000109 |
| R3 = 00000000 | @ 01E11 = 00000000 |
Étape 5 - Adresse 00000FA0
- Instruction lue :
01 2 00000(écrite0 1 2 0 0 0 0 0dans la mémoire) - Code d'instruction :
01 - Opération : Charger la valeur binaire
00dans le registreR2.
| Processeur | RAM |
|---|---|
| ME = 0000101C | (Idem étape 4) |
| CO = 00000FC4 | |
| R0 = 00000000 | |
| R1 = 00000000 | |
| R2 = 00000000 | |
| R3 = 00000000 |
Étape 6 - Interruption 0C et adresse 00000FC4
Une nouvelle interruption de code 0C survient. Le vecteur indique un MEP de 0000100C (mode maître) et une adresse de routine à 00000A00.
Le processeur doit comparer la priorité (IPL) de l'interruption en cours (1C) avec la nouvelle (0C) :
-
IPL de 1C =
01C -
IPL de 0C =
00CPuisque01C>00C, la routine actuelle (1C) est plus prioritaire. L'adresse de la nouvelle routine (00000A00) est donc placée en tête de la file d'attente, et l'exécution de1Cse poursuit. -
Nouvelle File d'attente :
[ 00000A00, 00008008 ] -
Instruction lue (à 00000FC4) :
F1 0 01E08 -
Code d'instruction :
F1
Opération : "Charger le contenu des 4 registres dans 01E08". Concrètement, cette opération sauvegarde les registres actuels en écrasant l'ancienne sauvegarde RAM. Puisque R2 vaut maintenant 00000000, la valeur en RAM à l'adresse 01E10 devient 00000000.
| Processeur | RAM |
|---|---|
| ME = 0000101C | @ 01E00 = 00000F00 |
| CO = 00000FC8 | @ 01E01 = 0000101C |
| R0 = 00000000 | @ 01E08 = 00000000 |
| R1 = 00000000 | @ 01E09 = 00000000 |
| R2 = 00000000 | @ 01E10 = 00000000 |
| R3 = 00000000 | @ 01E11 = 00000000 |
Étape 7 - Adresse 00000FC8 et basculement de contexte
-
Instruction lue :
1F 0 01E00 -
Code d'instruction :
1F -
Opération textuelle : "Charger le contenu du CO & MEP à partir de l'adresse 01E00".
-
Correction logique selon la trace : Bien que le texte mentionne l'adresse
01E00, le comportement du processeur est de dépiler le contexte depuis la file d'attente pour exécuter l'interruption en attente. Le processeur charge donc le contexte de l'interruption0C:CO = 00000A00etME = 0000100C. L'adresse00000A00est retirée de la file. -
File d'attente restante :
[ 00008008 ]
| Processeur | RAM |
|---|---|
| ME = 0000100C | (Idem étape 6) |
| CO = 00000A00 | |
| R0 = 00000000 | |
| R1 = 00000000 | |
| R2 = 00000000 | |
| R3 = 00000000 |
Étape 8 - Adresse 00000A00
- Instruction lue :
0F 0 01E00 - Code d'instruction :
0F - Opération : Copier le contenu du CO et du MEP actuels dans la RAM à partir de l'adresse
01E00. Cela écrase l'ancienne sauvegarde. - Note de la source : L'état suivant fixe étrangement le CO à
00000000. Nous reproduisons fidèlement l'état indiqué.
| Processeur | RAM |
|---|---|
| ME = 0000100C | @ 01E00 = 00000A00 |
| CO = 00000000 | @ 01E01 = 0000100C |
| R0 = 00000000 | @ 01E08 = 00000000 |
| R1 = 00000000 | @ 01E09 = 00000000 |
| R2 = 00000000 | @ 01E10 = 00000000 |
| R3 = 00000000 | @ 01E11 = 00000000 |
Étape 9 - Adresse 00000000 et retour au programme principal
- Instruction lue :
F0 0 04E08 - Code d'instruction :
F0 - Opération textuelle : Copier le contenu des 4 registres à partir de l'adresse
01E08. - Résultat observé : Le processeur termine les routines d'interruption et dépile le dernier élément de la file d'attente (
00008008) pour reprendre l'exécution du programme principal. Le CO devient00008008.
| Processeur | RAM |
|---|---|
| ME = 0000100C | (Idem étape 8) |
| CO = 00008008 | |
| R0 = 00000000 | |
| R1 = 00000000 | |
| R2 = 00000000 | |
| R3 = 00000000 |
Étape 10 - Adresse 00008008
- Instruction lue :
03 2 08208 - Note sur l'énoncé : L'énoncé indique textuellement "Code d'instruction numéro F0". C'est une erreur de transcription dans le document source, l'instruction machine lue est bien
03. - Opération : Copier le mot de
R2(00000000) dans la RAM à l'adresse08208. Le ME est restauré à sa valeur initiale0F000000lors du retour.
| Processeur | RAM |
|---|---|
| ME = 0F000000 | @ 01E00 = 00000A00 |
| CO = 0000800C | @ 01E01 = 0000100C |
| R0 = 00000000 | @ 01E08 à @ 01E11 = 00000000 |
| R1 = 00000000 | @ 08208 = 00000000 |
| R2 = 00000000 | |
| R3 = 00000000 |
Étape 11 - Adresse 0000800C
- Instruction lue :
1F 0 08400 - Code d'instruction :
1F - Opération : Charger (sauvegarder en fin de programme) le CO (
0000800C) et le MEP (0F000000) dans la mémoire RAM à partir de l'adresse08400. L'exécution s'arrête ici et le CO devient vide.
| Processeur | RAM |
|---|---|
| ME = 0F000000 | @ 08208 = 00000000 |
| CO = (Vide) | @ 08400 = 0000800C |
| R0 = 00000000 | @ 08401 = 0F000000 |
| R1 = 00000000 | |
| R2 = 00000000 | |
| R3 = 00000000 |
Question 3 - Réactions lors des interruptions
La gestion des interruptions est régie par leur niveau de priorité (IPL) et le contenu de la file d'attente :
- Lors de l'interruption 1C : Le processeur met en pause l'exécution du programme principal, place l'adresse de retour
00008008dans la file d'attente, et lance la routine correspondante avec une reprise à partir de l'adresse00000F00. - Lors de l'interruption 0C : Puisque la routine
1Cen cours d'exécution a un IPL supérieur (01C>00C), le processeur poursuit l'exécution de la routine1C(reprise à partir de00000FC8). L'adresse de la routine de l'interruption0C(00000A00) est placée en tête de la file d'attente pour être exécutée ultérieurement.
Question 4 - Traitement global réalisé
Le traitement réalisé par ce programme consiste en deux étapes logiques majeures :
- Calcul arithmétique : Le programme effectue l'addition des deux valeurs hexa
0000000F + 000000FA(stockant le résultat00000109temporairement). - Réinitialisation : Le programme réinitialise la valeur à
0(chargement de00dans R2), l'écrit en mémoire pour écraser le résultat, et sauvegarde le contexte final avant de terminer.
Méthode
Pour réussir ce type d'exercice de trace processeur, la rigueur dans le suivi des états est primordiale :
- Tenir les registres à jour : À chaque instruction, réécrivez l'état complet du processeur (CO, ME, R0-R3). Ne supposez jamais qu'une valeur est restée identique si une instruction d'écriture a eu lieu.
- Gérer la file d'attente : Les interruptions imposent de gérer rigoureusement une structure de type pile ou file d'attente. Mémorisez précisément les adresses de retour (la valeur du CO au moment où l'interruption "coupe" le programme).
- Comparer les priorités (IPL) : Avant de dérouter le CO vers une nouvelle adresse d'interruption, vérifiez toujours si son IPL est supérieur au mode de fonctionnement actuel indiqué dans le Mot d'État Programme.
- Tolérance aux erreurs d'énoncé : Il arrive fréquemment que le code hexadécimal d'une instruction machine (ex:
03vsF0) diffère de sa retranscription textuelle. Suivez prioritairement la logique des adresses mémoire (le flux du CO) et les résultats de l'état du processeur fournis par la correction pour reconstruire la véritable intention du concepteur de l'examen.
Commentaires
Aucun commentaire pour le moment. Posez la première question.