100% ont trouvé ce document utile (1 vote)
188 vues7 pages

CC2 Ex1

Ce document contient des exercices en assembleur 8086 portant sur différents sujets tels que le calcul d'expressions, le tri de tableaux et la somme de nombres. Les solutions détaillées sont fournies sous forme d'organigrammes et de programmes assembleur.

Transféré par

kingfak
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
188 vues7 pages

CC2 Ex1

Ce document contient des exercices en assembleur 8086 portant sur différents sujets tels que le calcul d'expressions, le tri de tableaux et la somme de nombres. Les solutions détaillées sont fournies sous forme d'organigrammes et de programmes assembleur.

Transféré par

kingfak
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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