Présentation

La machine M99 est un ordinateur en papier dotée de 100 cases mémoire et d’un processeur. On vous offre cet ordinateur à chacun pour ce TD.

Mémoire

La mémoire est composée de 100 mots mémoire de 3 chiffres décimaux (valeur de 000 à 999) et d’un signe. Ces 100 mots mémoire sont adressables par des nombres sur 2 chiffres (de 0 à 99).

Processeur

Le processeur dispose de deux registres généraux (nommés A et B) et d’un registre accumulateur/résultat nommé R. Comme les mots mémoires, ces registres peuvent contenir des nombres signés sur 3 chiffres. Le processeur dispose aussi d’un quatrième registre nommé PC (Program Counter). C’est le pointeur d’instruction, contenant l’adresse mémoire de la prochaine instruction à exécuter. Ce registre ne peut contenir que des nombres décimaux sur 2 chiffres. Enfin il y a un registre nommé IR qui contient le code de l'instruction en cours d'exécution. Il ne peut contenir que des nombres décimaux sur 3 chiffres sans le signe.

L’unité arithmétique et logique UAL est en charge d’effectuer les calculs. Les opérandes et résultats sont dans les registres :

L’unité de commande pilote l’ordinateur. Son cycle de fonctionnement, nommé fetch / decode / execute, comporte 3 étapes :

  1. charger l’instruction depuis la case mémoire pointée par PC vers la zone dédiée dans l’UAL (le registre IR) et incrémenter ensuite le PC ;

  2. décoder l’instruction : à partir des 3 chiffres codant l’instruction, identifier quelle est l’opération à réaliser (vous avez un pense-bête à droite de la machine) ;

  3. exécuter l’instruction.

La machine démarre avec la valeur nulle comme pointeur d’instruction (PC=0). Elle s’arrête si le pointeur d’instruction vaut 99. On peut donc utiliser le mnémonique HLT comme synonyme de JMP 99.

Les entrées/sorties sont mappées en mémoire :

Dans ce TD c’est vous qui jouerez le rôle du processeur (unité de commande et UAL).

Jeu d’instruction

code mnémonique instruction à réaliser
x y STR xy copie le contenu du registre R dans le mot mémoire d’adresse xy
x y LDA xy copie le mot mémoire d’adresse xy dans le registre A
x y LDB xy copie le mot mémoire d’adresse xy dans le registre B
x y MOV x y copie registre x dans y (0 R ; 1 A ; 2 B)
- -
0 0 ADD ajoute les valeurs des registres A et B, produit le résultat dans R
0 1 SUB soustrait la valeur du registre B à celle du registre A, produit le résultat dans R
x y JMP x y branche en xy (PC reçoit la valeur xy). JMP 99 provoque l’arrêt de la machine
x y JPP x y branche en xy si la valeur du registre R est positive
x y JEQ x y saute une case (PC += 2) si la valeur du registre R est égale à xy
x y JNE x y saute une case (PC += 2) si la valeur du registre R est différent de xy

Exercices

Exercice 1 : Prise en main

Décodez (directement sur les cases mémoire de votre ordinateur) le programme chargé de l’adresse 0 à l’adresse 11.

En appliquant le cycle de commande jusqu’à un arrêt, expliquez ce que fait ce programme.

Décodez le programme débutant à l’adresse 13 puis essayer d’expliquez ce qu’il fait.

Écrivez un programme (en utilisant les mnémoniques) affichant le maximum de deux nombres saisis au clavier.

Codez votre programme. À quelle adresse mémoire pouvez-le stocker ?

Exercice 2 : Assembleur et compilateur

Que fait le programme débutant à l’adresse 40 (pour les entrées 5 et 2) ?

Peut-on le raccourcir ?

Corrigez ce programme quand la seconde entrée vaut 0.

Lien à l’informatique

Le M99 est un ordinateur en papier, assez simple à utiliser avec seulement un crayon, mais il a été pensé pour être relativement réaliste des vrais ordinateurs.