Exercices

Les exercices précédés du symbole sont à faire sur machine, en sauvegardant le fichier si nécessaire.

Les exercices précédés du symbole doivent être résolus par écrit.

Architecture

Exercice 1 (QCM)


Assembleur

Exercice 2

  1. Expliquez brièvement par une phrase, les instructions suivantes :

    • ADD R0, R1, #42
    • LDR R5,98
    • CMP R4, #18
    • BGT 77
    • STR R0,15
    • B 100
  2. Écrire les instructions en assembleur correspondant aux phrases suivantes :

    • « Additionne la valeur stockée dans le registre R0 et la valeur stockée dans le registre R1, le résultat est stocké dans le registre R5 »
    • « Place la valeur stockée à l’adresse mémoire 878 dans le registre R0 »
    • « Place le contenu du registre R0 en mémoire vive à l’adresse 124 »
    • « La prochaine instruction à exécuter se situe en mémoire vive à l’adresse 478 »
    • « Si la valeur stockée dans le registre R0 est égale 42 alors la prochaine instruction à exécuter se situe à l’adresse mémoire 85 »

Exercice 3

On considère le programme Python donné à la fin du cours et sa traduction en Python.

x = 4
y = 8
if x == 10:
    y = 9
else :
    x=x+1
z=6

et voici maintenant voici son équivalent en assembleur :

Assembleur
MOV R0, #4
STR R0,30
MOV R0, #8
STR R0,75
LDR R0,30
CMP R0, #10
BNE else
MOV R0, #9
STR R0,75
B endif
else:
LDR R0,30
ADD R0, R0, #1
STR R0,30
endif:
MOV R0, #6
STR R0,23
HALT
  1. À quoi sert la ligne B endif ?
  2. À quoi correspondent les adresses mémoires 23, 75 et 30 ?

Exercice 4

Le module dis de Python permet de “désassembler” du code Python, c’est-à-dire d’afficher les instructions machines correspondant à des instructions Python.

  1. En console interactive, entrer les lignes suivantes et interpréter le résultat.

    >>> import dis
    >>> code = """
    a = 5
    a = a + 3
    """
    >>> dis.dis(code)
  2. Recommencer en remplaçant le code analysé par le code de l’exercice précédent. Expliquer les différences entre l’assembleur Python et l’assembleur utilisé dans l’exercice précédent.