Assembleur
Séances
- Mach 04 Langage assembleur
- Mach 05 Constructions élémentaires
- Mach 06 Exercices assembleur
Le processeur n’interprète que des signaux électriques représentés par:
On parle de langage binaire. Il est difficile pour l’Homme d’écrire un programme directement en binaire. On utilise alors des symboles mnémoniques qui représentent une instruction compréhensible par le CPU.
Le processeur peut:
Le code suivant ajoute $3+57$ et garde le résultat dans le registre R0.
ADD R0,#3,#57
HALTEn informatique, une instruction:
Le processeur ne peut manipuler que des nombres situés dans les registres (mémoires très rapides, avec des fréquences de fonctionnement similaires au processeur). Pour manipuler des données dans la mémoire vive, il faut d’abord les placer dans les registres.
Pour charger la valeur située à l’emplacement 36 de la mémoire:
LDR R0,36Chaque processeur possède son propre jeu d’instructions. Il n’est pas possible de les connaître par cœur. La documentation est donc un outil indispensable pour le programmeur.
Les instructions ne sont pas à connaître par cœur. Il faut par contre savoir lire la documentation.
Charger une entrée clavier (un nombre) dans R0
LDR R0, .InputNumAfficher dans la console de sortie
STR R2, .WriteUnsignedNumRéférencer un mot mémoire avec une étiquette
LDR R0, monage
HALT
monage: 25MOV R0, #10
MOV R1, #10
// Compare les valeurs de R0 et R1
CMP R0, R1
// Si les valeurs sont égales, saute à la ligne compegal
BEQ compegal
MOV R2, R0
HALT
labelegal:
STR R0, mavaleur
HALT
mavaleur: 5 MOV R11,#0 //initialise compteur
boucle:
ADD R11,R11,#1 //incrémente compteur
CMP R11,#3 //vérifie fin de la boucle
BNE boucle
HALT //sortie de la boucleÉcrire un programme qui:
Écrire un programme qui:
MOV R2,#question
STR R2, .WriteString
LDR R1,.InputNum
CMP R1,#18
BLT moins
MOV R2,#texteplus
STR R2, .WriteString
HALT
moins:
MOV R2,#textemoins
STR R2, .WriteString
HALT
question:.ASCIZ "Quel est votre âge?"
textemoins: .ASCIZ "Vous êtes mineur."
texteplus: .ASCIZ "Vous êtes majeur."On souhaite écrire un programme qui implémente l’algorithme suivant:
Remettre les instructions suivantes dans l’ordre afin d’implémenter l’algorithme précédent.
largeur:.ASCIZ "Quelle est la largeur?"
STR R1, .WriteString
ADD R4,R2,R2
HALT
longueur: .ASCIZ "Quelle est la longueur?"
MOV R1,#perimetre
STR R4, .WriteUnsignedNum
MOV R1,#largeur
MOV R1,#longueur
STR R1, .WriteString
LDR R3,.InputNum
ADD R4,R4,R3
ADD R4,R4,R3
STR R1, .WriteString
LDR R2,.InputNum
perimetre: .ASCIZ "Le périmètre est: "MOV R0,#16
LSR R1, R0,#1
LSR R2, R0,#2
LSR R3, R0,#3
HALTÉcrire un programme qui :
Remettre les instructions dans l’ordre, afin de réaliser le programme.
HALT
boucle:
BNE boucle
augmentecompteur:
ADD R2,R2,#1
MOV R0,#0 //initialise le compteur
LDR R1,.InputNum
CMP R1,#60
BLT augmentecompteur
ADD R0,R0,#1
CMP R0,#10
STR R2,.WriteUnsignedNum
MOV R2,#0 //initialise le nombre de durée
STR R2,120 Pour faciliter le travail des enseignants, on se propose de construire un programme qui permet de calculer la moyenne des notes d’un élève.
Le programme devra: