Vous êtes sur la page 1sur 5

Microprocesseurs TD/TP 2019/2020

Sem 2

MICROPROCESSEUR
8086

Objectifs :
 Comprendre la segmentation mémoire et l’architecture matérielle du processeur 8086.
 Se familiariser avec le langage assembleur 8086
 Se familiariser avec l’outil Emu8086

I/ ULILISATION de l’outil Emu8086


A/ Mise en marche :
 Sur l’outil emu8086, visualisez tout les registres du microprocesseur, la mémoire le
registre flags et la pile.
B/ Gestion de la mémoire
1. Assemblez le programme suivant a partir de l’adresse CS :100
(utilisez com template)
XOR AX,AX
MOV AX,09
ADD AX,04
PUSH AX
MOV AH,[0150]
MOV CL,AH
POP DX

2. Affichez le contenu de la zone mémoire [CS :100] et [CS :110]

Ce que vous visualisez dans le memory list dans l’ordre est -Adresse physique hex decimal et le
code ASCII-

3. Déassemblez le contenu ces deux zones mémoires.


4. Lancez l’exécution du programme en mode pas à pas. Que fait l’instruction PUSH AX ?

5. Ecrire un programme qui fait la somme de deux double mots stockés en mémoire, le résultat
sera également mis en mémoire.

6. Ecrire un programme qui calcule (sous forme d’une boucle), la somme S = 1+2+3+4+5+6+7 et
mettre le résultat dans DX.

Travaux Dirigés :

1. Donner le mode d’adressage de chaque opérande ainsi que le résultat de chaque instruction
(calculer les adresses physiques) :

MOV AX, 0102h


MOV DS, AX
Page 1/5 TP N°1
Microprocesseurs TD/TP 2019/2020
Sem 2

MOV [F104], AX
MOV DX, 1241h
MOV DS, DX
MOV [1412h], DX
MOV AL,[1413]

2. CS=A11Bh DS=B222h SS=C339h ES=2EA0h IP=789Ah


AX=3456h BX=2305h CX=4567h DX=789Ah
SP=1579h BP=268Ah SI=1111h DI=2222h

a- Donnez l’adresse physique :


- de la prochaine instruction à exécuter
- du sommet de la pile
- pointée par BP
- pointée par SI
- pointée par DI

b- Indiquer l’action des instructions suivantes :


- MOV [BX+5],SI
- MOV AX,[DI+Ah]
- MOIV [BP+SI+4], BX

CORRECTIONS

1- Donner le mode d’adressage de chaque opérande ainsi que le résultat de chaque instruction (calculer les adresses
physiques) :
MOV AX, 0102h
MOV DS, AX
MOV [F104], AX
MOV DX, 1241h
MOV DS, DX
MOV [1412h], DX
MOV AL,[1413]

R1- MOV AX, 0102h : Mode Immédiat, AX=0102h


MOV DS, AX : Mode Implicite - Registre, DS = 0102h
MOV [F1040], AX : Mode Direct, Ad. physique =F104h + 10h x 102h =10124h
MOV DX, 1241h : Mode Immédiat, DX=1241h
MOV DS, DX : Mode Implicite - Registre, DS = 1241h
MOV [1412h], DX : Mode Direct, Ad. Physique = 1412h + 10h x 1241h = 13822h
MOV AL,[1413h] : Mode Direct, AL = 12h

2- CS=A11Bh DS=B222h SS=C339h ES=2EA0h IP=789Ah


AX=3456h BX=2305h CX=4567h DX=789Ah
SP=1579h BP=268Ah SI=1111h DI=2222h

a- Donnez l’adresse physique :


- de la prochaine instruction à exécuter
- du sommet de la pile

Page 2/5 TP N°1


Microprocesseurs TD/TP 2019/2020
Sem 2
- pointée par BP
- pointée par SI
- pointée par DI

b- Indiquer l’action des instructions suivantes :


- MOV [BX+5],SI
- MOV AX,[DI+Ah]
- MOIV [BP+SI+4], BX

R2- a1- Ad.Ph. = IP + CS x 10h = A8A4Ah


a2- Ad.Ph. = SP + SS x 10h = C4909h
a3- Ad.Ph. = BP + CS x 10h = C5A1Ah
a4- Ad.Ph. = SI + DS x 10h = B33B1h
a5- Ad.Ph. = DI + ES x 10h =24442h

b1- Ad.P. = BX + 5 + 10h x DS = B452Ah


b2- Ad.P. = DI + Ah + 10h x DS = B444Ch,
b3- Ad.P.= BP + SI + 4 + 10h x SS = C6B2Fh

3- Ecrire un programme qui calcule la somme de deux mots stockés aux adresses [500h] et [600h] et stocker le
résultat dans [1000h]

R3-
MOV AX, [500h]
ADD AX,[600h]
MOV [1000h],AX

4- Ecrire un programme qui fait la somme de deux double mots stockés à [200h] et [400h], le résultat sera mis dans
[600h].

R4-
MOV AX, [200h]
MOV BX,[201h]
ADD AX, [400h]
ADC BX, [402h]
MOV [600h], AX
MOV [602h], BX

5- Ecrire un programme qui calcule (sous forme d’une boucle), la somme S = 1+2+3+4+5+6+7 et mettre le résultat
dans DX.

R5-
MOV DX,0
MOV BX, 1
Boucle : ADD DX,BX
INC BX
CMP BX,7
JBE boucle

6- Ecrire ujn programme qui calcule (sous forme d’une boucle) la somme de i² et mettre le résultat dans DX.

R6-
MOV DX,0
MOV BL,1
Boucle : MOV AL,BL

Page 3/5 TP N°1


Microprocesseurs TD/TP 2019/2020
Sem 2
MUL BL
ADD DX,AX
INC BL
CMP BL,7
JBE Boucle

7- Soit une chaîne de caractères à l’adresse 1200h. Ecrire un programme qui met sa longueur dans CX.

R7- BX : pointeur, CX : compteur


MOV CX,0
MOV BX,1200h
Boucle : MOV AL, [BX]
CMP AL,0
JE fin
INC CX
INC BX
JMP Boucle
Fin :

8- Soit une chaîne de caractères à l’adresse 1200h. Ecrire un programme qui compte le nombre de « A » dans cette
chaîne, le résultat est mis dans DX.

R8- BX : pointeur, DX : compteur

MOV DX,0
MOV BX, 1200h
Boucle : MOV AL, [BX]
CMP AL,0
JE fin
CMP AL, 41h ; code ASCII du caractère « A »
JNE suite
INC DX
Suite : INC BX
JMP boucle
Fin :
9- Soit une chaîne de caractères à l’adresse 1200h. Ecrire un programme qui convertit les caractères minuscules de
cette chaîne en majuscules.

R9-
A= 0100 0001 Z =0101 1010
a = 0110 0001 z = 0111 1010

MOV BX,1200h
Boucle : MOV AL,[BX]
CMP AL,0
JE fin
CMP AL,61h ; comparer avec A
JB suite
CMP AL,7A ; comparer avec Z
JA suite
AND AL, DFh ; DF =1101 1111
MOV [BX], AL
Suite : INC BX
JMP Boucle
Fin :

Page 4/5 TP N°1


Microprocesseurs TD/TP 2019/2020
Sem 2

Page 5/5 TP N°1

Vous aimerez peut-être aussi