Informatique Industrielle : TD 3 Programmation en Assembleur
Télécharger PDFTD 3 – Systèmes Informatiques et Assembleur
Exercice 1
On considère le programme en assembleur suivant :
mov AX, 18h mov BX, 35h sub AX, BX div BX mov CX, 3 inc CX mul CX
Donner les valeurs des différents registres (AX, BX, CX et DX) après chaque instruction.
Exercice 2
Écrire un programme en assembleur qui calcule la somme du contenu des deux cases mémoire 1000h et 1010h et qui range le résultat à l’adresse 1020h.
Exercice 3
Écrire un programme en assembleur qui fait la somme du contenu des deux cases mémoire 1000h et 1010h, où le contenu est codé sur 1 octet, puis :
- Si la somme est supérieure à 100, on range le résultat dans la case
1020h. - Sinon, on range le résultat dans la case
1030h.
Exercice 4
On veut additionner deux nombres signés N1 et N2 se trouvant respectivement aux offsets [1100h] et [1101h]. Le résultat doit être rangé :
- À l’adresse
2000hs’il est positif, - À l’adresse
3000hs’il est négatif, - Dans le registre
BXs’il est nul.
Exercice 5
Écrire un programme permettant de calculer le PGCD de deux nombres a et b (entre 0 et 9) introduits par l’utilisateur à partir du clavier en utilisant l’algorithme suivant :
Répéter
C = a / b
r = le reste de cette division entière
Si r ≠ 0
a = b
b = r
fin si
jusqu’à r = 0
pgcd = b
Exercice 6
Écrire un programme permettant de calculer et d’afficher la valeur de 1 + n × x à partir des valeurs de x (entre 0 et 9) et de n (entier ≥ 1) fournies par l’utilisateur via le clavier.
Pour le test, utiliser :
x = 3etn = 4→1 + 4 × 3 = 13,x = 1etn = 6→1 + 6 × 1 = 7.
Exercice 7
Écrire un programme en assembleur qui permet de calculer z = 5 - 3xy, où x et y sont deux données fournies par l’utilisateur via le clavier (avec 0 ≤ x, y ≤ 9).
Le résultat valide de cette fonction doit être tel que 0 ≤ z ≤ 99. Si z est en dehors de cet intervalle, afficher un message indiquant que le résultat est invalide.
Tester avec les valeurs suivantes :
x = -6ety = 3→ Résultat invalide,x = 2ety = 3→z = 9,x = 2ety = 4→ Résultat non valide,x = -7ety = 2→ Résultat invalide.
Exercice 8
Écrire un programme en assembleur qui permet de calculer le factoriel d’un nombre n (avec 0 ≤ n ≤ 9) donné par l’utilisateur via le clavier et d’afficher le résultat sur l’écran.
On rappelle que :
0! = 1,n! = n × (n-1) × ... × 1.
En utilisant le programme déjà écrit, calculer m = 30! - n! et afficher la valeur de m.
Si m ≥ 10, afficher un message indiquant que m ≥ 10. Si m ≤ -10, afficher un message indiquant que m ≤ -10. Sinon, afficher un message indiquant que le résultat est BON.
Tester avec les valeurs suivantes : n = 3, n = 4, n = 5.
FAQ
- Comment gérer les nombres signés en assembleur ?
- Utiliser les instructions
CMP,JGE(pour positif),JL(pour négatif) etJE(pour nul). - Quelle est la différence entre
MOVetLEA? MOVcopie la valeur d’une mémoire ou d’un registre, tandis queLEAcharge l’adresse d’une mémoire dans un registre.- Comment afficher un message d’erreur en assembleur ?
- Utiliser une boucle pour écrire chaque caractère du message via
INT 21havec la fonction02h(écriture d’un caractère).