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.

Correction série N° 3

Document source

Correction série N° 3

Programming, Math, etc. · PDF · 14 pages · 2015

Afficher l'aperçu du document

Consulter le document original →

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 00008200 dans le registre R2. La valeur lue en RAM est implicitement 0000000F.
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 RAM 00008204 (dont la valeur est 000000FA), et stocker le résultat dans R2.
  • 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'adresse 01E08. 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 (écrite 0 1 2 0 0 0 0 0 dans la mémoire)
  • Code d'instruction : 01
  • Opération : Charger la valeur binaire 00 dans le registre R2.
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 = 00C Puisque 01C > 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 de 1C se 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'interruption 0C : CO = 00000A00 et ME = 0000100C. L'adresse 00000A00 est 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 devient 00008008.
    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'adresse 08208. Le ME est restauré à sa valeur initiale 0F000000 lors 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'adresse 08400. 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 00008008 dans la file d'attente, et lance la routine correspondante avec une reprise à partir de l'adresse 00000F00.
    • Lors de l'interruption 0C : Puisque la routine 1C en cours d'exécution a un IPL supérieur (01C > 00C), le processeur poursuit l'exécution de la routine 1C (reprise à partir de 00000FC8). L'adresse de la routine de l'interruption 0C (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 :

    1. Calcul arithmétique : Le programme effectue l'addition des deux valeurs hexa 0000000F + 000000FA (stockant le résultat 00000109 temporairement).
    2. Réinitialisation : Le programme réinitialise la valeur à 0 (chargement de 00 dans 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 :

    1. 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.
    2. 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).
    3. 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.
    4. Tolérance aux erreurs d'énoncé : Il arrive fréquemment que le code hexadécimal d'une instruction machine (ex: 03 vs F0) 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.

    Partager

    Commentaires

    Aucun commentaire pour le moment. Posez la première question.

    Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

    ← Toutes les révisions