Vous êtes sur la page 1sur 5

Université 20 Aout 1955 Skikda License 3ème année Automatique - 2021/2022

Département de Génie électrique Module : Microprocesseur et microcontrôleur

TD 3 : Le microprocesseur 8086-(partie 2)

Exercice 1 :
1. Tracer un organigramme pour calculer la moyenne de 3 nombres A, B et C ?
2. Tracer un organigramme pour calculer la moyenne de 100 nombres X1, X2,…X100 ?

Solution :
1. La moy de 3 nombres :
2 . La moy de 100 nombres :

Début

Initialisation A,
B, C

Moy = (A+B+C)/3

Fin

Exercice 2 :
Réduire le programme suivant au minimum utile :

MOV CX, 03
Solution :
MOV AX, 09
Il faut excuter le programme pas/pas pour
NOP voir le contenue de chaque registre, le
programme devient après réduction:
NOP
MOV CX, 03
NOP
MOV [memory], CX
MOV BX, 01
END
ADD CX, AX

ADD CX, BX

SUB CX, 0A

MOV [memory], CX

END

1
Université 20 Aout 1955 Skikda License 3ème année Automatique - 2021/2022
Département de Génie électrique Module : Microprocesseur et microcontrôleur

Exercice 3 :
Ecrire un programme autour du 8086 pour faire fonctionner le registre AX en :

1. Compteur de 1 à 1000.
2. Compteur de 1 à 100000.
Solution :

1. Compteur 1 à 100 2. Compteur 1 à 100000

MOV AX, 01 Impossible de faire fonctionner le


registre AX comme un compteur de 1
Boucle : INC AX à 100000 parceque :
CMP AX, 1000 AX  16 bits ce qui implique :
JNE Boucle 216 = 65536 << 100000
END

Exercice 4 :
Ecrire un programme autour de 8086 pour calculer la valeur de Y = 2X2 + 3X + 1, sachant que X
est une donnée de 8 bits stockée dans la mémoire d’adresse 4000h, le résultat sera stocker dans
l’adresse 7000h.
Solution :

MOV AL, [4000h]  charger la valeur de X sur AX = X

MUL AL  AX = X2
ADD AX, AX  2X2

MOV DX, AX  DX = 2X2


MOV AL, [4000h]  AL = X
MOV BL, 03  BL = 03

MUL BL  AX = 3X
ADD AX, DX  AX = 2X2 + 3X
INC AX  AX = 2X2 + 3X + 1
MOV [7000h], AX
END

2
Université 20 Aout 1955 Skikda License 3ème année Automatique - 2021/2022
Département de Génie électrique Module : Microprocesseur et microcontrôleur

Exercice 5 :
Ecrire un programme en assembleur 8086 qui fait la somme du contenu des deux cases 1000h et
1010h où le contenu est codées sur 1 octet et 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.
Solution :

 Organigramme  Algorithme
Algorithme Somme
Début
Variables :
A, B, S : Entiers
Lire A, B
S0
Initialisation S  0 Début
S A+ B
S  A+ B Si S > 100 Alors
[1020]  S

NON Sinon
S>100
[1030]  S

Oui FinSi

[1020] S [1030] S Fin

Fin

 Assembleur
MOV AL, [1000h]
MOV BL, [1010h]
ADD AL, BL
CMP AL, 64h
JG Sup
MOV [1030h], AL
JMP Fin
Sup: MOV [1020], AL
Fin: END

3
Université 20 Aout 1955 Skikda License 3ème année Automatique - 2021/2022
Département de Génie électrique Module : Microprocesseur et microcontrôleur

Exercice 6 :
Ecrire un programme qui permet de calculer le PGCD (plus grand commun diviseur) de deux
nombres a et b se trouvant respectivement aux offsets [1000h] et [1001h], en tenant compte de
l’algorithme suivant :
Le PGCD doit ranger dans la case mémoire [1002h].
Algorithme :  Solution :
Répéter MOV AL, [1000h]
C = a/b (r : le reste de cette division) MOV BL, [1010h]
Si r  0 Alors Répéter : DIV BL
ab CMP AH, 0
br JZ Fin
FinSi MOV AL, BL

Jusqu’à r = 0 MOV BL, AH

Pgcd  b MOV AL, 0


JMP Répéter
Fin: MOV [1003], BL
END

Exercice 7 :
On veut additionner deux nombres signés N1 et N2 se trouvant respectivement aux offsets
[1100h] et [1101h]. Le résultat est rangée à l’adresse 2000h s’il est positif, à l’adresse 3000h s’il est
négatif, et dans le registre BX s’il est nul.
Solution : Assembleur

Algorithme Nombre signés MOV AL, [1100h]


Variables MOV BL, [1101h]
N1, N2, S : Entiers
Début JS Nég
S N1+N2 JZ Nul
Si S < 0 Alors
[3000h]S MOV [2000h], AL
Sinon Si S = 0 Alors JMP Fin
BXAL
Sinon Nég: MOV [3000h], AL
[2000h]S JMP Fin
Fin Si
Fin Nul : MOV BX, AL
Fin : END

4
Université 20 Aout 1955 Skikda License 3ème année Automatique - 2021/2022
Département de Génie électrique Module : Microprocesseur et microcontrôleur

Exercice 8 :
Ecrire un programme autour du 8086 pour déclarer les tableaux suivants :
1. TAB de nombres suivants : 1, 3, 8, 7, 9, 100, 13.
2. SAB de nombres suivants : 1000, 300, 50, 700, 90, 1100, 130.
Solution :
L’instruction DB (Define Byte) permet de déclarer un nombre de taille de 8 bits (Byte  octet).
L’instruction DW (Define Word) permet de déclarer un nombre de taille de 16 bits (Word  doubles
octets).

1. TAB
TAB DB 1,3,8,7,9,100,13 ; TAB[0] = 1, TAB[1]=3,… TAB[6]=13
2. SAB
SAB DW 1000,300,50,700,90,1100,130 ; SAB[0] = 1000, SAB[6] = 130

Exercice 9 :
Ecrire un programme qui sera implanté en mémoire à partir de l’adresse 4000h, pour déclarer le
tableau X de nombres suivants : 1,3,5,7,1,5,1 puis déterminer la plus grande valeur de X est
stocker le résultat dans le registre DL.
Solution :
L’algorithme de ce programme est le suivant :

X = [1,3,5,7,1,5,1]  on cherche de déterminer la valeur maximal de ce tableau (Max) qui est 7. Pour cela :

(1) On stock les éléments dans un tableau nommé X de taille Byte.

(2) On suppose que la première case contient le maximum : Max  X(0) puis :

(3) On compare le contenu de la deuxième case avec le Max précédent

(4) Si celui-ci (l’l’élément de la 2ème case) est supérieur, il devient le maximum, pour ce faire on doit
vérifier la condition suivante : Max < X(1)

(5) Si Vrais : Max  X(1)


Assembleur
(6) Si Faux : on ne faire rien. ORG 4000h
X DB 1,3,5,7,1,5,1
Algorithme MAX MOV SI, 0
Variables : MOV DL, X[SI]
Tableau X(10) : Entiers Boucle : INC SI
i, Max : Entier CMP DL, X[SI]
Début JA Suite
Max  X(0) MOV DL, X[SI]
Pour i  1 à 7, pas  1 faire Suite : CMP SI, 6
Si Max < X(i) Alors JNE Boucle
Max  X(i) END
Fin Si
Fin Pour
Fin
5

Vous aimerez peut-être aussi