TP Assembleur
TP Assembleur
TP Assembleur
1. Introduction :
Un programme écrit dans un langage de haut niveau (comme Python) éloigné du langage machine (dit
de bas niveau) dépend le moins possible du processeur et du système d’exploitation.
01ebe814063727473747566662e6305f5f43544f525f4c
5f05f5f44544f525f4c4953545f5f05f5f4a43525f4c49
53545f5f05f5f646f5f676c6f62616c5f64746f72735f6
75780636f6d706c657465642e36353331064746f725f69
C’est une suite d’instructions comme 01ebe814, que l’on peut traduire directement de façon plus lisible :
C’est ce qu’on appelle l’assembleur. L’assembleur est donc une représentation du langage machine.
Il y a autant d’assembleurs que de types de processeurs différents.
2. Instructions et assembleur :
Chaque assembleur a son propre jeu d’instructions, qui utilisent des mnémoniques (ADD, MOV ...).
Il y a quatre grands types d’instructions :
Les instructions de Les instructions de Les instructions de Les appels système.
transfert entre registres calcul : saut :
et mémoire : additions, sauts
chargement, multiplications, inconditionnels,
sauvegarde. opérations sauts
logiques, conditionnels,
comparaisons, sauvegarde.
sauvegarde.
3. Programmer en assembleur :
Vous devriez voir apparaitre des nombres comme ci-dessous dans les cellules mémoires 000, 001 et
002 :
L’assembleur a fait son travail, il a converti les 3 lignes de notre programme en instructions machines, la
première instruction machine est stockée à l’adresse mémoire 000 (elle correspond à MOV R0,#42 en
assembleur), la deuxième à l’adresse 001 (elle correspond à STR R0,150 en assembleur) et la
troisième à l’adresse 002 (elle correspond à HALT en assembleur).
Pour avoir une idée des véritables instructions machines, vous devez repasser à un affichage en
binaire. Vous devriez obtenir ceci :
Repassez à un affichage en base 10 afin de faciliter la lecture des données présentes en mémoire.
Pour exécuter notre programme, il suffit maintenant de cliquer sur le bouton . Vous allez voir le
CPU travailler en direct grâce à de petites animations.
Si cela va trop vite (ou trop doucement), vous pouvez régler la vitesse de simulation à l’aide des
boutons << >>.
ATTENTION : pour relancer la simulation, il est nécessaire d’appuyer sur le bouton afin de
remettre les registres R0 à R12 à 0, ainsi que le registre PC (il faut que l’unité de commande pointe de
nouveau sur l’instruction située à l’adresse mémoire 000).
La mémoire n’est pas modifiée par un appui sur le bouton , pour remettre la mémoire à 0, il faut
Programme 2 : Modifiez le programme précédent pour qu’à la fin de l’exécution on trouve le nombre 54
à l’adresse mémoire 50. On utilisera le registre R1 à la place du registre R0. Testez vos modifications
en exécutant la simulation.
Programme 3 : Faites en sorte que dans la mémoire 100, il y ait le résultat de la somme de 42 et 54.
L’instruction pour effectuer une addition est : ADD R2,R0,R1 (place dans R2 le résultat de R0+R1)
Programme 4 : Additionner les 3 nombres 50, 42 et 54, en n’utilisant que les deux registres R0 et R1.
n° Instruction Commentaire
0 MOV R0,#2 On place le nombre 2 dans le registre R0
1 MOV R1,#1 On place le nombre 1 dans le registre R1 (ce sera le compteur de boucle)
2 B maboucle B signifie « Branch » et maboucle est un label ou étiquette
maboucle: B maboucle renvoie l’exécution à maboucle :
3 ADD R0,R0,R0 On stocke dans R0 le résultat de l’addition de R0 avec R0
4 ADD R1,R1,#1 On stocke dans R1 le résultat de l’addition de R1 avec 1 : on incrémente le compteur
de 1
5 CMP R1,#5 On compare R1 avec 5 (CMP – comparaison)
6 BNE maboucle S’ils ne sont pas égaux (NE – not equal), on relance maboucle
7 STR R0,100 On stocke le résultat dans la mémoire 100
8 HALT On stoppe le programme
0 MOV R0, #2
1 MOV R1, #1
2 B maboucle
maboucle:
3 ADD R0,R0,R0
Votre réponse ici : 4 ADD R1,R1,#1
5 CMP R1,#10
6 BNE maboucle
7 STR R0, 100
8 HALT