Telechargé par yousoufou1616

sol34 compress

publicité
Spécialité : Electrique
Module : Microprocesseur
Année universitaire : 2016 – 2017
Solution de la Série de TD N° : 3+4
Programmation du Microprocesseur 8086 en Assembleur
1. Dans l’extrait de programme suivant, préciser pour chacune des instructions le mode
d’adressage :
Instruction
MOV AL, [000BH]
Mode d’adressage
ADD AL, C4H
Mode immédiat
MOV [BX], 00H
SUB AL, [BX + SI]
Mode direct
Mode indirect basé
Mode indirect basé-indexé
Ecrire des programmes en assembleur 8086 qui permettent de :
2. Evaluer l’expression suivante et stocker le résultat en mémoire à l’adresse 0300H :
Y = 2x2 + 3x - 1.
Tel que x est un nombre positif (1 octet) stocké en mémoire à l’adresse 0100H.
Le programme :
MOV AL, [0100H]
MUL [0100H]
MOV BX, 2
MUL BX
XCHG AX, BX
MOV AX, 3
MUL [0100H]
DEC AX
ADD AX, BX
ADC DX, 0
MOV [0300H], AX
MOV [0302H], DX
HLT
Solution de la Série de TD N° : 3
3. Compter le nombre d’éléments nuls dans un tableau de 100 octets stockés en mémoire
à partir de l’adresse 200H. Le résultat sera stocké dans la case mémoire d’adresse 400H.
L’organigramme :
Début
CX ← 100
SI ← 200H
BL ← 0
Oui
[SI] = 0
BL ← BL + 1
SI ← SI + 1
CX ← CX - 1
Non
CX = 0
Oui
[400H] ← BL
Fin
Le programme :
MOV CX, 100
MOV SI, 200H
B1:
MOV BL, 0
CMP [SI], 0
JNE Next
INC BL
Next: INC SI
LOOP B1
MOV [400H], BL
HLT
Par : A. BENMAKHLOUF
Non
Solution de la Série de TD N° : 3
4. Compter le nombre de 1 dans un mot binaire de 16 bits (contenu dans AX). Le résultat
sera stocké dans la case mémoire d’adresse 1200H.
L’organigramme :
Début
CX ← 16
BL ← 0
Décaler AX à droite d’une position
Oui
CF = 1
BL ← BL + 1
CX ← CX - 1
Non
CX = 0
Oui
[1200H] ← BL
Fin
Le programme :
MOV CX, 16
MOV BL, 0
B1:
SHR AX, 1
JNC Next
INC BL
Next: LOOP B1
MOV [1200H], BL
HLT
Non
Solution de la Série de TD N° : 3
5. Trier par ordre croissant (du plus petit au plus grand) les 50 éléments d’un tableau stocké
en mémoire à l’adresse 300H.
L’organigramme :
Début
CX ← 50
SI ← 300H
AL ← [SI]
Empiler CX
CX ← CX - 1
Non
CX < 1
BX ← CX
Oui
Non
AL > [BX + SI]
AH ← [BX + SI]
[SI] ← AH
[BX + SI] ← AL
AL ← AH
CX ← CX - 1
Non
Oui
CX = 0
SI ← SI + 1
Dépiler CX
CX ← CX - 1
Oui
Fin
Le programme :
MOV CX, 50
MOV SI, 300H
B1:
MOV AL, [SI]
PUSH CX
DEC CX
CMP CX, 1
JL Fin
CX = 0
Non
Oui
Solution de la Série de TD N° : 3
B2:
MOV BX, CX
CMP AL, [BX + SI]
JNG Next
XCHG AL, [BX + SI]
MOV [SI], AL
Next: LOOP B2
INC SI
Fin:
POP CX
LOOP B1
HLT
6. Calculer la somme des nombre entiers pairs (de 0 à 100) et stocker le résultat dans le
registre BX.
Calculer la somme des nombre entiers impairs (de 0 à 100) et stocker le résultat dans le
registre DX.
Le programme doit utiliser une seule boucle.
L’organigramme :
Début
CX ← 100
BX ← 0
DX ← 0
AX ← 1
AX ← AX et CX
Oui
AX = 0
Non
DX ← DX + CX
BX ← BX + CX
CX ← CX - 1
Non
CX = 0
Oui
Fin
Le programme :
MOV CX, 100
MOV BX, 0
MOV DX, 0
B1:
MOV AX, 1
Solution de la Série de TD N° : 3
AND AX, CX
JZ Pair
ADD DX, CX
JMP Next
Pair:
ADD BX, CX
Next: LOOP B1
HLT
7. Calculer le factoriel d’un nombre entier n de 8 bits (stocké en mémoire à l’adresse 0210H)
noté n!. Le résultat doit être stocké en mémoire à l’adresse 0220H.
-
Quelle peut être la taille du résultat ?
Pour calculer le factoriel d’un nombre on effectue des opérations de multiplication, le
résultat pourra être un nombre de 32 bits.
-
Quelle condition doit satisfaire le nombre n pour qu’il n’y ait pas dépassement de
cette taille ?
Le plus grand nombre qu’on peut représenter sur 32 bits est 232 – 1 = 4294967295.
Pour ne peut dépasser la taille de 32 bits, il faut que : n! ≤ 4294967295.
C’est-à-dire : n ≤ 11.
-
Il faut prendre en considération le cas 0! = 1.
L’organigramme :
Début
AX ← [210H]
Non
AX = 0
Oui
CX ← AX - 1
Non
DX : AX ← AX * CX
AX ← 1
CX ← CX - 1
DX ← 0
CX = 0
Oui
[220H] ← AX
[222H] ← DX
Fin
Solution de la Série de TD N° : 3
Le programme :
MOV AX, [0210H]
MOV DX, 0
CMP AX, 0
JNZ NONZERO
MOV AX, 1
JMP FIN
NONZERO:
MOV CX, AX
DEC CX
FACTORIAL: MUL CX
LOOP FACTORIAL
FIN:
MOV [0220H], AX
MOV [0222H], DX
HLT
Téléchargement