Chapitre 1 2023-2024
Correction des exercices Newbie
Exercice 3 :
On considère le programme en assembleur suivant :
LOAD X
SUB Z
STORE W
LOAD X
SUB Y
MUL #100
DIV W
STORE W
HALT
Exécuter le programme avec les valeurs suivantes des adresses mémoire X, Y et Z : 10, 15 et 20
Pour le programme en assembleur suivant :
LOAD X
SUB Z
STORE W
LOAD X
SUB Y
MUL #100
DIV W
STORE W
HALT
Exécuter le programme avec les valeurs suivantes des adresses mémoire X, Y et Z : 10, 15 et 20
Le programme en assembleur effectue une série d'opérations arithmétiques simples en utilisant les
valeurs stockées dans les adresses mémoire X, Y et Z, puis stocke le résultat dans l'adresse mémoire
W.
LOAD X : Cette instruction charge la valeur de l'adresse mémoire X (10) dans un registre temporaire.
SUB Z : Cette instruction soustrait la valeur de l'adresse mémoire Z (20) à partir du registre
temporaire. Le registre temporaire contient maintenant la valeur 10 - 20 = -10.
STORE W : Cette instruction stocke la valeur actuelle du registre temporaire (qui est -10) dans
l'adresse mémoire W. Après cette étape, l'adresse mémoire W contient -10.
LOAD X : Cette instruction charge à nouveau la valeur de l'adresse mémoire X (10) dans le registre
temporaire, écrasant la valeur précédente.
SUB Y : Cette instruction soustrait la valeur de l'adresse mémoire Y (15) à partir du registre
temporaire. Le registre temporaire contient maintenant 10 - 15 = -5.
Mme Gharbi Nadia Page 1
Chapitre 1 2023-2024
MUL #100 : Cette instruction multiplie la valeur actuelle du registre temporaire (-5) par 100. Le
registre temporaire contient maintenant -5 * 100 = -500.
DIV W : Cette instruction divise la valeur actuelle du registre temporaire (-500) par la valeur de
l'adresse mémoire W (-10). Le registre temporaire contient maintenant -500 / -10 = 50.
STORE W : Cette instruction stocke la valeur actuelle du registre temporaire (50) dans l'adresse
mémoire W. Après cette étape, l'adresse mémoire W contient 50.
HALT : Cette instruction met fin à l'exécution du programme.
Après l'exécution complète du programme, l'adresse mémoire W contient la valeur 50.
Exercice 4 :
0 JMP 0
Le programme exécute l’instruction JMP 0, qui est à l’adresse 0. Il exécute donc cette instruction
indéfiniment. Si une boucle de ce genre se retrouve dans un programme, on n’a en général pas d’autre
choix que de redémarrer l’ordinateur.
Exercice 5 :
LOAD X
STORE Z ; mettre la valeur de X dans Z
LOAD Y
STORE X ; mettre la valeur de Y dans X
LOAD Z
STORE Y ; mettre la valeur de Z dans Y
HALT
Exercice 6 :
LOAD X
DIV #2
MUL #2
CMP X
JMZ a ; Saut à l'adresse a si X est nul
LOAD #1 ; Charger 1
JMP b
a: LOAD #0 ; Charger 0
b: STORE Y
HALT
Ce programme en assembleur effectue une séquence d'opérations arithmétiques et de contrôle de
flux en utilisant les valeurs stockées dans les adresses mémoire X et Y, ainsi que des comparaisons
conditionnelles.
LOAD X : Cette instruction charge la valeur de l'adresse mémoire X dans un registre temporaire.
DIV #2 : Cette instruction divise la valeur du registre temporaire par 2.
MUL #2 : Ensuite, cette instruction multiplie la valeur du registre temporaire par 2. En conséquence,
cette séquence de division et de multiplication annule essentiellement l'effet de la division, et le
registre temporaire retrouve sa valeur d'origine.
Mme Gharbi Nadia Page 2
Chapitre 1 2023-2024
CMP X : Cette instruction compare la valeur actuelle du registre temporaire à la valeur de l'adresse
mémoire X. Elle ne modifie pas la valeur du registre, mais définit les indicateurs de drapeau (flags)
appropriés en fonction du résultat de la comparaison.
JMZ a : Si la comparaison précédente montre que X est égal à zéro (les indicateurs de drapeau
indiquent l'égalité), le programme effectuera un saut à l'étiquette "a". Sinon, il continue à
l'instruction suivante.
LOAD #1 : Si X n'est pas égal à zéro (basé sur la comparaison précédente), cette instruction charge la
valeur 1 dans le registre temporaire.
JMP b : Ensuite, le programme effectue un saut inconditionnel à l'étiquette "b", ce qui signifie qu'il
ignore l'instruction suivante (LOAD #0) et passe directement à l'étiquette "b".
a: LOAD #0 : Cette étiquette est atteinte uniquement si X était égal à zéro. Dans ce cas, cette
instruction charge la valeur 0 dans le registre temporaire.
b: STORE Y : Après le saut conditionnel ou inconditionnel, le programme arrive à l'étiquette "b".
Quelle que soit la valeur chargée dans le registre temporaire (0 ou 1), cette valeur est stockée dans
l'adresse mémoire Y.
HALT : Enfin, le programme se termine par l'instruction HALT, mettant fin à l'exécution.
En résumé, ce programme charge la valeur de X dans un registre temporaire, effectue une
comparaison pour voir si X est nul, et en fonction de cette comparaison, il charge soit 0 soit 1 dans le
registre temporaire, puis stocke cette valeur dans Y. Le résultat final dépend de la valeur initiale de X.
Si X est nul, Y sera mis à 0, sinon Y sera mis à 1.
Exercice 7 :
LOAD X
CMP Y ; comparer X et Y
JMPN ymax ; aller à ymax si X < Y
LOAD X
STORE W ; ranger X dans W
JMP suite
ymax: LOAD Y
STORE W ; ranger Y dans W
suite: CMP Z ; comparer le max de X et Y à Z
JMPP fin ; si max(X, Y) > Z on a fini
LOAD Z
STORE W ; ranger Z dans W
fin: HALT
Ce programme en assembleur compare les valeurs stockées dans les adresses mémoire X, Y et Z, puis
stocke le maximum de ces valeurs dans l'adresse mémoire W.
LOAD X : Cette instruction charge la valeur de l'adresse mémoire X dans un registre temporaire.
CMP Y : Cette instruction compare la valeur actuelle du registre temporaire (qui contient la valeur de
X) avec la valeur de l'adresse mémoire Y. Elle définit les indicateurs de drapeau appropriés en
fonction du résultat de la comparaison.
Mme Gharbi Nadia Page 3
Chapitre 1 2023-2024
JMPN ymax : Si la comparaison précédente indique que X est strictement inférieur à Y (indicateur de
drapeau "N" signifie "négatif"), le programme effectue un saut à l'étiquette "ymax". Sinon, il continue
à l'instruction suivante.
LOAD X : Si X n'est pas strictement inférieur à Y (basé sur la comparaison précédente), cette
instruction charge à nouveau la valeur de l'adresse mémoire X dans le registre temporaire.
STORE W : Cette instruction stocke la valeur actuelle du registre temporaire (qui est soit la valeur de
X, soit celle de Y, en fonction de la comparaison précédente) dans l'adresse mémoire W.
JMP suite : Le programme effectue ensuite un saut inconditionnel à l'étiquette "suite", passant ainsi à
la prochaine étape.
ymax: LOAD Y : Si X était strictement inférieur à Y (indiqué par le saut à l'étiquette "ymax"), cette
étiquette est atteinte. Elle charge la valeur de l'adresse mémoire Y dans le registre temporaire.
STORE W : Cette instruction stocke la valeur de Y (le maximum de X et Y) dans l'adresse mémoire W.
suite: CMP Z : Cette instruction compare la valeur actuelle du registre temporaire (qui contient le
maximum de X et Y) avec la valeur de l'adresse mémoire Z. Elle définit les indicateurs de drapeau
appropriés en fonction du résultat de la comparaison.
JMPP fin : Si la comparaison précédente indique que le maximum de X et Y est strictement supérieur
à Z (indicateur de drapeau "P" signifie "positif"), le programme effectue un saut à l'étiquette "fin".
Sinon, il continue à l'instruction suivante.
LOAD Z : Si le maximum de X et Y n'est pas strictement supérieur à Z (basé sur la comparaison
précédente), cette instruction charge la valeur de l'adresse mémoire Z dans le registre temporaire.
STORE W : Enfin, cette instruction stocke la valeur actuelle du registre temporaire (qui est soit le
maximum de X et Y, soit Z, en fonction de la comparaison précédente) dans l'adresse mémoire W.
fin: HALT : Le programme se termine par l'instruction HALT, mettant fin à l'exécution.
En résumé, ce programme détermine le maximum entre X et Y, stocke ce maximum dans W, puis
compare ce maximum à Z et met à jour W en conséquence. Le résultat final dans W dépendra des
valeurs initiales de X, Y et Z.
Mme Gharbi Nadia Page 4