Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

CC2 Ex1

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 7

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 Mode d’adressage
MOV AL, [000BH] Mode direct
ADD AL, C4H Mode immédiat
MOV [BX], 00H Mode indirect basé
SUB AL, [BX + SI] 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 Non
[SI] = 0
BL ← BL + 1

SI ← SI + 1

CX ← CX - 1

Non Oui
CX = 0
[400H] ← BL

Fin

Le programme :

MOV CX, 100


MOV SI, 200H
MOV BL, 0
B1: CMP [SI], 0
JNE Next
INC BL
Next: INC SI
LOOP B1
MOV [400H], BL
HLT

Par : A. BENMAKHLOUF
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 Non
CF = 1
BL ← BL + 1

CX ← CX - 1

Non Oui
CX = 0

[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
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 Oui
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 Non
CX = 0
Fin

Le programme :

MOV CX, 50
MOV SI, 300H
B1: MOV AL, [SI]
PUSH CX
DEC CX
CMP CX, 1
JL Fin
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 Non
AX = 0
BX ← BX + CX DX ← DX + CX

CX ← CX - 1

Non Oui
CX = 0
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 Oui
AX = 0
CX ← AX - 1

DX : AX ← AX * CX AX ← 1

CX ← CX - 1 DX ← 0

Non Oui
CX = 0
[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

Vous aimerez peut-être aussi