Exercices assembleur
ArchMat 06
Information
- Ces exercices sont à réaliser en autonomie.
- Écrire d’abord les programmes sur papier, puis utiliser le simulateur https://tinyurl.com/simordi
- La correction est fournie.
Exercice 1
Écrire un programme qui:
- stocke deux entiers dans la mémoire vive avec les labels val1 et val2,
- échange ses deux valeurs.
Exercice 2
Écrire un programme qui:
- stocke dans la mémoire vive les coordonnées $x=5$ et $y=4$ d’un personnage dans un jeu.
- modifie chaque coordonnée de 3 unités.
Exercice 3
- Décrire le rôle de ce programme. Il faudra décrire le déroulé des instructions, mais également donner le rôle général du programme.
- Tester le programme dans le simulateur. Proposer deux tests possibles afin de vérifier tous les cas de figure.
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."
Exercice 4
On souhaite écrire un programme qui implémente l’algorithme suivant:
- Demander la largeur du rectangle.
- Demander la longueur du rectangle.
- Calculer le périmètre du rectangle.
- Afficher le périmètre du rectangle.
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: "
Exercice 5
Écrire un programme qui :
- demande un nombre à l’utilisateur parmi les puissances de 2 (2, 4, 8, 16, 32, …),
- compte le nombre de fois où on doit diviser ce nombre par 2 pour obtenir 1.
Exercice 6
- On souhaite écrire un programme qui demande à 10 élèves, leur durée du trajet lycée-maison (en minutes) et compte le nombre d’élèves dont le trajet dépasse 60 minutes.
- À la fin le programme affichera ce nombre en sortie.
- Ce nombre devra également être sauvegardé dans la mémoire vive de la machine.
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