Vous êtes sur la page 1sur 3

Exercices Langage assembleur

Le langage machine est le langage natif du processeur et le seul qui soit reconnu par celui-ci. Un
processeur ne peut comprendre un langage rentré par l’utilisateur, un programme python ou java par
exemple. Entre les langages que l’on connait et que l’on implante et le langage machine, il existe des langages
intermédiaires et notamment le langage assembleur qui est le langage de plus bas niveau qu’un
humain peut encore appréhender et que le processeur sait traduire en langage machine. Il existe plusieurs
langages assembleurs. On va travailler avec un simulateur et donc de fait utiliser sa syntaxe.
En langage assembleur, on peut rencontrer des calculs simples (addition, soustraction, multiplication), des
affectations (placer telle valeur de la mémoire vive dans tel registre et vice versa) et enfin des instructions de
saut qui permettent de coder des instructions conditionnelles par exemple. Il y a trois possibilités pour accéder
à un opérande (valeur sur laquelle va être opérée une opération) :
• Il est directement saisi
• Il est dans un registre : il faut alors indiquer le nom de ce registre
• Il est dans la mémoire vive : il faut indiquer son adresse.

Syntaxe du langage adapté à ce processeur :


Syntaxe du langage adapté à ce processeur :
syntaxe signification syntaxe signification syntaxe signification
ADD Addition LDR Affectation INP Saisie en entrée au clavier
SUB Soustraction STR Affectation OUT Affichage en sortie

MOV Affectation dans un registre B Aller à HALT Fin du programme

Comparaison :
CMP Comparaison CMP R0 , #10 : compare 10 et la valeur du registre R0 puis…
BEQ BEQ 20 : Va à l’adresse 20 en mémoire si R0 =10
BNE BNE 20 : Va à l’adresse 20 en mémoire si R0 ≠10
BGT BGT 20 : Va à l’adresse 20 en mémoire si R0 >10
BLT BLT 20 : Va à l’adresse 20 en mémoire si R0 <10
Remarque : Pour les instructions de saut, on donnera un Label et non un nombre.
Exemple : BEQ test.... Si l’égalité est vraie, le programme sautera les lignes jusqu’à rencontrer dans le
programme le mot test: (Attention : les 2 points doivent être collés au mot test dans la syntaxe).

Exemples d’instruction commentée:


MOV R0, #17 Affecte la valeur 17 au registre R0
ADD R1 , R0, #18 Ajoute 18 à la valeur du registre R0 et stocke le résultat dans R1
LDR R0, 20 Lit la valeur stockée à l’adresse mémoire 20 et stocke la dans le registre R0
STR R0, 20 stocke la valeur du registre R0 à l’adresse mémoire 20
INP R0, 2 Place la valeur entrée au clavier dans le registre R0 (2 : codage entier naturel)
OUT R0, 4 Affiche en sortie la valeur stockée dans le registre R0 (4 : codage entier signé, 7 :
encodage caractère)

Vous pouvez tester vos programmes assembleur dans le simulateur à l’adresse suivante :
http://www.peterhigginson.co.uk/AQA/
Exercice 1 : Quelques instructions de base
Ecrire en langage assembleur les instructions suivantes :
• Affecter la valeur 5 au registre R2 MOV R2, #5
• Additionner 20 avec la valeur du registre R2 et stocker le résultat à l’adresse mémoire ADD R2,R2,#20
• Placer la valeur stockée à l’adresse mémoire 30 dans le registre R1, lui soustraire 10 et affecter le STR R2,30
résultat à l’adresse mémoire 31. LDR R1,30
SUB R1,R1 #10
Exercice 2 : un calcul simple STR R1,31

Voici une suite d’instruction :


MOV R0, #4 Charger la valeur 4 dans le registre R0
STR R0, 30 Stocker la valeur de R0 à l’adresse mémoire 30
MOV R0, #8 Remplacer la valeur dans R0 par huit
STR R0, 31 Stocker la valeur de RO à l’adresse mémoire 31
LDR R0, 30 Changer la valeur stockée à l’adresse 30 dans R. O.
LDR R1, 31 Charge
SUB R2, R0, R1
STR R2, 158
HALT

1. Indiquer la signification de cette suite d’instructions.


Quel est le contenu de R0, R1 et R2 à la fin des instructions.
2. Proposer un programme en langage python qui traduit le code assembleur précédent.

Exercice 3 : Un calcul simple avec saisie des valeurs au clavier et affichage à l’écran
Voici une suite d’instruction :
INP R0, 2 Place la valeur entre au clavier dans le registre R0
STR R0, 100 Stock la valeur Du registre R0 A l’adresse mémoire 100
INP R1, 2 Place la valeur entrée au clavier dans le registre R1
STR R1, 150 Stock la valeur du registre R1 à l'adresse mémoire 150
ADD R2, R1, R0 Ajouter la valeur du registre R0 a la valeur du registreR1 et
stock dans e registre R2.
OUT R2, 4
HALT Fin
1. Indiquer la signification de cette suite d’instructions.
2. Proposer un programme en langage python qui traduit le code assembleur précédent (après avoir
travaillé l’activité 3.1).

Exercice 4 : Un programme avec une condition niveau débutant


Voici un code en langage python :
x=4
y=8
if x == y :
z=x–4
else :
y=x+y

Compléter le code correspondant en langage assembleur ci-dessous :


MOV R0 ...,#4
STR R0,... 32
MOV R1 ...,#8
STR ...R1,33
LDR ...R0,32
LDR ...R1,33
CMP ...R0,#10
BNE test SUB
...R1,R0
test :
ADD ...
R2,R1,R0
...
HALT

Exercice 5 : Programme avec condition niveau confirmé


Voici une suite d’instructions en langage assembleur :
MOV R0, #4
STR R0, 30
MOV R0, #8
STR R0, 75
CMP R0, #10
BNE test1
B test2
test1:
LDR R0, 30
ADD R0, R0, #1
STR R0, 30
test2:
LDR R0, 75
SUB R0, R0, #2
STR R0, 75
HALT

1. Indiquer la signification de cette suite d’instructions.


2. Proposer un programme en langage python qui traduit le code assembleur précédent.

Vous aimerez peut-être aussi