Ignorer la navigation

Simulateur de CPU

Présentation

La page web suivante permet de simuler l'exécution d'un programme en langage machine.

http://www.peterhigginson.co.uk/AQA/

Elle constitué en 3 zones de gauche à droite:

  • La zone où l'on tape le programme assembleur,
  • Le processeur avec ses registres et l'unité de contrôle,
  • La RAM

Exemple d'éxecution

  • Copier dans la zone programme le code ci-dessous:

MOV R0,#22
MOV R2, R0
HALT

  • Valider avec "Submit".
  • Dans le Menu "OPTIONS" choisir "hex".

Les 3 premières cases mémoires de la RAM contiennent les valeurs hexadécimales (code machine) correspondantes aux 3 instructions en assembleur.

  • Cliquer sur STEP pour exécuter MOV R0,#22 (xe3a00016). Rechercher dans la ressource ci-dessous le rôle de cette instruction.
  • L'unité de contrôle a chargé l'instruction en code machine (xe3a00016) , l'a interprété (MOV) et a placé 16(hex) = 22 dans le registre R0.

  • Cliquer sur STEP pour exécuter l'instruction suivante. Rechercher le rôle de l'instruction et vérifier en regardant les valeurs stockées dans les registres.
  • Cliquer sur STEP pour terminer le programme (instruction HALT).

Ressource: instructions assembleur

Instructions

Descriptions

LDR R1,78

Place la valeur stockée à l'adresse mémoire 78 dans le registre R1 (par souci de simplification, nous continuons à utiliser des adresses mémoire codées en base 10)

STR R3,125

Place la valeur stockée dans le registre R3 en mémoire vive à l'adresse 125

ADD R1,R0,#128

 

Additionne le nombre 128 (une valeur immédiate est identifiée grâce au symbole #) et la valeur stockée dans le registre R0, place le résultat dans le registre R1

ADD R0,R1,R2

Additionne la valeur stockée dans le registre R1 et la valeur stockée dans le registre R2, place le résultat dans le registre R0

SUB R1,R0,#128

Soustrait le nombre 128 de la valeur stockée dans le registre R0, place le résultat dans le registre R1

SUB R0,R1,R2

Soustrait la valeur stockée dans le registre R2 de la valeur stockée dans le registre R1, place le résultat dans le registre R0

MOV R1, #23

Place le nombre 23 dans le registre R1

MOV R0, R3

Place la valeur stockée dans le registre R3 dans le registre R0

B 45

Nous avons une structure de rupture de séquence, la prochaine instruction à exécuter se situe en mémoire vive à l'adresse 45

CMP R0, #23

Compare la valeur stockée dans le registre R0 et le nombre 23. Cette instruction CMP doit précéder une instruction de branchement conditionnel BEQ, BNE, BGT, BLT (voir ci-dessous)

CMP R0, R1

Compare la valeur stockée dans le registre R0 et la valeur stockée dans le registre R1.

CMP R0, #23
BEQ 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 est égale à 23

CMP R0, #23
BNE 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 n'est pas égale à 23

CMP R0, #23
BGT 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 est plus grand que 23

CMP R0, #23
BLT 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 est plus petit que 23

HALT

Arrête l'exécution du programme

Ecriture en RAM

  • Copier, simuler et interpréter le programme ci-dessous:

MOV R3, #10
STR R3,125
HALT

  • Quels type d'information (données, instructions) sont véhiculées sur le bus (flèches bleues)
  • Quels type d'information (données, instructions) sont stockées dans la RAM?

Addition

  • Copier, simuler et interpréter le programme ci-dessous:

MOV R3, #10
MOV R2, #01
ADD R1, R2 , R3
STR R1,100
HALT

  • Quel élément du processeur réalise l'addition?

Conditions

  • Copier, simuler et interpréter le programme ci-dessous (respecter les tabulations):
      LDR R0, 130
      CMP R0, #10
      BEQ fin
      MOV R0, #10
      STR R0, 130
fin:
      HALT


Si la variable "donnee" est stockée à l'adresse 130 de la RAM, le programme ci-dessus peut être représenté par l'algorithme suivant:

Si donnee ≠ 10

    alors donnee = 10

  • Simuler avec la valeur 0 stockée à l'adresse 130 de la RAM.
  • Même chose avec 10 à l'adresse 130 de la RAM. 
  • Dans ce deuxième cas, le compteur de programme passe t'il par l'adresse programme 4