Sunteți pe pagina 1din 129

ARHITECTURA MICROPROCESOARELOR

ANEXA NR. 1

Moduri de reprezentare a datelor utilizate de


microprocesorul Intel 8086
1. Elemente de algebr boolean
Algebra logic sau algebra boolean a fost conceput ca o metod simbolic de tratare a
funciilor logice formale, fiind ulterior extins i n alte domenii. Deoarece ntre logica formal i
circuitele de comutaie (cu dou stri) exist o coresponden direct (logica formal studiaz
valoarea de adevr sau de fals a unor afirmaii ce pot fi numai adevrate sau false, iar circuitele de
comutaie sunt realizate prin interconectarea unor comutatoare ce au dou stri: nchis sau deschis),
algebra boolean s-a impus ca cea mai important modalitate de analiz i sintez a circuitelor de
comutaie.
Algebra boolean se definete axiomatic astfel: fie (M, x, +) o mulime cu dou operaii i
M={0, 1} cu urmtoarele proprieti (axiome):
a) pentru orice elemente a1, a2 care apartin lui M exist relaiile (parte stabil):
a1 a2 apartine lui M i a1 + a2 apartine lui M
b) operaiile x i + sunt comutative:
a1 x a2 = a2 x a1 i a1 + a2 = a2 + a1
c) operaiile x i + sunt asociative:
(a1 x a2 ) x a3 = a1 x (a2 x a3 ) i (a1 + a2) + a3 = a1 + (a2 + a3)
d) operaiile x i + sunt distributive una fa de alta:
a1 x (a2 + a3) = a1 x a2 + a1 x a3;
a1 + (a2 x a3) = (a1 + a2) x (a1 + a3);
e) exist element neutru pentru fiecare operaie:
a x 1 = a i a + 0 = a;
f) exist element invers (complementar) pentru fiecare operaie:
a x a\ = a i a + a\ = 1;
Valorile 0 i 1 modeleaz logic strile circuitelor logice (digitale) care au dou stri. n
continuare operaia x va fi denumit conjuncie, iar operaia + va fi denumit disjuncie.
Exist urmtoarele teoreme (reguli de calcul) asociate algebrei boolene:
1.
2.
3.
4.
5.

a x a = a i a+a = a
(idempotena)
a x 0 = 0 i a+1 = 1
(elementele neutre)
a\\ = a
(dubla negaie)
a(a + b) i a + a x b = a
(absorbia)
(a+b)\ = a\ x b\ i (a x b)\ = a\ + b\ (relatiile de Morgan)

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Operaiile x i + pot fi ilustrate cu ajutorul tabelului de adevr:
a
0
0
1
1

b
0
1
0
1

axb

a+b

a\

0
0
0
1

0
1
1
1

1
1
0
0

Operaia + reprezint suma modulo 2 (SAU exclusiv) dat de tabelul de adevr:


a1
0
0
1
1

a2
0
1
0
1

a1 + a2
0
1
1
0

Notaiile utilizate pentru operaiile anterioare sunt: x pentru AND, + pentru OR, + pentru
XOR si \ pentru NOT.

2. Baze de numeratie
Reprezentarea unui numr n baza B este:
(N)B = cn-1 ............ c0 . c-1 ................ c-m
parte ntreag
parte fracionar
unde ci {0, ... , B-1}, i = n-1, ... , -m.
Numrul N scris in baza B ca mai sus, are n baza obisnuita 10 valoarea:
N = cn-1 Bn-1 + ...... + c1 B1 + c0 B0 . c-1 B-1 + c-2 B-2 + ..... + c-m B-m
Valoarea unui numar N scris in baza 10 este de exemplu:
N = zn-1 10n-1 + ...... + z1 101 + z0 100 . z-1 10-1 + z-2 10-2 + ..... + z-m 10-m
Numarul scris N scris in baza 2:
(N)2 = bn-1 ......... b0 . b-1 ............. b-m
are n baza obisnuita 10 valoarea:
N = bn-1 2n-1 + ...... + b1 21 + b0 20 . b-1 2-1 + b-2 2-2 + ..... + b-m 2-m

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Deoarece informatia digitala este memorata sub forma binara, baza de numeratie utilizata
este 2. Cifrele in baza 2 se numesc biti.
Valorile obisnuite din baza 10 trebuie deci echivalate in baza 2 pentru efectuarea unor
calcule. De aceea este importanta cunoasterea echivalentei valorilor zecimale cu valori binare. In
tabelul 1 sunt date echivalentele primelor 32 de valori zecimale intregi in binar.
Tab.1. Echivalenta valorilor zecimale (0..31), binare si hexazecimale
Valoare
Propriu-zisa
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

in baza 10 (zecimala)

Valoare in baza 2
(binara)

Valoare in baza 16
(hexa-zecimala)

0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
1 0000
1 0001
1 0010
1 0011
1 0100
1 0101
1 0110
1 0111
1 1000
1 1001
1 1010
1 1011
1 1100
1 1101
1 1110
1 1111

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F

Ca suma de puteri ale lui 2


20

21
21 + 20

22
22
+ 20
2
1
2 +2
22 + 21 + 20

23
23
+ 20
3
1
2
+2
23
+ 21 + 20
23 + 22
23 + 22
+ 20
3
2
1
2 +2 +2
23 + 22 + 21 + 20

24
24
+ 20
4
1
2
+2
24
+ 21 + 20
4
2
2
+2
24
+ 22
+ 20
24
+ 22 + 21
24
+ 22 + 21 + 20
4
3
2 +2
24 + 23
+ 20
4
3
1
2 +2
+2
24 + 23
+ 21 + 20
4
3
2
2 +2 +2
24 + 23 + 22
+ 20
24 + 23 + 22 + 21
24 + 23 + 22 + 21 + 20

Pe de alta parte, pentru usurinta scrierii valorilor care au un numar mare de cifre binare, se
utilizeaza baza 16. Cifrele in baza 16 se numesc cifre hexa-zecimale, sau mai scurt cifre hexa.
Convenim sa utilizam terminatia B pentru valori binare si terminatia H pentru valori hexazecimale, valorile zecimale fiind scrise obisnuit.

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Conversia unui numr din baza 2 n baza B=2m se efectueaz astfel: se mparte numrul
scris n binar n grupe de cifre de cte m bii i se reprezint fiecare grup printr-o cifr n baza B.
Astfel, deoarece 16 este 24, rezulta ca se pot grupa 4 cifre binare pentru a forma 1 cifra hexazecimala.
Exemplu:

0111 1111 B = 7 F H

Se observa urmatoarele echivalente:


1 cifra hexa
2 cifre hexa
4 cifre hexa

=
=
=

4 cifre binare (4 biti)


8 cifre binare (1 octet)
16 cifre binare (1 cuvant de 16 biti)

In tabelul 1 sunt date echivalentele primelor 32 de valori zecimale intregi si in hexa-zecimal,


iar in tabelul 2 sunt date echivalentele puterilor lui 2 in binar si hexa-zecimal.
Tab.2. Echivalenta puterilor lui 2 ca valori zecimale, binare si hexazecimale
Valoare
Propriu-zisa
1
2
4
8
16
32
64
128
256
512
1 024
2 048
4 096
8 192
16 384
32 768
65 536
131 072
262 144
524 288
1 048 576

in baza 10
Aproximativa

1K
2K
4K
8K
16 K
32 K
64 K
128 K
256 K
512 K
1M

(zecimala)
Ca putere a lui 2
20
21
22
23
24
25
26
27
28
29
210
211
212
213
214
215
216
217
218
219
220

Valoare in baza 2
(binara)

Valoare in baza 16
(hexa-zecimala)

1
10
100
1000
1 000
10 0000
100 0000
1000 0000
1 0000 0000
10 0000 0000
100 0000 0000
1000 0000 0000
1 0000 0000 0000
10 0000 0000 0000
100 0000 0000 0000
1000 0000 0000 0000
1 0000 0000 0000 0000
10 0000 0000 0000 0000
100 0000 0000 0000 0000
1000 0000 0000 0000 0000
1 0000 0000 0000 0000 0000

1
2
4
8
10
20
40
80
100
200
400
800
1000
2000
4000
8000
10000
20000
40000
80000
100000

In orice baza n, produsul cu o putere a bazei prezinta un interes deosebit.


Astfel, in baza 10 produsul unui numar intreg cu 10 inseamna adaugarea unui zero in partea
dreapta. Acest lucru este echivalent cu deplasarea cu o cifra la stanga (cifra unitatilor devenea cifra
zecilor, cifra zecilor devenea cifra sutelor, etc.).

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Produsul cu 100 = 102 inseamna adaugare a 2 zerouri in partea dreapta sau deplasarea cu 2
cifre la stanga.
Produsul cu 10n in baza 10 inseamna deci deplasarea cu n cifre (pozitii) la stanga.
Tot astfel, in baza 2 produsul cu 2n inseamna deplasarea cu n pozitii (biti) la stanga, iar in
baza 16 produsul cu 16n inseamna deplasarea cu n pozitii (biti) la stanga.
Un caz special: produsul cu 10 H = 10000 B = 16 = 24 este echivalent in baza 16 cu
deplasarea cu 1 pozitie (cifra hexa) catre stanga, iar in baza 2 cu deplasarea cu 4 pozitii (biti) catre
stanga.
Exemplu:
(hexa-zecimal)
3A H x
10
0 H=
_______
3A0
0 H

(binar)
=
=

(zecimal)

0011 1010 B x
1 0000 B
=
__________________
0011 1010 0000 B

=
16
=

58 x
_____
928

3. Reprezentarea datelor pe numar finit de biti


In interiorul sistemelor cu microprocesor datele memorate si transferate au in general 2m biti.
De aceea este necesara cunoasterea proprietatilor operatiilor efectuate cu date binare de lungime
finita.
Presupunem ca datele utilizate au lungimea de n = 2m biti (in general n = 8, 16, 32, etc.).
Atunci gama valorilor naturale (intregi pozitive) care pot fi reprezentate cu n biti este: 0 ..... 2n - 1.
Daca se efectueaza o operatie asupra a doua valori de n biti rezultatul exact poate depasi n biti
(adunarea si scaderea a doua valori de n biti au ca rezultat valori de n+1 biti iar inmultirea a doua
valori de n biti are ca rezultat o valoare de 2n biti).
Exemplul 1 (pentru n = 8):
1110 0010 B +
1010 0001 B
-----------------(transport = 1) 1000 0011 B

E2H+
A1 H
--------(1) 8 3 H

Exemplul 2 (pentru n = 16):


1001 1100 1110 0010 B 9CE2H1011 0110 1010 0001 B
B 6 A1 H
-------------------------------------------(imprumut = 1) 1110 0110 0100 0001 B
(-1) E 6 4 1 H
Pentru a semnaliza depasirea de gama de reprezentare a valorilor naturale la operatiile
aritmetice se utilizeaza un bit indicator numit Carry Flag (indicator de transport). Acesta indica la
adunare "transportul" sau "tinem 1", si indica la scadere "imprumutul" sau "ne imprumutam 1".
5

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Transportul apare atunci cand la o operatie de adunare pe n biti valoarea exacta a rezultatului
depaseste n biti, sau cand la o operatie de scadere pe n biti este necesar imprumutul de la al n-1-lea
bit. Daca se neglijeaza transportul, operatiile aritmetice cu valori reprezentate pe n biti pot fi
descrise grafic pe un cerc:
0

2-1

1
n-3

n-1

n-2

n-2

2 +2

n-1

2 +1

n-1
n-1 2 -1

Fig. 1. Cercul valorilor naturale (intregi fara semn) reprezentabile cu n biti


Pentru exemplul 1 anterior (n = 8) acest cerc devine:
FEH FFH

00H

01H 02H
20H
A1H

C0H

40H
E2H

83H

80H

80H

7FH

Fig. 2. Cercul valorilor naturale (intregi fara semn) reprezentabile cu 8 biti pentru exemplul 1
Pentru exemplul 2 anterior (n = 16) acest cerc devine:

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
0000H
FFFFH
0001H 0002H
FFFEH
E641H

2000H
B6A1H

C000H

4000H

9CE2H

8001H 7FFFH
8000H
Fig. 3. Cercul valorilor naturale (intregi fara semn) reprezentabile cu 16 biti pentru exemplul
2

2n.

Se observa ca operatiile de adunare pe n biti sunt echivalente operatiilor de adunare modulo


Pe datele din exemplul 1 (n = 8, 2n = 28 = 256 = 100H = 1 0000 0000 B) se observa ca:
E2H+
A1 H
--------(1) 8 3 H

226+
161
--------387=1x256+131

De asemenea, pe datele din exemplul 2 (n = 16, 2n = 216 = 65536 = 10000H = 1 0000 0000
0000 0000 B) se observa ca:
9CE2HB 6 A1 H
-------------(-1) E 6 4 1 H

4016246753
------------ 03409=-1x65536+62127

Asadar, corespondenta dintre multimea numerelor naturale si multimea valorilor


reprezentabile cu n biti este cea din figura 4.

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
2 n-1
(multimea
valorilor
reprezentabile
cu n biti)
0

2 n-1 2 n
2 2n -1 2 2n
(multimea numerelor naturale)

Fig. 4. Corespondenta numerelor naturale cu valorile reprezentabile cu n biti

4. Reprezentarea numerelor negative


Reprezentarea numerelor negative n binar se poate face in mai multe moduri.
Fie (bn-1 bn-2 ... b0 . b-1 ... b-m) = (N)2
In mod obisnuit bitul care indica semnul este cel mai semnificativ bit (bn-1 ), iar numerele
pozitive au bn-1 = 0 i numerele pozitive au bn-1 = 1.

4.1. Reprezentarea n modul i semn (MS)


In acest caz semnul numarului N este + daca bn-1 = 0 si - daca bn-1 = 1, iar modulul numrului
N n baza 10 este:
| N | = bn-2 2n-2 + ...... + b1 21 + b0 20 + b-1 2-1 + b-2 2-2 + ..... + b-m 2-m
Exemplu:
(9)C1 = 0000 1001 B = 9 H
(-9)C1 = 1000 1001 B = 89 H
Gama dinamic a numerelor reprezentate n MS este +/- ( 2n-1 - 2-m). Valoarea de modul
maxim este atins pentru bi = 1, i = - m, n-2, adic:
2n-1 + ...... + 21 + 20 + 2-1 + 2-2 + ..... + 2-m = 2n-1 - 2-m
Pentru numerele intregi m = 0. Numerele ntregi reprezentate n MS pe n bii au gama
dinamic +/- (2 n-1 -1).
n multe cazuri domeniul +/- (2 n-1 -1) se scaleaz (normeaz) cu 2n-1, adic N' = N/ 2 n-1, deci
virgula va fi plasat imediat dup bitul de semn. In aceasta situatii se reprezint pe n bii numere
+/fracionare cu semn. Gama dinamic pentru reprezentarea MS a numerelor fracionare este
n-1
(1-1/2 ).
8

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1

4.2. Reprezentarea n complement de 1 (C1)


Reprezentarea numerelor pozitive in C1 este identica reprezentarii MS.
Reprezentarea unui numar negativ n C1 se obtine prin complementarea bit cu bit a valorii
modulului su.
Exemplu:
(9)C1 = 0000 1001 B = 9 H
(-9)C1 = 1111 0110 B = F6 H
Se observa ca F6 H = 15 x 16 + 6 = 246 = 255 - 9 = (2n -1) - 9. Rezulta o a doua regul
pentru obinerea reprezentrii valorilor negative a unui numr ntreg n C1: scderea din 2n-1 a
valorii sale absolute.

Gama dinamic pentru reprezentarea C1 este +/- (2n-1 - 2-m) (la fel ca n cazul reprezentrii
MS).

Dezavantajul reprezentrilor MS i C1 este acela c valoarea 0 se exprim n 2 moduri


diferite (pentru MS valoarea 0 este 000...0 sau 100...0 iar pentru C1 valoarea 0 este 000...0 sau
111...1.

4.3. Reprezentarea n complement de 2 (C2)


Pentru numere pozitive reprezentarea este identic cu cea din C1 i MS. Pentru numere
negative (-N)C2 = 2n -N.
Dac numrul binar are reprezentarea n C2: bn-1, bn-2, ..., b0.b-1...b-m, atunci valoarea sa n
zecimal este dat de relaia:
N = (-1) bn-1 2n-1 + bn-2 2n-2 + ...... + b1 21 + b0 20 + b-1 2-1 + b-2 2-2 + ..... + b-m 2-m
Gama dinamic pentru reprezentarea n C2 este: -2n-1 ..... 2n-1 - 2-m
Deoarece pentru N>=0 avem bn-1=0, valoarea maxim se obine pentru bi=1, i = -m, n-2:
Nmax = 2n-2 + ...... + 21 + 20 + 2-1 + 2-2 + ..... + 2-m = 2n-1 - 2-m,
iar pentru N<0 avem bn-1=1 valoarea minim se obine pentru bi=0, i = -m,n-2:
Nmin = -2n-1
Prin scalare cu 2n-1 se obine reprezentarea n C2 a numerelor fracionare. Gama dinamic
(pentru m=0) este: -1 ....... 1- 1/2n-1
Exist dou moduri de obinere a reprezentrii in C2 a lui -N:
9

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
1) Se adaug 1 la reprezentarea binar n C1 alui (-N).
2) Se scade din 2n-1 valoarea zecimala lui N i apoi se reprezint n binar (ca numr fr
semn).
Exemplu (pentru n = 8 i m = 0):
(103
103)
0110 0111 B
103 C2 =
a) Din C1:
1001 1000 B +
(-103
-103)
-103 C2 =
1B
-----------------1001 1001 B

= 67 H
= 98 H +
1H
--------= 99 H

b) Prin scadere:
(-103
-103)
-103 C2 = 1 0000 0000 B 0110 0111 B
------------------1001 1001 B

= 100 H 67 H
--------= 99 H

= 28 - 103
= 153

Asadar C2 pe 8 biti al valorii zecimale 103 este valoarea zecimala 153 = 256 - 103.
Daca se efectueaza o operatie asupra a doua valori reprezentate in C2 pe n biti rezultatul
exact poate depasi gama de reprezentare pe n biti (adunarea a doua valori pozitive de n biti poate
avea ca rezultat valori negative de n biti iar adunarea a doua valori negative de n biti poate avea ca
rezultat valori pozitive de n biti).
Exemplul 1 (pentru n = 8):
1110 0010 B + E 2 H +
adica: - 1 E H +
1001 0001 B
91H
-6FH
------------------ ------------------(transport = 1) 0111 0011 B
7 3 H (depasire = 1)
-8DH
Pentru interpretarea corecta a rezultatului trebuie semnalata asadar depasirea de gama. Acest
lucru se face printr-un bit indicator numit Overflow Flag (indicator de depasire). Rezultatul obtinut,
73 H, se interpreteaza ca -8D H, valoare care nu poate fi reprezentata pe 8 biti in C2.
Exemplul 2 (pentru n = 16):
1001 1100 1110 0010 B +
9CE2H+
adica: - 6 3 1 E H +
1011 0110 1010 0001 B
B 6 A1 H
-495FH
----------------------------------------------------------(imprumut = 1) 1110 0110 0100 0001 B
5 3 8 3 H (depasire = 1)
+5383H
Reprezentarea in C2 a valorilor intregi de n biti poate fi descrisa grafic ca in figura 5.

10

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
-1

1
n-3

n-2

-2

+
n-1

n-2

n-1

-(2 -1) 2n-1 2 -1


Fig. 5. Cercul valorilor intregi (cu semn) reprezentabile cu n biti
Pentru exemplul 1 anterior (n = 8) acest cerc devine:
(FEH)

(FFH)

-02H-01H

00H 01H

02H
20H

(depasire)
91H(-67H)
(C0H)

-40H

E2H(-1EH)

(80H)

-7FH

80H 7FH

40H

73H

Fig. 6. Cercul valorilor intregi (cu semn) reprezentabile cu 8 biti pentru exemplul 1
11

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Pentru exemplul 2 anterior (n = 16) acest cerc devine:
0000H
FFFFH
0001H 0002H
FFFEH
E641H

2000H
B6A1H

C000H

4000H

9CE2H

8001H 7FFFH
8000H
Fig. 7. Cercul valorilor intregi (cu semn) reprezentabile cu 16 biti pentru exemplul 2

4.4. Echivalenta valorilor binare in diferite moduri de reprezentare


Microprocesorul Intel 8086 utilizeaza date de tip octet (8 biti) si cuvant (16 biti). De aceea
este necesara cunoasterea echivalentei valorilor fara semn (naturale) reprezentabile cu 8 si 16 biti cu
valorile cu semn (intregi).
Echivalentele pentru date de tip octet sunt date in tabelul 3, iar cele pentru date de tip cuvant
in tabelul 4.

12

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Tab.3. Echivalenta valorilor de 8 biti fara semn (naturale) cu cele cu semn (intregi)
in diferite moduri de reprezentare (MS, C1, C2)
fara
zecimal
0
1
2
3
4
5
6
...
...
63
64
65
...
...
127
128
129
...
...
191
192
193
...
...
250
251
252
253
254
255

Valoarea
semn a
binar
0000 0000
0000 0001
0000 0010
0000 0011
0000 0100
0000 0101
0000 0110
...
...
0011 1111
0100 0000
0100 0001
...
...
0111 1111
1000 0000
1000 0001
...
...
1011 1111
1100 0000
1100 0001
...
...
1111 1110
1111 1110
1111 1100
1111 1101
1111 1110
1111 1111

numarului in
hexazecimal
00
01
02
03
04
05
06
...
...
3F
40
41
...
...
7F
80
81
...
...
BF
C0
C1
...
...
FA
FB
FC
FD
FE
FF

Valoarea
codului binar
(MS)
0
1
2
3
4
5
6
...
...
63
64
65
...
...
127
0
1
...
...
-63
-64
-65
...
...
-122
-123
-124
-125
-126
-127

obinut prin interpretarea


ca numr cu semn n
(C1)
(C2)
0
0
1
1
2
2
3
3
4
4
5
5
6
6
...
...
...
...
63
63
64
64
65
65
...
...
...
...
127
127
- 127
- 128
- 126
- 127
...
...
...
...
-64
-65
-63
-64
-62
-63
...
...
...
...
-5
-6
-4
-5
-3
-4
-2
-3
-1
-2
0
-1

13

ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Tab.4. Echivalenta valorilor de 16 biti fara semn (naturale) cu cele cu semn (intregi)
in diferite moduri de reprezentare (MS, C1, C2)

fara
zecimal
0
1
2
3
4
5
6
...
...
16383
16384
16385
...
...
32767
32768
32769
...
...
49151
49152
49153
...
...
65531
65532
65533
65534
65535
65536

Valoarea
semn a numarului
binar
0000 0000 0000 0000
0000 0000 0000 0001
0000 0000 0000 0010
0000 0000 0000 0011
0000 0000 0000 0100
0000 0000 0000 0101
0000 0000 0000 0110
...
...
0011 1111 1111 1111
0100 0000 0000 0000
0100 0000 0000 0001
...
...
0111 1111 1111 1111
1000 0000 0000 0000
1000 0000 0000 0001
...
...
1011 1111 1111 1111
1100 0000 0000 0000
1100 0000 0000 0001
...
...
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1111

in
hexa
0000
0001
0002
0003
0004
0005
0006
...
...
3FFF
4000
4001
...
...
7FFF
8000
8001
...
...
BFFF
C000
C001
...
...
FFFA
FFFB
FFFC
FFFD
FFFE
FFFF

Valoarea
codului binar
(MS)
0
1
2
3
4
5
6
...
...
16383
16384
16385
...
...
32767
0
-1
...
...
- 16383
- 16384
- 16385
...
...
-122
-123
-124
-125
-126
-127

obinut prin interpretarea


ca numr cu semn n
(C1)
(C2)
0
0
1
1
2
2
3
3
4
4
5
5
6
6
...
...
...
...
16383
16383
16384
16384
16385
16385
...
...
...
...
32767
32767
- 32767
-32768
- 32766
-32767
...
...
...
...
- 16384
- 16385
- 16383
- 16384
- 16382
- 16383
...
...
...
...
-5
-6
-4
-5
-3
-4
-2
-3
-1
-2
0
-1

14

Setul de instructiuni al microprocesorului Intel 8086


1. Notatii utilizate
Operatii:
= atribuire (valoarea din dreapta copiata in stinga)
<-<--> = permutare (interschimbare)
Operatori:
R
R8
R16
Rn
A
SR

=
=
=
=
=
=

registru general
registru general de 8 biti: AL, AH, BL, BH, CL, CH, DL, DH
registru general de 16 biti: AX, BX, CX, DX, SP, BP, SI, DI
bitul n al registrului R
registru acumulator: AL, AH, AX
registru segment: CS, DS, SS, ES

M
M8
M16
M32
Mn

=
=
=
=
=

data din memorie


octet din memorie
cuvint din memorie (2 octeti)
pointer din memorie (4 octeti = 2 cuvinte)
bitul n al operandului din memorie M

EA(M) = adresa efectiva a locatiei de memorie M


(adr) = octetul aflat la adresa adr in memorie
(adr+1,adr) = cuvintul aflat la adresa adr in memorie
D
D8
D16

= data de tip imediat (constanta numerica sau simbolica)


= octet de tip imediat
= cuvint de tip imediat

info
MSb(info)
LSb(info)
etich

= R, M sau D
= cel mai semnificativ bit al valorii info
= cel mai putin semnificativ bit al valorii info

= nume utilizat pentru referirea unei instructiuni (eticheta = adresa simbolica)

DEPL(etich) = deplasarea (diferenta adreselor) intre instructiunea curenta si etich


PORT(adr)

= portul aflat la adresa adr

(flag)

= flag este nedefinit

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

2. Instructiuni de transfer
2.1. Instructiuni de transfer generale
1. Atribuire (Move)
MOV R, R'
R <-- R'
MOV R, M
R <-- M
MOV M, R
M <-- R
MOV R, D
R <-- D
MOV M, D
M <-- D
MOV SR,R16SR <-- R16 (SR cu exceptia lui CS)
MOV SR,M16
SR <-- M16 (SR cu exceptia lui CS)
MOV R16,SRR16 <-- SR (SR cu exceptia lui CS)
MOV M16,SR
M16 <-- SR (SR cu exceptia lui CS)

MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV

2. Permutare (Exchange)
XCHG R, R'
R <--> R'
XCHG M
M <--> R

XCHG AX, DX
XCHG TAB [SI][DI+20], AX

PUSH SI

PUSH DS
PUSH VAR2

POP DX

POP ES
POP VAR1

3. Salvare in stiva (Push)


PUSH R16
SP <-- SP-2
(SP+1,SP) <-- R16
PUSH SR
STIVA <-- SR
PUSH M16
STIVA <-- M16
4. Extragere din stiva (Pop)
POP R16
R16 <-- (SP+1,SP)
SP <-- SP+2
POP SR
SR <-- STIVA
POP M16
M16 <-- STIVA

\_ notatie prescurtata:
/ STIVA <-- R16

\_ notatie prescurtata:
/ R16 <-- STIVA

AX, BX
DX, VAR1
TAB [SI][DI], BX
AL, 20H
TAB [SI+2][DI], 1200H
ES, AX
DS, DATASEGBASE
AX, SS
DATASEGBASE, DS

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

2.2. Instructiuni de transfer cu porturile


1. Citire din port
IN A, D8
IN A, DX

A <-- PORT(D8)
A <-- PORT(DX)

IN AL, 0FAH
IN AX, DX

2. Sriere in port
OUT D8, A
OUT DX, A

PORT(D8) <-- A
PORT(DX) <-- A

OUT 44, AX
OUT DX, AL

LEA BX, TAB [SI]

2. Calcul adresa fizice, folosind DS (Load Data Segment Register)


LDS R16, M
R16 <-- (M+1,M)
DS <-- (M+3,M+2)

LDS DI, TAB [BX]

3. Calcul adresa fizice, folosind ES (Load Extra Segment Register)


LES R16, M
R16 <-- (M+1,M)
ES <-- (M+3,M+2)

LES BX, TAB [SI]

LAHF

2.3. Instructiuni de transfer (calcul) de adrese


1. Calcul adresa efectiva (Load Effective Adress)
LEA R16, M
R16 <-- EA(M)

2.4. Instructiuni de transfer de flag-uri


1. Transfer flag-uri in AH (Load AH from Flags)
LAHF
AH <-- SF,ZF,x,AF,x,PF,x,CF
2. Transfer flag-uri din AH (Store AH in Flags)
SAHF
SF,ZF,x,AF,x,PF,x,CF <-- AH

SF,ZF,AF,PF,CF

SAHF
3

Mnemonica

Operatie (efect)

3. Salvare flag-uri in stiva (Push Flags)


PUSHF
STIVA <-- F
4. Extragere flag-uri din stiva (Pop Flags)
POP
F <-- STIVA

Indicatori afectati
-

Exemplu de instructiune
PUSHF

Tot registrul F

POPF

1. Adunare simpla (Add)


ADD R, R'
R <-- R + R'
ADD R, M
R <-- R + M
ADD M, R
M <-- M + R
ADD R, D
R <-- R + D
ADD M, D
M <-- M + D

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

ADD
ADD
ADD
ADD
ADD

CX, DX
AL, TAB [SI+1]
[BX], DX
CL, 10H
[SI], 1000H

2. Adunare cu transport (Add with Carry)


ADC R, R'
R <-- R + R'+ CF
ADC R, M
R <-- R + M + CF
ADC M, R
M <-- M + R + CF
ADC R, D
R <-- R + D + CF
ADC M, D
M <-- M + D + CF

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

ADC
ADC
ADC
ADC
ADC

CL, DL
AX, TAB
[DI], DL
CX, 1000H
VAR2, 10H

3. Adunare cu 1 (Increment)
INC R
R <-- R + 1
INC M
M <-- M + 1

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

INC CL
INC CNTR

3. Instructiuni aritmetice
3.1. Instructiuni de adunare

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

1. Scadere simpla (Substract)


SUB R, R'
R <-- R - R
SUB R, M
R <-- R - M
SUB M, R
M <-- M - R
SUB R, D
R <-- R - D
SUB M, D
M <-- M - D

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

SUB
SUB
SUB
SUB
SUB

AX, CX
AX, TAB [BX]
DS : TAB [BP], CL
AH, 10H
VAR1, 2

2. Scadere simpla cu imprumut (Substract with Carry)


SBB R, R'
R <-- R - R'- CF
SBB R, M
R <-- R - M - CF
SBB M, R
M <-- M - R - CF
SBB R, D
R <-- R - D - CF
SBB M, D
M <-- M - D - CF

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

SBB
SBB
SBB
SBB
SBB

BX, DX
BH, VAR1
VAR2, CX
CX, 1000H
TAB [SI+2], 4

3. Scadere cu 1 (Decrement)
DEC R
R <-- R + 1
DEC M
M <-- M + 1

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

DEC CL
DEC TAB [SI]

4. Scadere din 0 (Negate)


NEG R
R <-- 0 - R (R negat in C2)
NEG M
M <-- 0 - M (M negat in C2)

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

NEG AX
NEG TAB [BX+2]

5. Comparatie aritmetica prin scadere (Compare)


CMP R, R'
R - R' (afecteaza doar flagurile)
CMP R, M
R - M (afecteaza doar flagurile)
CMP M, R
M - R (afecteaza doar flagurile)
CMP R, D
R - D (afecteaza doar flagurile)
CMP M, D
M - D (afecteaza doar flagurile)

OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF

CMP
CMP
CMP
CMP
CMP

3.2. Instructiuni de scadere

AH, CL
AX, VAR1
VAR2, DX
AX, 0
VAR1, 0
5

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

3.3. Instructiuni de inmultire


1. Inmultire intre numere fara semn (Multiply Acc. Register by Register or Memory; Unsigned)
MUL R8
AX <-- AL*R8 (produs)
OF,CF,(SF,ZF,AF,PF)
MUL R16
DX,AX <-- AX*R16 (produs)
OF,CF,(SF,ZF,AF,PF)
MUL M8
AX <-- AL*M8 (produs)
OF,CF,(SF,ZF,AF,PF)
MUL M16
DX,AX <-- AX*M16 (produs)
OF,CF,(SF,ZF,AF,PF)

MUL
MUL
MUL
MUL

2. Inmultire intre numere cu semn (IntegerMultiply Acc. Register by Register or Memory)


IMUL R8
AX <-- AL*R8 (produs)
OF,CF,(SF,ZF,AF,PF)
IMUL R16
DX,AX <-- AX*R16 (produs)
OF,CF,(SF,ZF,AF,PF)
IMUL M8
AX <-- AL*M8 (produs)
OF,CF,(SF,ZF,AF,PF)
IMUL M16
DX,AX <-- AX*M16 (produs)
OF,CF,(SF,ZF,AF,PF)

IMUL
IMUL
IMUL
IMUL

BL
CX
VAR1
TAB [SI]
DH
BX
VAR2
TAB [DI]

3.4. Instructiuni de impartire


1. Impartire intre numere fara semn (Division Unsigned)
DIV R8
AL <--AX/R8
(cit)
AH <-- AX mod R8
(rest)
DIV R16
AX <--DX,AX/R16
(cit)
DX <-- DX,AX mod R8
(rest)
DIV M8
AL <--AX/M8
(cit)
AH <-- AX mod R8
(rest)
DIV M16
AX <--DX,AX/M16
(cit)
DX <-- DX,AX mod R8
(rest)
2. Impartire intre numere cu semn (Integer Division)
IDIV R8
AL <--AX/R8
(cit)
AH <-- AX mod R8
(rest)
IDIV R16
AX <--DX,AX/R16
(cit)
DX <-- DX,AX mod R8
(rest)

nedefiniti

DIV DL

nedefiniti

DIV CX

nedefiniti

DIV VAR1

nedefiniti

DIV VAR2

nedefiniti

IDIV DH

nedefiniti

IDIV BX
6

Mnemonica
IDIV M8
IDIV M16

Operatie (efect)
AL <--AX/M8
AH <-- AX mod R8
AX <--DX,AX/M16
DX <-- DX,AX mod R8

(cit)
(rest)
(cit)
(rest)

Indicatori afectati

Exemplu de instructiune

nedefiniti

IDIV TAB [SI]

nedefiniti

IDIV [DI]

3.5. Instructiuni de conversie (extindere a semnului)


1. Conversie de la octet la cuvant (Convert Byte to Word)
CBW
daca AL7 = 0 => AH <-- 0
daca AL7 = 1 => AH <-- 0FFH

CBW

2. Conversie de la cuvant la dublu cuvant (Convert Word to Double Word)


CWD
daca AX15 = 0 => DX <-- 0
daca AX15 = 1 => DX <-- 0FFH

CWD

NOT AX
NOT VAR1

4. Instructiuni logice, deplasari si rotatii


4.1. Instructiuni logice
1. Negare logica (Logical Not)
NOT R
R <-- R\ (R negat in C1, bit cu bit)
NOT M
M <-- M\ (R negat in C1, bit cu bit)
2. "Si" logic (And)
AND R, R'
AND R, M
AND M, R
AND R, D
AND M, D

R <-- R AND R' (bit cu bit)


R <-- R AND M (bit cu bit)
M <-- M AND R (bit cu bit)
R <-- R AND D (bit cu bit)
M <-- M AND D (bit cu bit)

CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF

AND
AND
AND
AND
AND

CX, DX
BX, TAB [BX-2]
VAR1, AL
BX, 10H
[BX], 10H
7

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

3. "Sau" logic (Or)


OR R, R'
OR R, M
OR M, R
OR R, D
OR M, D

R <-- R OR R' (bit cu bit)


R <-- R OR M (bit cu bit)
M <-- M OR R (bit cu bit)
R <-- R OR D (bit cu bit)
M <-- M OR D (bit cu bit)

CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF

OR
OR
OR
OR
OR

4. "Sau exclusiv" logic (Exclusive Or)


XOR R, R'
R <-- R XOR R' (bit cu bit)
XOR R, M
R <-- R XOR M (bit cu bit)
XOR M, R
M <-- M XOR R (bit cu bit)
XOR R, D
R <-- R XOR D (bit cu bit)
XOR M, D
M <-- M XOR D (bit cu bit)

CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF

XOR
XOR
XOR
XOR
XOR

BX, AX
BX, [SI]
[DI-4], CX
BL, 3
VAR2, 5

5. "Si" logic fara memorarea rezultatului (Test)


TEST R, R'
R AND R' (afecteaza doar flagurile)
TEST R, M
R AND M (afecteaza doar flagurile)
TEST M, R
M AND R (afecteaza doar flagurile)
TEST R, D
R AND D (afecteaza doar flagurile)
TEST M, D
M AND D (afecteaza doar flagurile)

CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF

TEST
TEST
TEST
TEST
TEST

CH, DL
AX, TAB [DI-2]
[DI], BX
DL, 10
DS : [BP], 1

AL, CH
CL, TAB
VAR1, DH
AX, 100H
DX, 1000H

4.2. Instructiuni de deplasare


1. Deplasare logica la stinga (Shift Logical Left)
SHL R,1
R <-- R*2
SHL M,1
M <-- M*2
SHL R,CL
R <-- R*2CL
SHL M,CL
M <-- M*2CL

CF=MSb(R),OF,SF,ZF,(AF),PF
CF=MSb(M), OF,SF,ZF,(AF),PF
CF=R1616-CL sau R816-CL,OF,SF,ZF,(AF),PF
CF=M1616-CL sau M816-CL,OF,SF,ZF,(AF),PF

SHL
SHL
SHL
SHL

AL, 1
VAR1, 1
BX, CL
TAB [SI], CL

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

2. Deplasare aritmetica la stinga (Shift Arithmetic Left)


SAL R,1
R <-- R*2
CF=MSb(R), OF,SF,ZF,(AF),PF
SAL M,1
M <-- M*2
CF=MSb(M),OF,SF,ZF,(AF),PF
CL
SAL R,CL
R <-- R*2
CF=R1616-CL sau R816-CL,OF,SF,ZF,(AF),PF
SAL M,CL
M <-- M*2CL
CF=M1616-CL sau M816-CL,OF,SF,ZF,(AF),PF

SAL
SAL
SAL
SAL

AX, 1
VAR2, 1
DX, CL
[SI], CL

3. Deplasare logica la dreapta (Shift Logical Right)


SHR R,1
R <-- R/2
SHR M,1
M <-- M/2
SHR R,CL
R <-- R/2CL
SHR M,CL
M <-- M/2CL

CF=LSb(R),OF,SF,ZF,(AF),PF
CF=LSb(M),OF,SF,ZF,(AF),PF
CF=RCL-1,OF,SF,ZF,(AF),PF
CF=MCL-1,OF,SF,ZF,(AF),PF

SHR
SHR
SHR
SHR

BX, 1
[BX], 1
AH, CL
DS : [BP], CL

4. Deplasare aritmetica la dreapta, cu pastrarea semnului (Shift Arithmetic Right)


SAR R,1
R <-- R/2
CF=LSb(R),OF,SF,ZF,(AF),PF
SAR M,1
M <-- M/2
CF=LSb(M),OF,SF,ZF,(AF),PF
SAR R,CL
R <-- R/2CL
CF=RCL-1,OF,SF,ZF,(AF),PF
CL
SAR M,CL
M <-- M/2
CF=MCL-1,OF,SF,ZF,(AF),PF

SAR
SAR
SAR
SAR

CX, 1
[SI], 1
AL, CL
VAR2, CL

4.3. Instructiuni de rotatie


1. Rotatie la stinga (Rotate Left)
ROL R,1
R <-- R rotit cu 1 poz. la stinga
ROL M,1
M <-- M rotit cu 1 poz. la stinga
ROL R,CL
R <-- R rotit cu CL poz. la stinga
ROL M,CL
M <-- M rotit cu CL poz. la stinga

CF= MSb(R),OF
CF= MSb(M),OF
CF= R1616-CL sau R816-CL,OF
CF= M1616-CL sau M816-CL,OF

ROL
ROL
ROL
ROL

DL, 1
[DI+2], 1
DH, CL
VAR1, CL

2. Rotatie la dreapta (Rotate Right)


ROR R,1
R <-- R rotit cu 1 poz. la dreapta
ROR M,1
M <-- M rotit cu 1 poz. la dreapta
ROR R,CL
R <-- R rotit cu CL poz. la dreapta
ROR M,CL
M <-- M rotit cu CL poz. la dreapta

CF= LSb(R),OF
CF= LSb(M),OF
CF= RCL-1,OF
CF= MCL-1,OF

ROR
ROR
ROR
ROR

BX, 1
TAB [BX], 1
AL, CL
[SI] [DI], CL
9

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

3. Rotatie la stinga prin bitul CF (Rotate Left with Carry)


RCL R,1
R <-- perechea R,CF rotita cu 1 poz. la stinga
RCL M,1
M <-- perechea M,CF rotita cu 1 poz. la stinga
RCL R,CL
R <-- perechea R,CF rotita cu CL poz. la stinga
RCL M,CL
M <-- perechea M,CF rotita cu CL poz. la stinga

CF= MSb(R),OF
CF= M15, OF
CF= R16-CL, OF
CF= M16-CL, OF

RCL
RCL
RCL
RCL

CX, 1
TAB [SI], 1
BL, CL
[SI] [BX], CL

4. Rotatie la dreapta prin bitul CF (Rotate Right with Carry)


RCR R,1
R <-- R rotit cu 1 poz. la dreapta
RCR M,1
M <-- M rotit cu 1 poz. la dreapta
RCR R,CL
R <-- R rotit cu CL poz. la dreapta
RCR M,CL
M <-- M rotit cu CL poz. la dreapta

CF= R15, OF
CF= M15, OF
CF= R16-CL,OF
CF= M16-CL,OF

RCR
RCR
RCR
RCR

CL, 1
VAR1, 1
AX, CL
VAR2, CL

5. Instructiuni de lucru cu siruri de date


5.1. Instructiuni de transfer
1. Transfer intre doua siruri cu operanzi expliciti (Move String)
MOVS M8,M8'
initial DI = EA(M8), SI = EA(M8')
- daca DF=0: (DI) <-- (SI)
DI <-- DI+1 = actualizare DI cu 1
SI <-- SI+1 = actualizare SI cu 1
- daca DF=1: (DI) <-- (SI)
DI <-- DI-1 = actualizare DI cu -1
SI <-- SI-1
= actualizare SI cu -1
MOVS M16,M16'

initial DI = EA(M16), SI = EA(M16')


- daca DF=0: (DI+1,DI) <-- (SI+1,SI)
DI <-- DI+2 = actualizare DI cu 2
SI <-- SI+2 = actualizare SI cu 2

MOVS SIRB1, SIRB2

MOVS SIRW1, SIRW2

10

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

- daca DF=1: (DI+1,DI) <-- (SI+1,SI)


DI <-- DI-2 = actualizare DI cu -2
SI <-- SI-2
= actualizare SI cu -2
2. Incarcare acumulator dintr-un sir cu operanzi expliciti (Load String)
LODS AL,M8

LODS AX,M16

initial SI = EA(M8)
- daca DF=0: AL <-- (SI)
actualizare SI cu 1
- daca DF=1: AL <-- (SI)
actualizare SI cu -1
initial SI = EA(M16)
- daca DF=0: AX <-- (SI+1,SI)
actualizare SI cu 2
- daca DF=1: AX <-- (SI+1,SI)
actualizare SI cu -2

LODS AL, SIRB

LODS AX, SIRW

STOS SIRB, AL

STOS SIRW, AX

3. Stocare intr-un sir din acumulator cu operanzi expliciti (Store String)


STOS M8,AL

STOS M16,AX'

initial DI = EA(M8)
- daca DF=0: (DI) <-- AL
actualizare DI cu 1
- daca DF=1: (DI) <-- AL
actualizare DI cu -1
initial DI = EA(M16)
- daca DF=0: (DI+1,DI) <-- AX
actualizare DI cu 2
- daca DF=1: (DI+1,DI) <-- AX
actualizare DI cu -2

11

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

4. Transfer intre doua siruri cu operanzi impliciti (Move String)


dupa initializare cu DI = EA(M8), SI = EA(M8'):
MOVSB
- daca DF=0: (ES:DI) <-- (DS:SI)
DI <-- DI+1 = actualizare DI cu 1
SI <-- SI+1 = actualizare SI cu 1
- daca DF=1: (ES:DI) <-- (DS:SI)
DI <-- DI-1 = actualizare DI cu -1
SI <-- SI-1
= actualizare SI cu -1
dupa initializare cu DI = EA(M16), SI = EA(M16'):
MOVSW
- daca DF=0: (ES:DI+1,DI) <-- (DS:SI+1,SI)
DI <-- DI+2 = actualizare DI cu 2
SI <-- SI+2 = actualizare SI cu 2
- daca DF=1: (ES:DI+1,DI) <-- (DS:SI+1,SI)
DI <-- DI-2 = actualizare DI cu -2
SI <-- SI-2
= actualizare SI cu -2

MOVSB

MOVSW

5. Incarcare acumulator dintr-un sir cu operanzi impliciti (Load String)


dupa initializare cu SI = EA(M8'):
LODSB
- daca DF=0: AL <-- (DS:SI)
SI <-- SI+1 = actualizare SI cu 1
- daca DF=1: AL <-- (DS:SI)
SI <-- SI-1
= actualizare SI cu -1
dupa initializare cu SI = EA(M16'):
LODSW
- daca DF=0: AX <-- (DS:SI+1,SI)
SI <-- SI+2 = actualizare SI cu 2
- daca DF=1: AX <-- (DS:SI+1,SI)
SI <-- SI-2
= actualizare SI cu -2
Mnemonica
Operatie (efect)
Indicatori afectati

LODSB

LODSW

Exemplu de instructiune

6. Stocare intr-un sir din acumulator cu operanzi impliciti (Store String)


12

dupa initializare cu DI = EA(M8):


STOSB
- daca DF=0: (ES:DI) <-- AL
DI <-- DI+1 = actualizare DI cu 1
- daca DF=1: (ES:DI) <-- AL
DI <-- DI-1 = actualizare DI cu -1
dupa initializare cu DI = EA(M16):
STOSW
- daca DF=0: (ES:DI+1,DI) <-- AX
DI <-- DI+2 = actualizare DI cu 2
- daca DF=1: (ES:DI+1,DI) <-- AX
DI <-- DI-2 = actualizare DI cu -2

STOSB

STOSW

7. Prefixul de repetare
REP transfsir

transfsir
CX <-- CX-1
- daca CX#0 se reia transfsir
- daca CX=0 se trece la instructiunea urmatoare

REP MOVSB
REP MOVSW
REP STOSB

5.2. Instructiuni de comparatie


1. Comparatie intre doua siruri cu operanzi expliciti (Compare String)
CMPS M8,M8'
initial DI = EA(M8), SI = EA(M8')
CF,OF,SF,ZF,AF,PF
- daca DF=0: (DI) - (SI)
DI <-- DI+1 = actualizare DI cu 1
SI <-- SI+1 = actualizare SI cu 1
- daca DF=1: (DI) - (SI)
DI <-- DI-1 = actualizare DI cu -1
SI <-- SI-1
= actualizare SI cu -1
Mnemonica
Operatie (efect)
Indicatori afectati
CMPS M16,M16'

initial DI = EA(M16), SI = EA(M16')

CF,OF,SF,ZF,AF,PF

CMPS SIRB1, SIRB2

Exemplu de instructiune
CMPS SIRW1, SIRW2
13

- daca DF=0: (DI+1,DI) - (SI+1,SI)


DI <-- DI+2 = actualizare DI cu 2
SI <-- SI+2 = actualizare SI cu 2
- daca DF=1: (DI+1,DI) - (SI+1,SI)
DI <-- DI-2 = actualizare DI cu -2
SI <-- SI-2
= actualizare SI cu -2
2. Comparatie intre un sir si acumulator cu operanzi expliciti (Scan String)
SCAS AL,M8

SCAS AX,M16

initial SI = EA(M8)
- daca DF=0: AL - (SI)
actualizare SI cu 1
- daca DF=1: AL - (SI)
actualizare SI cu -1
initial SI = EA(M16)
- daca DF=0: AX - (SI+1,SI)
actualizare SI cu 2
- daca DF=1: AX - (SI+1,SI)
actualizare SI cu -2

CF,OF,SF,ZF,AF,PF

SCAS AL, SIRB

CF,OF,SF,ZF,AF,PF

SCAS AX, SIRW

3. Comparatie intre doua siruri cu operanzi impliciti (Compare String)


dupa initializare cu DI = EA(M8), SI = EA(M8'):
CMPSB
- daca DF=0: (ES:DI) - (DS:SI)
CF,OF,SF,ZF,AF,PF
DI <-- DI+1 = actualizare DI cu 1
SI <-- SI+1 = actualizare SI cu 1
- daca DF=1: (ES:DI) - (DS:SI)
DI <-- DI-1 = actualizare DI cu -1
SI <-- SI-1
= actualizare SI cu -1
Mnemonica

Operatie (efect)

Indicatori afectati

CMPSB

Exemplu de instructiune

dupa initializare cu DI = EA(M16), SI = EA(M16'):


14

CMPSW

- daca DF=0: (ES:DI+1,DI) - (DS:SI+1,SI)


CF,OF,SF,ZF,AF,PF
DI <-- DI+2 = actualizare DI cu 2
SI <-- SI+2 = actualizare SI cu 2
- daca DF=1: (ES:DI+1,DI) - (DS:SI+1,SI)
DI <-- DI-2 = actualizare DI cu -2
SI <-- SI-2
= actualizare SI cu -2
4. Comparatie intre un sir si acumulator cu operanzi expliciti (Scan String)
dupa initializare cu SI = EA(M8'):
SCASB
- daca DF=0: AL - (DS:SI)
CF,OF,SF,ZF,AF,PF
SI <-- SI+1 = actualizare SI cu 1
- daca DF=1: AL - (DS:SI)
SI <-- SI-1
= actualizare SI cu -1
dupa initializare cu SI = EA(M16'):
SCASW
- daca DF=0: AX - (DS:SI+1,SI)
CF,OF,SF,ZF,AF,PF
SI <-- SI+2 = actualizare SI cu 2
- daca DF=1: AX - (DS:SI+1,SI)
SI <-- SI-2
= actualizare SI cu -2
5. Prefixul de repetare conditionata
REPE compsir

REPZ compsir

Mnemonica
REPNE compsir

compsir
CX <-- CX-1
- daca (CX#0 si ZF=1) se reia compsir
- daca (CX=0 sau ZF=0) se trece la instructiunea urmatoare
compsir
CX <-- CX-1
- daca (CX#0 si ZF=1) se reia compsir
- daca (CX=0 sau ZF=0) se trece la instructiunea urmatoare
Operatie (efect)
Indicatori afectati
compsir
CX <-- CX-1
- daca (CX#0 si ZF=0) se reia compsir

CMPSW

SCASB

SCASW

REPE CMPSW

REPZ SCASB

Exemplu de instructiune
REPNE CMPSB

15

REPNZ compsir

- daca (CX=0 sau ZF=1) se trece la instructiunea urmatoare


compsir
CX <-- CX-1
- daca (CX#0 si ZF=1) se reia compsir
- daca (CX=0 sau ZF=0) se trece la instructiunea urmatoare

REPNZ SCASW

6. Instructiuni de transfer al comenzii


6.1. Instructiuni de salt neconditionat
1. Salt neconditionat intrasegment direct (Jump)
JMP etich
IP <-- IP + DEPL(etich)

JMP ET1

JMP AX
JMP OFFS

3. Salt neconditionat intersegment direct (Jump)


JMP etich
IP <-- OFFSET(etich)
CS <-- SEG(etich)
= salt la etich in alt segment

JMP ET2

4. Salt neconditionat intersegment indirect (Jump)


JMP M32
IP <-- (M+1,M)
CS <-- (M+3,M+2) = salt la ((M+3,M+2) : (M+1,M))

JMP ADRLOG

= salt la etich

2. Salt neconditionat intrasegment indirect (Jump)


JMP R16
IP <-- R16
= salt la (R16)
JMP M16
IP <-- M16
= salt la (M16)

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

6.2. Instructiuni de apel de subprogram


1. Apel de subprogram intrasegment direct (Call)
16

CALL etich

STIVA <-- IP
IP <-- IP + DEPL(etich)

2. Apel de subprogram intrasegment indirect (Call)


CALL R16
STIVA <-- IP
IP <-- R16
CALL M16
STIVA <-- IP
IP <-- M16
3. Apel de subprogram intersegment direct (Call)
CALL etich FAR
STIVA <-- CS
STIVA <-- IP
IP <-- OFFSET(etich)
CS <-- SEG(etich)
4. Apel de subprogram intersegment indirect (Call)
CALL M32 FAR
STIVA <-- CS
STIVA <-- IP
IP <-- (M+1,M)
CS <-- (M+3,M+2)

CALL ET3

CALL CX

CALL OFF

CALL ET FAR

CALL ADRLOGICA

RET

RET 4

6.3. Instructiuni de revenire din subprogram


1. Revenire din subprogram intrasegment fara POP (Return)
RET
IP <-- STIVA
2. Revenire din subprogram intrasegment cu POP (Return)
RET D16
IP <-- STIVA
SP <-- SP + D16
Mnemonica

Operatie (efect)

3. Revenire din subprogram intersegment fara POP (Return)


RET
IP <-- STIVA
CS <-- STIVA

Indicatori afectati
-

Exemplu de instructiune
RET

17

4. Revenire din subprogram intersegment cu POP (Return)


RET D16
IP <-- STIVA
CS <-- STIVA
SP <-- SP + 2 + D16

RET 8

6.4. Instructiuni de salt conditionat


1. Salt conditionat direct apropiat (Jump)
Jconditie etich
- daca conditie este indeplinita atunci:
IP <-- IP + DEPL(etich)
= salt la etich
- altfel trece la instructiunea urmatoare
Mnemonica

Conditie de salt

1.a. Pentru orice tip de valori:


JC
etich
(CF=1)
JNC etich
(CF=0)
JE
etich
(ZF=1)
JZ
etich
(ZF=1)
JNE etich
(ZF=0)
JNZ etich
(ZF=0)
JP
etich
(PF=1)
JPE etich
(PF=1)
JNP etich
(PF=0)
JPO etich
(PF=0)
JCXZ etich
(CX=0)
Mnemonica
Conditie de salt

JZ REZNUL

Interpretare conditie
rezultat ALU cu transport
rezultat ALU fara transport
rezultat ALU nul
rezultat ALU nul
rezultat ALU nenul
rezultat ALU nenul
rezultat ALU cu numar par de 1
rezultat ALU cu numar par de 1
rezultat ALU cu numar impar de 1
rezultat ALU cu numar impar de 1
contor nul
Interpretare conditie

1.b. Pentru valori fara semn:


JA
etich
JNBE etich
JAE etich

(CF=0) si (ZF=0)
(CF=0) si (ZF=0)
(CF=0)

rezultat ALU > 0


rezultat ALU > 0
rezultat ALU >= 0
18

JNB
JB
JNAE
JBE
JNA

etich
etich
etich
etich
etich

(CF=0)
(CF=1)
(CF=1)
(CF=1) sau (ZF=1)
(CF=1) sau (ZF=1)

rezultat ALU >= 0


rezultat ALU < 0
rezultat ALU < 0
rezultat ALU <= 0
rezultat ALU <= 0

1.c. Pentru valori cu semn:


JS
JNS

etich
etich

(SF=0)
(SF=1)

rezultat ALU negativ


rezultat ALU pozitiv

JO
JNO

etich
etich

(OF=1)
(OF=0)

rezultat ALU cu depasire de gama


rezultat ALU fara depasire de gama

JG
JNLE
JGE
JNL
JL
JNGE
JLE
JNG

etich
etich
etich
etich
etich
etich
etich
etich

(SF=OF) si (ZF=0)
(SF=OF) si (ZF=0)
(SF=OF)
(SF=OF)
(SF<>OF)
(SF<>OF)
(SF<>OF) sau (ZF=1)
(SF<>OF) sau (ZF=1)

rezultat ALU > 0


rezultat ALU > 0
rezultat ALU >= 0
rezultat ALU >= 0
rezultat ALU < 0
rezultat ALU < 0
rezultat ALU > 0
rezultat ALU > 0

Mnemonica

Operatie (efect)

Indicatori afectati

Exemplu de instructiune

6.5. Instructiuni iterative


1. Ciclu cu test final (Loop)
LOOP etich
- daca CX#0 atunci salt la etich
- altfel (CX=0) trece la instructiunea urmatoare

LOOP RELUARE
19

2. Ciclu cu test final cu dubla conditie (Loop)


LOOPE etich
- daca (CX#0 si ZF=1) atunci salt la etich
- altfel (CX=0 sau ZF=0) trece la instructiunea urmatoare
LOOPZ etich
- daca (CX#0 si ZF=1) atunci salt la etich
- altfel (CX=0 sau ZF=0) trece la instructiunea urmatoare
LOOPNE etich
- daca (CX#0 si ZF=1) atunci salt la etich
- altfel (CX=0 sau ZF=1) trece la instructiunea urmatoare
LOOPNZ etich
- daca (CX#0 si ZF=1) atunci salt la etich
- altfel (CX=0 sau ZF=1) trece la instructiunea urmatoare

LOOPE OPNOU

LOOPZ NOUTEST

LOOPNE REV

LOOPNZ BUCLA1

6.6. Instructiuni de control al intreruperilor


1. Apel intrerupere software (Interupt)
INT tip (= D8)
STIVA <-- F
= salvare flag-uri
IF, TF
IF <-- 0 , TF <-- 0
= invalidare intreruperi
STIVA <-- CS
= salvare segment adresa
STIVA <-- IP
= salvare offset adresa
CS <-- (4*tip+3, 4*tip+2)
= incarcare segment adresa subprogram
IP <-- (4*tip+1, 4*tip)= incarcare offset adresa subprogram
2. Revenire in programul intrerupt (Return from Interupt)
IRET
IP <-- STIVA
= restabilire offset adresa
Tot registrul F
CS <-- STIVA
= restabilire segment adresa
F <-- STIVA
= restabilire flag-uri
Mnemonica
Operatie (efect)
Indicatori afectati

INT 21H

IRET
Exemplu de instructiune

7. Instructiuni de control al procesorului


7.1. Operatii asupra flag-urilor
1. Fortare CF = 1 (Set Carry)
STC
CF <-- 1

= transport = 1

CF

STC
20

2. Fortare CF = 0 (Clear Carry)


CLC
CF <-- 0
= transport = 0
3. Complementare CF (Complement Carry)
CMC
CF <-- CF\ = complementare transport
4. Fortare DF = 1 (Set Direction)
STD
DF <-- 1
= directie inapoi la parcurgerea sirurilor
5. Fortare DF = 0 (Clear Direction)
CLD
DF <-- 0
= directie inainte la parcurgerea sirurilor
6. Fortare IF = 1 (Set Interupt)
STI
IF <-- 1
= validare intreruperi
7. Fortare IF = 0 (Clear Interupt)
CLI
IF <-- 0
= invalidare intreruperi

CF

CLC

CF

CMC

DF

STD

DF

CLD

IF

STI

IF

CLI

7.2. Sincronizare externa


1. Oprire (Halt)
HLT

UCP intra in starea HALT (din care iese prin: NMI sau RESET sau INTR si IF)

2. Stare de asteptare (Wait)


WAIT
asteapta pana intrarea TEST=0

HLT

WAIT

NOP

7.3. Nici o operatie (no operation)


NOP

nici o operatie

21

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1

Arhitectura microprocesorului Intel 8086


Scopul lucrrii
a) Studiul arhitecturii interne a microprocesorului Intel 8086.
b) Studiul resurselor interne (registre) si externe (memoria principala) ale microprocesorului I 8086.
c) Programarea microprocesorului Intel 8086.

1. Microprocesorul Intel 8086


1.1. Sisteme cu microprocesor Intel 8086
Microprocesorul este o unitate centrala de prelucrare (UCP) realizata intr-un singur circuit
integrat. Un sistem digital de prelucrare realizat cu ajutorul unui microprocesor este numit
microcalculator. Microcalculatorul are trei functii principale: prelucrarea informatiilor in UCP,
stocarea informatiilor in memorie si transferul informatiilor in interior si cu mediul exterior.
Prin intermediul unor interfete, numite porturi de intrare/iesire (IO), microcalculatorul
transfera informatii cu elementele mediului exterior, numite echipamentele periferice. Echipamente
periferice sunt: tastatura, monitor, imprimanta, disc hard, discheta, cititor de CD-ROM, etc.
Microprocesorul Intel 8086 este o unitate centrala de prelucrare care este formata din 2
componente:

1. Unitatea de executie (UE) decodifica instructiunile numerice, da comenzi interne pentru


efectuarea calculelor si comenzi externe catre cea de-a doua unitate. UE contine 8 locatii de
memorie interna numite registre de uz general. Registrele ofera o capacitate de memorare mica dar
si un acces (citire sau scriere) foarte rapid.
Pentru a stoca o cantitate mai mare de date (codurile numerice ale instructiunilor si
variabilele programelor) este necesara conectarea microprocesorului cu o memorie de capacitate
mare, numita memorie principala (MP). Desigur ca accesul la MP este mult mai lent.
2. Unitatea de interfata cu bus-urile (UI) calculeaza adresele MP si IO, transfera datele intre
UE si MP sau intre UE si I/O, si transfera catre UE codurile numerice ale instructiunilor citite din
MP.
Pentru a identifica in mod unic fiecare dintre locatiile MP si IO, este necesara asocierea unor
referinte numerice numite adrese. De aceea UI este responsabila cu generarea adreselor catre MP.

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Microprocesorul Intel 8086 lucreaza cu date de 16 biti, numite cuvinte de date. Transferurile
intre UE si UI sau intre microprocesor si MP sau IO se fac in general sub forma de cuvinte de date
de 16 biti. De aceea bus-ul intern prin care comunica UE si UI al microprocesorului Intel 8086 este
de 16 biti.
Pentru compatibilitate cu microprocesoarele care lucrau cu date de 8 biti, si Intel 8086 poate
transfera valori sub forma unor octeti (date de 8 biti). De aceea locatiile MP si ale IO sunt octeti.
Microprocesorul Intel 8086 poate lucra cu maximum 1 M octeti de MP, adica poate genera
cel mult 1 M de adrese distincte. Deoarece 1M = 216 , inseamna ca adresele la microprocesorul Intel
8086 sunt reprezentabile cu 20 de biti.
In figura 1 este prezentata schema bloc a unui sistem cu microprocesor I8086.
Microprocesorul Intel 8086 comunica cu exteriorul (MP si IO) prin 3 bus-uri sau magistrale:
- bus-ul de date (BD), care are 16 biti;
- bus-ul de adrese (BA), care are 20 biti;
- bus-ul de comenzi (BC).

microcalculator

microprocesor I8086
UE

date

UIB

= memorie

date, adrese

MP

I/O

date

echipamente
periferice

Fig.1. Schema bloc a unui sistem cu microprocesor I8086.

1.2. Arhitectura microprocesorului Intel 8086


Structura microprocesorului Intel 8086 este de tip "pipe-line" (prezinta paralelism temporal)
permitand efectuarea in acelasi timp a doua operatii diferite de catre cele doua unitati diferite ale
sale - UE decodifica instructiunile si efectueaza calculele, in timp ce UI calculeaza adresele si
efectueaza transferurile.
Astfel, cele doua unitati ce compun UCP efectueaza autonom secvente de operatii proprii,
transferindu-si in acelasi timp informatii. Secventele de operatii efectuate de cele doua unitati ale
microprocesorului pentru a executa instructiunile sunt numite cicluri de instructiune, pentru UE si
cicluri masina de bus, pentru UI.

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Unitate de Executie
UE

Unitate de Interfata
UI

20

16 biti
offset

8 biti
AX
BX
CX
DX

bus intern

AH
BH
CH
DH

DI
SI
BP
SP

16

registre de date

ALU
16

DECODIFICARE
COD OPERATIE
SI COMANDA

20

adresa fizica

16
INTERFATA

16

BUS-URI

busuri externe
4
A16-19
16
AD0-15
BC

instructiuni

comenzi

16

segment

date, comenzi

16 operanzi

16

rezultat

16
16

REGISTRE
TEMPORARE

16
CS
DS
ES
SS
IP

16

registre de adresare

16

16
16

16

AL
BL
CL
DL

1 2 3 4 5 6
8

BA+BD
multiplexate
in timp

COADA DE ASTEPTARE (Q)


CODURI INSTRUCTIUNI

reg. Flag-uri
16

Fig.2 Arhitectura interna a microprocesorului Intel 8086


Unitatea de executie (UE) se compune din:
1. Unitatea aritmetica-logica (ALU), care executa operatii aritmetice, logice, deplasari si
rotatii.

2. Registrele temporare (RT), care preiau operanzii de pe bus-ul intern si ii ofera unitatii
ALU. Impreuna cu ALU formeaza un automat RALU.
3. Registrul de flag-uri F (biti indicatori de stare a ultimei operatii ALU), actualizat de catre
ALU.

4. Blocul de comanda, care:


- decodifica codul instructiunii curente (preluat din coada de instructiuni Q);
- da comenzi interne catre celelalte blocuri ale UE pentru:
- calculul adreselor efective ale operanzilor din MP sau IO (daca este cazul),
- executia operatiei (ALU, transfer, etc.);
- da comenzi externe (informatii / cereri) catre UI pentru:
- calculul adreselor fizice a operandului din MP sau IO (daca este cazul),
- transferul operanzilor dinspre/catre MP sau IO (daca e cazul),
- transferul (citirea) operanzilor de tip imediat din coada de asteptare a UI (daca e
cazul),
- calculul adresei urmatoarei instructiuni.
Se observa ca unitatea de executie este complet separata de exterior, toate sarcinile privind
transferul cu exteriorul revenind unitatii de interfata.
3

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Unitatea de interfata cu bus-urile (UI) se compune din:

1. Blocul de interfata intre bus-uri, care face toate transferurile la cererea UE:
- cicluri de scriere in MP sau IO (dinspre UCP catre exterior);
- cicluri de citire din MP sau IO (dinspre exterior catre UCP).
2. Coada de asteptare a codurilor de instructiune (Q), care:
- este incarcata cu coduri de instructiune (ciclu FETCH) de catre blocul de interfata atunci
cind UE nu cere transferuri de date;
- este inactiva (UCP executa cicluri inactive de bus) daca este plina si nu se cer transferuri;
- este stearsa complet (resetata) daca instructiunea curenta este de salt.
3. Blocul de calcul al adreselor fizice incluzand:
- registrele segment, care contin componenta sement a adresei locatiei MP accesate;
- registrul indicator al instructiunii curente (IP), care contine componenta offset a adresei
instructiunii curente;
- unitatea de deplasare-adunare pentru calculul adresei fizice din componentele segment si
offset.

2. Registrele microprocesorului Intel 8086


Registrele de capacitate 16 biti ale microprocesorului Intel 8086 pot fi clasificate din punct
de vedere al rolului pe care il au in executia instructiunilor in 4 grupuri:
- registrele generale: AX, BX, CX, DX, SP, BP, SI, DI;
- registrele segment: CS, DS, ES, SS;
- registrul indicator al adresei instructiunii curente: IP;
- registrul de flag-uri: F.

2.1. Registrele generale


Registrele generale se pot imparti in doua seturi de registre:
- registre de date: AX, BX, CX, DX;
- registre de adresare: SP, BP, SI, DI;

1. Registrele de date se deosebesc prin faptul ca jumatatile (de capacitate 8 biti) lor pot fi
accesate (citite sau scrise) separat. Aceasta inseamna ca fiecare registru de date poate fi folosit ca un
registru de 16 biti sau ca 2 registre de 8 biti :
- AX (acumulator) de 16 biti, poate fi accesat ca AH si AL, ambele de 8 biti;
- BX (baza in adresarea datelor) de 16 biti, poate fi accesat ca BH si BL, ambele de 8 biti;
- CX (contor) de 16 biti, poate fi accesat ca CH si CL, ambele de 8 biti;
- DX (date) de 16 biti, poate fi accesat ca DH si DL, ambele de 8 biti.

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Registrele de date sunt utilizate in majoritatea instructiunilor aritmetice si logice. Majoritatea
instructiunilor aritmetice utilizeaza in acelasi mod toate registrele.
Exista si instructiuni aritmetice pentru care anumite registre generale au intrebuintari
speciale, prezentate in continuare:
AX
- operatii de intrare/iesire pe 16 biti, implicit in inmultiri si impartiri pe 16 biti;
AL
- operatii de intrare/iesire pe 8 biti, implicit in translatii, aritmetica BCD, inmultiri si
impartiri pe 8 biti;
AH
- implicit in inmultiri si impartiri pe 8 biti;
BX
- operatii cu memoria - adresare indirecta, implicit in translatii;
CX
- implicit in operatii cu siruri sau bucle;
CL
- operatii de deplasare sau rotatie cu mai mult de 1 pozitie;
DX
- operatii de intrare/iesire - adresare indirecta, implicit in inmultiri si impartiri pe 16
biti.

2. Registrele de adresare, de 16 biti, se impart la rindul lor in:


- registre indicatoare de adresa in stiva (pointer):
- SP (Stack Pointer) - contine adresa curenta a varfului stivei,
- BP (Base Pointer) - implicit contine adresa de baza pentru adresarea indirecta a stivei ;
- registre indicatoare de adresa pentru siruri (index):
- DI (Destination Index) - implicit contine adresa curenta pentru sirul destinatie,
- SI (Source Index) - implicit contine adresa curenta pentru sirul sursa.
Registrele de adresare pot fi utilizate si pentru date in anumite instructiuni aritmetice si
logice.

Registrele pointer contin componente offset ale adreselor din stiva (adresele relative in
segmentul de stiva curent). Registrul BP poate fi utilizat si pentru adresarea in cadrul altor segmente.
Registrele index contin componente offset ale adreselor variabilelor (adresele relative in
segmentul de date curent). Ele sunt utilizate ca registre de adresare in instructiunile de transfer sau
prelucrare de siruri de octeti (caractere). In acest ultim caz SI contine adresa relativa curenta a sirului
destinatie in cadrul segmentului de date curent (DS), iar DI contine adresa relativa curenta a sirului
sursa in cadrul segmentului de date suplimentar (ES).

2.2. Registrele segment


Spatiul de memorie de 1 Moctet este impartit in segmente logice de lungime 64K octeti.
UCP Intel 8086 are acces la patru segmente deodata prin intermediul a patru registre segment.
Cele 4 registre segment sunt:
- CS (Cod Segment) - contine componenta segment a adreselor codului (instructiunilor
programului);
- DS (Data Segment) - contine componenta segment a adreselor variabilelor (segment date curent);
- ES (Extra Segment) - contine componenta segment a adreselor variabilelor (segment suplimentar);
5

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
- SS (Stack Segment) - contine componenta segment a adreselor datelor din segmentul stiva.

Instructiunea care urmeaza sa se execute se gaseste in segmentul a carui adresa se afla in


registrul CS (Cod Segment), la adresa relativa continuta in registrul IP.
Continutul registrului DS defineste segmentul de date curent. Toate referirile la datele din
memorie, cu exceptia celor prin registrele BP si SP sau registrul DI in instructiunile pentru siruri,
utilizeaza in mod implicit segmentul referit de registrul DS.
Continutul registrului ES defineste segmentul de date suplimentar. Referirile la date in
instructiunile pentru siruri utilizeaza in mod implicit segmentul referit de registrul ES.
Continutul registrului SS defineste segmentul curent al stivei. Toate referirile la datele din
memorie prin registrele BP si SP utilizeaza in mod implicit segmentul referit de registrul SS.

2.3. Alte registre


Registrul indicator al adresei instructiunii curente IP (Instruction Pointer) este un registru de
16 biti care contine componenta offset a adresei instructiunii in segmentul de cod curent. Programele
nu au acces direct la IP, dar exista instructiuni care il modifica si il incarca sau il descarca prin stiva.
Registrul de flag-uri F cuprinde bitii indicatori de stare si control numiti si biti indicatori de
conditii, fanioane sau flag-uri. Indicatorii de conditii sunt utilizati pentru a memora informatii
referitoare la rezultatul unor operatii aritmetice si logice (OF,SF,ZF,AF,PF,CF) si pentru memorarea
unor informatii de control al microprocesorului (TF,DF,IF).
Cei 9 biti mentionati sunt plasati in registrul F ca in figura 3.
X X X X O D I

T S Z X A X P X C

Fig. 3. Continutul registrului indicatorilor de stare si control


Semnificatiile flag-urilor sint urmatoarele:
- CF (Carry Flag) - indicator de transport - reflecta transportul in exterior al bitului cel mai
semnificativ al rezultatului operatiilor aritmetice. Astfel, acest indicator poate fi folosit in cazul
operatiilor in dubla precizie. Valoarea CF = 1 semnifica fie transport la adunare fie imprumut la
scadere. De asemenea, indicatorul CF este modificat si de instructiunile de deplasare si rotatie.
- PF (Parity Flag) - indicator de paritate - este 1 daca rezultatul are paritate para (contine un
numar par de biti 1). Acest indicator este folosit de instructiunile de aritmetica zecimala.
- AF (Auxiliary Carry Flag) - indicator de transport auxiliar - este 1 daca a fost transport de
la jumatatea de octet inferioara la jumatatea de octate superioara (de la bitul 3 la bitul 4). Acest
indicator este folosit de instructiunile de aritmetica zecimala.
6

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
- ZF (Zero Flag) - indicatorul de zero - este 1 daca rezultatul operatiei a fost zero.
- SF (Sign Flag) - indicatorul de semn - este 1 daca cel mai semnificativ bit al rezultatului
(MSb) este 1, adica in reprezentarea numerelor in complement fata de 2 (C2) rezultatul este negativ
(are semn -).
- OF (Overflow Flag) - indicatorul de depasire aritmetica (a gamei de valori posibil de
reprezentat) - este 1 daca dimensiunea rezultatului depaseste capacitatea locatiei de destinatie si a
fost pierdut un bit (indica la valorile cu semn faptul ca se "altereaza" semnul).
- IF (Interrupt Flag) - indicatorul de validare a intreruperilor - prin valoarea lui 1 permite
UCP sa recunoasca cererile de intrerupere externe mascabile. Prin valoarea 0 intreruperile externe
mascabile vor fi invalidate. Acest indicator nu afecteaza intreruperile interne sau pe cele externe
nemascabile.

3. Memoria principala a unui sistem cu microprocesor


Microprocesorul INTEL 8086 poate adresa un spatiu de memorie principala (MP) de
1Moctet. Instructiunile si datele, pentru a oferi o utilizare eficienta a memoriei, pot fi stocate in
memorie fara sa conteze alinierea lor.
Conform conventiei INTEL, datele formate din mai multi octeti (multioctet) sunt intotdeauna
memorate cu octetul cel mai semnificativ (MSB) la locatia de adresa cea mai mare. Asadar octetul
cel mai putin semnificativ (LSB) este memorat la adresa cea mai mica din grupul de octeti ai unei
date multioctet.

3.1. Gestiunea memoriei principale. Segmentarea


Microprocesorul Intel 8086 vede memoria organizata ca un grup de segmente. Un segment
este un bloc de memorie, constituit din locatii de memorie contigue, de dimensiune 64 Kocteti.
Fiecare segment poate fi accesat (poate fi citit sau scris) in mod independent. Pentru aceasta
este necesar ca fiecare segment sa poata fi adresat independent. De aceea un segment are asociata o
adresa de baza, care este adresa locatiei la care incepe segmentul. Aceasta adresa este multiplu de
16.
Segmentele pot fi adiacente, disjuncte, partial suprapuse sau suprapuse complet (ca in figura
4). O locatie fizica poate sa apartina unuia sau mai multor segmente. Fiecare program (aplicatie)
defineste si utilizeaza segmentele diferit.
Spatiul de memorie accesibil la un moment dat este de 64 K octeti pentru cod (prin
intermediul CS), 64 K octeti pentru stiva (prin SS), 128 K octeti pentru date (prin DS si ES) (vezi
figura 4).
7

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1

00000H

segmente
de date
(DS=ES=0)
suprapuse

:
:
000FFH
00100H
:
:
10000H

segmente
partial
suprapuse

segment
de stiva
(SS=10H)

:
:
10100H

zona
neacoperita
cu segmente

segmente
disjuncte

:
:
0F0000H
:
:
0FFFFFH

segment
de cod
(CS=F000H)

Fig. 4. Exemplu de organizare a memoriei in segmente

3.2. Generarea adresei fizice


Fiecare locatie de memorie are o adresa propriu-zisa, numita adresa fizica, pe care
microprocesorul Intel 8086 o calculeaza din cele doua componente, segment si offset, ale adresei
logice.

Adresa fizica este o valoare de 20 biti care identifica unic o locatie din spatiul de adresare.
Adresa fizica poate fi in domeniul 0H ... 0FFFFFH.
Pentru ca programele sa fie relocabile, microprocesorul foloseste insa o adresa logica pentru
a calcula adresa fizica.
Adresa logica consta dintr-o componenta segment de 16 biti si o componenta offset de 16
biti. Din componenta segment microprocesorul poate calcula adresa de baza (de inceput) a
segmentului prin inmultirea cu 10 H = 10000 B.
Adresa fizica se calculeaza adunand la adresa de baza a segmentului componenta offset. De
aceea componenta offset se mai numeste si deplasare, adresa relativa sau adresa efectiva, iar adresa
fizica se mai numeste si adresa absoluta.
Notatia consacrata pentru adresa logica este urmatoarea:

segment : offset
Calculul adresei fizice se face cu formula:

segment * 10 H + offset
8

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
unde: segment * 10 H
este adresa de baza a segmentului,
offset este adresa relativa la baza segmentului:
Deoarece inmultirea cu 10 H = 10000 B este echivalenta cu deplasarea cu o cifra
hexazecimala la stanga, respectiv cu deplasarea cu 4 cifre binare (biti) la stanga, rezulta ca adresa
fizica se calculeaza prin deplasarea cu 4 biti la stanga a segmentului si adunarea cu offset-ul, asa
cum este ilustrat in exemplul din figura 5.

Adresa
logica
1A30H : 0124H

15
0
Segmentul
1 A 3 0
0 1
15

Deplasare stinga 4 biti


1 A 3 0 0

2 4
0

Offset-ul

0 1

Adresa
fizica
1A424H

Baza segmentului

2 4

1 A 4 2 4

Spre memorie

Fig. 5. Calculul adresei fizice din adresa logica


Pentru orice locatie de memorie, adresa de baza a segmentului este adresa primului octet al
segmentului care contine locatia, iar adresa relativa este distanta in octeti de la inceputul
segmentului pina la locatia respectiva (vezi figura 6).
:

BAZA
SEGMENT
F000H
ADRESA
LOGICA

ADRESA
FIZICA
FFFF0H

BAZA
SEGMENT
FFF0H

OFFSET
FFF0H

F0000H
F0001H
F0002H
F0003H
:
FFFEDH
FFFEEH
FFFEFH
FFFF0H
FFFF1H
FFFF2H

OFFSET
00F0H

Fig. 6. Adresa logica (16 biti + 16 biti) si adresa fizica (20 biti)
Aceeasi locatie poate fi accesata (citita sau scrisa) prin diferite adrese logice. De exemplu,
din adresa logica F000H : FFF0H se calculeaza adresa fizica F000H * 10H + FFF0H = FFFF0H, iar
din adresa logica FFF0H : 00F0H se calculeaza adresa fizica FFF0H *10H + F0H = FFFF0H.
Unitatea de interfata cu magistrala (UI) obtine adresa logica a unei locatii de memorie diferit
in functie de modul de adresare a memoriei.
Structura pe segmente a memoriei UCP Intel 8086 face posibila scrierea unor programe care
sunt independente de pozitia lor in memorie, adica sint relocabile dinamic.
Pentru ca un program sa fie relocabil dinamic trebuie sa fie scris astfel incat sa nu altereze
registrele sale segment si sa nu faca transferuri directe la o locatie in afara segmentului de cod.
Aceasta permite programului sa fie mutat oriunde in memoria disponibila, atita timp cit registrele
segment sunt actualizate cu noua adresa de baza.
9

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1

4. Programarea microprocesorului Intel 8086


Microprocesorul Intel 8086 efectueaza prelucrari sub comanda unui program numit si
program de aplicatie. Programul este o secventa de instructiuni aflata in memoria principala.

Instructiunea este o comanda elementara data UCP in vederea executarii:


- operatiilor asupra unor date (transferuri, aritmetice-logice, deplasari, rotatii, etc.);
- comenzilor in vederea selectarii instructiunilor urmatoare, sau trecerii UCP in stari speciale (ex.
asteptarea producerii unor evenimente/semnale externe numite intreruperi);
- unor operatii auxiliare.
Instructiunile sint codificate in cod binar, ocupind in memorie 1-6 octeti.
Codul instructiunii microprocesorului Intel 8086 este format din:
- codul operatiei (primii 1-2 octeti), care specifica (codifica):
- tipul operatiei;
- tipul operanzilor (8 sau 16 biti, etc.);
- sursa operanzilor (interna sau externa);
- destinatia rezultatelor operatiilor ALU;
- modul de calcul al EA (daca este cazul).
- operanzii de tip imediat (daca exista):
- date;
- adrese.
Exemplu de codificare:

4.1. Etapele dezvoltarii unui program pentru microprocesorul Intel 8086


Desi limbajele de nivel inalt sunt preferate in general datorita posibilitatilor de structurare a
programelor, in cazul sistemelor dedicate realizate cu microprocesor, este util si uneori necesar ca o
parte sau uneori intregul program sa fie scris in limbaj de asamblare.
Principalul avantaj al programelor scrise in limbaj de asamblare este viteza maxima de
executie. Acesta deriva din faptul ca in limbaj de asamblare operatiile limbajului (instructiunile)
sunt cele ale microprocesorului.

10

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
O alta caracteristica a limbajului de asamblare este faptul ca referintele simbolice (etichete,
variabile) sunt cele ale unor elemente din memorie (corespund unor adrese).
Procesul prin care se ajunge de la punerea unei probleme pe care trebuie sa o rezolve
microprocesorul la crearea unui program care sa indeplineasca corect cerintele acelei probleme se
numeste dezvoltare a acelui program.

Etapele dezvoltarii unui program pentru microprocesorul Intel 8086 sunt:


1. Conceperea programului in limbaj de asamblare.
2. Editarea programului cu ajutorul unui editor de texte, obtinandu-se textul sursa.
3. Asamblarea textului sursa, obtinandu-se codul obiect.
4. Corectarea eventualelor erori de asamblare, reluandu-se etapa 2 daca este cazul.
5. Editarea de legaturi a codului obiect, obtinandu-se codul executabil.
6. Corectarea eventualelor erori de editare de legaturi, reluandu-se etapa 2 daca este cazul.
7. Lansarea in executie a programului, comparandu-se efectul cu cel dorit.
8. Corectarea eventualelor erori conceptie, reluandu-se etapa 1 daca este cazul.

Asamblorul este un sistem software (SW) care asista programatorul in elaborarea


programelor in cod masina. Programul asamblor converteste reprezentarile simbolice ale
instructiunilor in configuratii binare obtinind echivalentele in cod masina ale instructiunilor.
Asamblorul este de fapt un compilator simplificat pentru programe sursa scrise in limbaj de
asamblare. Asamblarea se face de obicei in doi pasi:
- la prima parcurgere a textului se culeg toate referintele simbolice (denumirile) si se
introduc intr-un tabel de simboluri;
- la a doua parcurgere a textului sursa se face traducerea folosind informatiile din tabel.
Informatiile simbolice intalnite de asamblor in textul sursa al unei sectiuni pot fi:
- elemente absolute (coduri de operatii, constante, nume simbolice ale instructiunilor din
sectiunile absolute);
- informatii relocabile, a caror valoare depinde de pozitia lor relativa in sectiune si care poate
sa difere de la o executie la alta, in functie de adresa de incarcare a sectiunii in memorie; valoarea
unui element relocabil este data de pozitia definitiei sale in textul sursa, fata de inceputul sectiunii;
- referinte externe (simboluri globale) - nume simbolice definite intr-o sectiune si referite in
late sectiuni si a caror valoare se stabileste numei in momentul legarii sectiunilor intr-un program
unic.
Rezultatul asamblarii este un text in forma binara (cod obiect) in care se pastreaza in forma
initiala numai referintele externe. In plus se furnizeaza informatii indicind locul referintelor
relocabile pentru ca in momentul incarcarii valorile lor sa devina referinte absolute.
Combinarea sectiunilor se face de catre un program editor de legaturi prin rezolvarea
referintelor externe (adica inlocuirea numelor cu adrese din memorie) si adaugarea eventual a
rutinelor din bibliotecile standard (care sint pastrate tot intr-o forma relocabila).
Programul rezultat este deja pus intr-o forma interna, direct executabila, el trebuind eventual
numai relocatat de catre un program locator. Locatorul este apelat in momentul punerii in executie a
programului creat.

11

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1

Executia poate fi obtinuta fie ca o comanda data sistemului de operare din linia de comanda,
fie prin lansarea in executie dintr-un mediu specializat. Un astfel de mediu specializat este
depanatorul simbolic, care permite executia instructiune cu instructiune cu urmarirea resurselor
(registre, flag-uri, memorie, adrese, stiva, etc.).
Exemple de programe utilizate in loborator pentru dezvoltarea unui program:
- EDIT
= editor de texte pentru sistemul de operare MS-DOS,
- BC
= mediu de dezvoltare pentru programe scrise in C, C ++, utilizabil ca editor de texte,
- TURBO
= mediu de dezvoltare pentru programe scrise in Pascal, utilizabil ca editor de texte,
- TASM
= asamblor,
- TLINK
= editor de legaturi,
- TD
= depanator simbolic.

4.2. Depanatorul simbolic Turbo Debugger


Depanatorul simbolic Turbo Debugger (TD) este o componenta a mediilor de dezvoltare
Pascal si C in variantele Turbo sau Borland actuale. El permite vizualizarea resurselor unui PC
(Personal Computer), care este un sistem echipat cu microprocesor, in general din familia Intel
80x86.
Resursele sunt interne (registrele microprocesorului) sau externe (valorile unor locatii de
memorie principala). Ele pot fi urmarite in timpul executiei unui program in cod masina sau in
limbaj de nivel inalt (Pascal, C), instructiune cu instructiune sau dupa executia unei secvente de
instructiuni.
Pe ecran resursele apar in 5 subferestre, dupa cum urmeaza:
- subfereastra codului programului (continutul memoriei principale asociate segmentului de
cod), astfel: - in stanga adresele, in forma segment : offset,
- in mijloc codul masina numeric,
- in dreapta codul simbolic (instructiunile in limbaj masina),
- subfereastra registrilor microprocesorului,
- subfereastra flag-urilor,
- subfereastra memoriei principale (continutul memoriei principale asociate segmentului
specificat), astfel:
- in stanga adresele, in forma segment : offset,
- in mijloc codurile numerice,
- in dreapta codurile ASCII asociate,
- subfereastra stivei (continutul memoriei principale asociate segmentului de stiva).
= F
File Edit View Run Breakpoints Data Options Window Help

12

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
cs:0000 > B83454
mov ax,5434
cs:0003 8ED8
mov ds,ax
cs:0005 A10000
mov ax,[0000]
cs:0008 8B1E0200
mov bx,[0002]
cs:000C 03060400
add ax,[0004]
cs:0010 A30800
mov [0008],ax
cs:0013
131E0600
adc
bx,[0006]
cs:0017
891E0A00
mov [000A],bx
cs:001B B44C
mov ah,4C
cs:001D CD21
int
21
ds:0000 CD 20 FF 9F 00 9A F0 FE ds:0008 1D F0 E0 01 45 1B AA 01 - _ E _ _
ds:0010 45 1B 89 02 A0 15 12 07 E _ _ _ _
ds:0018 01 01 01 00 02 FF FF FF _ __ _
F1-Help
F2-Bkpt
F3-Mod
F4-Here
F5-Zoom
F6-Next
F7-Trace
F8-Step
F1
F2
F3
F4
F5
F6
F7
F8

ax 0000
c=0
bx 0000
z=0
cx 0000
s=0
dx 0000
o=0
si 0000
p=0
di 0000
a=0
bp 0000
i= 1
sp 0000
d=0
ds 5424
ss 5434
cs 5435
ip 0000
ss:0002 0000
ss:0000 > A286
F9-Run
F10-Menu
F9
F10

De asemenea, pe ecran apar doua linii de meniu:


- linia de meniu superioara, care cuprinde submeniurile:
- System (=);
- File (fisiere), care prin:
- comanda Open permite deschiderea unor fisiere executabile pentru depanare,
- comanda Quit ([Alt]
[Alt] - X)
X permite iesirea din TD;
- View (vizualizare resurse);
- Run (executie pas cu pas, pana la cursor, etc.);
- Breakpoints (puncte de intrerupere a executiei programului);
- Data (evaluare, urmarire);
- Options (optiuni TD);
- Window (modificare parametrii fereastra);
- Help;
- linia de meniu inferioara, care cuprinde comenzile directe:
- F1 - Help,
- F2 - Bkpt (punct de intrerupere executie),
- F3 - Mod,
- F4 - Here (executie pana la cursor),
- F5 - Zoom (marire fereastra),
- F6 - Next,
- F7 - Trace (executie instructiune cu instructiune),
- F8 - Step (executie instructiune cu instructiune sarind peste proceduri),
- F9 - Run (executie a programului),
- F10 - Menu.
Apasand tasta [Ctrl] se poate observa ca meniul inferior se modifica. Pentru a se specifica
locatia de memorie care se doreste a fi afisata se foloseste comanda [Ctrl] G urmata de adresa in
formatul segment : offset.
Daca se doreste afisarea segmentului de date incepand cu primul octet se utilizeaza secventa
[Ctrl] G urmata de DS : 00. Trecerea de la o subfereastra la alta se face apasand tasta [Tab].
13

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1

5. Desfurarea lucrrii
1. Se studiaza arhitectura microprocesorului Intel 8086.
2. Se porneste calculatorul si se intra in contul LAPSTn (n este numarul calculatorului). Se
lanseaza in executie depanatorul simbolic TD cu comanda:
TD
3. Se studiaza comenzile sale si se experimenteaza utilizarea lor.

6. Teme si exercitii
1. Sa se calculeze adresele fizice corespunzatoare urmatoarelor adrese logice:
a) 1205H : 709H,
b) ABCDH : 89ABH,
c) FFF0H : 0FFH,
d) 3333H : 4444H,
e) 8000H : 8000H.
2. Sa se calculeze componentele offset corespunzatoare urmatoarelor adrese fizice (se
cunoaste componenta segment: 2000H):
a) 20002H,
b) 20010H,
c) 20300H,
d) 24000H,
e) 2FFFFH.
3. Sa se calculeze componentele segment corespunzatoare urmatoarelor adrese fizice (se
cunoaste componenta offset: 400H):
a) 10400H,
b) B0400H,
c) 30800H,
d) CDE00H,
e) FFFF0H.
2400H:

4. Care dintre urmatoarele adrese fizice apartin segmentului care are componenta segment
a) 33FFFH,
b) 23000H,
c) 27890H,
d) 33000H,
e) 34000H.

14

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2

Programarea microprocesorului Intel 8086.


Instructiuni de transfer. Instructiuni aritmetice
Scopul lucrrii
a) Elemente de limbaj de asamblare.
b) Instructiuni de transfer.
c) Instructiuni aritmetice.

1. Elemente de limbaj de asamblare pentru microprocesorul Intel 8086


1.1. Tipuri de date utilizate de microprocesorul Intel 8086
Reprezentarea interna a informatiilor (instructiuni, date, adrese, comenzi, etc.) este realizata
in binar. De aceea, tipurile de date elementare (grupurile de biti) utilizate de microprocesorul Intel
8086 au urmatoarele dimensiuni si denumiri:
bit) = cifra binara,
- bitul (b
- octetul (B
Byte) = grup de 8 biti,
- cuvantul (W
Word) = grup de 16 biti = 2 octeti (MSB = octetul superior, LSB = octetul
inferior),
- dublul-cuvant (D
Double-word) = grup de 32 biti = 4 octeti = 2 cuvinte (MSW = cuvantul
superior, LSW = cuvantul inferior).
Dublul-cuvint este tipul de data necesar pentru memorarea unei adrese logice, fapt pentru
care se numeste si "pointer".
Un tip de date derivat este inregistrarea de biti, formata din 8 sau 16 biti (octet sau cuvant),
compusa din campuri de biti de lungimi variabile, cu semnificatii diferite.
Dintre tipurile de date compuse, necesare pentru structuri de date complexe, cel mai utilizat
este sirul de date, care permite memorarea tablourilor (vectorilor, matricilor, etc.). Un alt tip compus
este stuctura, care este o multime de date de tip heterogen (octeti, cuvinte, etc.).

1.2. Structura unui program in limbaj de asamblare pentru microprocesorul Intel 8086
Un exemplu de program in limbaj de asamblare pentru microprocesorul Intel 8086 este dat in
continuare. Programul efectueaza suma a N=5:
DSEG

SEGMENT

; segmentul de date
1

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
TAB
TABW
REZ
ZERO

LABEL BYTE
; eticheta TAB
DW 5 DUP(7000H) ; sirul de cuvinte (tabloul) TABW
DB ? , ? , ? , ?; sirul de octeti (tabloul) REZ
EQU 0
; constanta ZERO

DSEG

ENDS

STIVA

SEGMENT
DW 40 DUP(?)
LABEL WORD
ENDS

VIRF
STIVA

CSEG SEGMENT

; segment de stiva
; eticheta VIRF
; segment de cod (program)

ASSUME CS: CSEG, DS: DSEG, SS: STIVA, ES: DSEG


START:
; eticheta de inceput a programului
MOV AX, DSEG
; initializari
MOV DS, AX
MOV ES, AX
MOV AX, STIVA
MOV SS, AX
MOV SP, OFFSET VIRF ; initializare pointer de stiva
MOV AX, 0
; initializare registre utilizate MOV DX, 0
MOV CX, LENGTH TABW
; CX = 5 = lungimea TABW
MOV BP, SIZE TABW
; BP = 10 = 5*2 = dimensiunea TABW
NEXT:
SUB BP, TYPE TABW
; BP = BP - 2
ADD AX, DS: TABW [BP] ; AX = AX + cuvant curent din TABW
ADC DX, ZERO
; DX = DX + transportul anterior
LOOP NEXT
; CX = CX-1
; daca CX <> 0 salt la NEXT
; altfel trece la instruct. urmatoare
MOV WORD PTR REZ, AX
; stocarea LSW la adresa REZ
MOV WORD PTR REZ + 2 , DX ; stocare MSW la adresa REZ+2
MOV AH, 4CH
; functie DOS 4CH (terminare proces)
INT 21H
; intrerupere SW - apel fct. DOS 4CH
CSEG ENDS
END START

; sfarsitul programului

O varianta de plasare in memorie a codurilor obtinute in urma asamblarii programului


anterior, reprezentata pe harta memoriei principale, este urmatoarea:

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
adresa minima = 00000H:

TAB = TABW :

00000H:

0 0
7 0
0 0

DS

7 0
0 0

7 0
0 0

7 0
0 0

segment
de date

7 0
0 0

7 0
x x

REZ :

3 0

x x

0 2

STIVA:

0 0
STIVA:

SS
:

:
segment
de stiva

VIRF:

SP

final

VIRF:

IP

initial

7 0
0 0

x x
x x

SP initial

0 0
7 0
0 0

7 0
0 0

7 0
0 0
REZ :

TABW :

CS

START:
:

START:
:

segment
de cod

IP

final

adresa maxima = 0FFFFFH:

adresa maxima = 0FFFFFH:


a.

b.

Fig. 1. Harta memoriei asociata programului de adunare a N = 5 numere de 16 biti din memorie, cu rezultat pe 32 de biti.
a. Configuratia initiala:
b. Configuratia finala:
AX = 0, DX = 0, CX = 5, BP = 10
REZ = XXXX H : XXXX H

AX = 3000H, DX =0002H, CX = 0, BP = 0
REZ = 0002 H : 3000 H = 23000H = 5 * 7000H

1.3. Instructiunile limbajelor de asamblare pentru microprocesorul I8086


Un program in limbaj de asamblare este alcatuit din mai multe linii sursa. O linie sursa este
alcatuita din urmatoarele cimpuri:

| Eticheta: |

Codul operatiei
(mnemonica)

Operanzi de tip imediat

| ;Comentariu |
3

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
unde intre | | sunt cuprinse elementele optionale.
Cimpul eticheta este facultativ si reprezinta numele simbolic al adresei din memorie la care
se afla codul numeric al unei instructiuni.
Mnemonica codului de operatie este numele simbolic al instructiunii.
Cimpul operanzi poate contine doi operanzi, unul sau nici unul, in functie de tipul
instructiunii. Operanzii pot fi datele asupra carora actioneaza instructiunea, adrese sau alte
informatii auxiliare.
Comentariul este optional. El serveste doar la marirea inteligibilitatii programului. La
asamblare textul comentariului este ignorat de catre asamblor.

1.4. Operatorii asamblorului TASM


Asupra operanzilor instructiunilor pot fi efectuate operatii si de catre programul asamblor.
Acest fel de operatii sunt specificate prin operatori si sunt efectuate de catre asamblor odata cu
asamblarea textului sursa.
Operatorii utilizati de catre asamblorul TASM sunt de mai multe tipuri:

1. Operatori modificatori de valori:


a. Operatori aritmetici (pentru operatiile aritmetice elementare: +, -, *, /, MOD).
Exemplu:
MOV WORD PTR REZ + 2 , DX
Asamblorul efectueaza operatia de adunare intre adresa REZ (componenta de tip offset) si 2,
rezultatul fiind utilizat de catre codul obiect.
b. Operatorul de indexare [

], care permite este utilizat la adresare.

Exemplu:
ADD AX, DS: TABW [BP]
Asamblorul utilizeaza registrul BP pentru a calcula adresa efectiva TABW + BP, necesara
pentru obtinerea adresei fizice din adresa logica segment (DS) : offset (TABW + BP).

2. Operatori generatori de valori:


a. SEG genereaza (returneaza) valoarea adresei de baza a segmentului in care se afla
variabila/eticheta careia i se aplica.
b. OFFSET genereaza (returneaza) valoarea adresei relative ("offset"-ului) fata de adresa de
inceputul segmentului in care este declarata variabila/eticheta careia i se aplica.
Exemplu:
MOV SP, OFFSET VIRF
Asamblorul inlocuieste OFFSET VIRF cu offset-ul etichetei VARF.
4

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
c. TYPE genereaza (returneaza) numarul de octeti ai unui element al variabilei careia i se
aplica (1 pentru octeti, 2 pentru cuvinte si 4 pentru dublu-cuvinte).
Exemplu:
SUB BP, TYPE TABW
Asamblorul inlocuieste TYPE TABW cu 2.
d. LENGTH genereaza (returneaza) numarul de elemente pe care le are variabila careia i se
aplica (lungimea, ex. LENGTH TABW = 5).
Exemplu:
MOV CX, LENGTH TABW
Asamblorul inlocuieste LENGTH TABW cu 5.
e. SIZE genereaza (returneaza) numarul de octeti alocat unei variabile (dimensiunea in
octeti). Se observa ca TYPE*LENGTH = SIZE.
Exemplu:
MOV BP, SIZE TABW
Asamblorul inlocuieste SIZE TABW cu 2*5 = 10.
f. HIGH si LOW genereaza (returneaza) octetul cel mai semnificativ (MSB), respectiv cel
mai putin semnificativ (LSB) al unei expresii.

3. Operatori modificatori de atribute:


a. PTR care modifica tipul unei variabile/etichete: BYTE, WORD, DWORD
Exemple:
MOV WORD PTR REZ, AX
MOV WORD PTR REZ + 2 , DX
In ambele cazuri asamblorul utilizeaza elementele variabilei REZ, declarata initial de tip
octet, sub forma de cuvinte (grupuri de doi octeti). Astfel se obtine compatibilitate cu tipul cuvant al
registrelor AX si DX.
b. Operatorul : care modifica segmentul implicit al unei variabile/etichete (utilizat pentru
precizarea adresei fizice) intr-un segment explicit (ex. DS: TABW [BP]).
Exemplu:
ADD AX, DS: TABW [BP]
Asamblorul utilizeaza registrul DS pentru a specifica segmentul de date pentru calculul
adresei adresei fizice din adresa logica segment (DS) : offset (TABW + BP).

Asocierile implicite (subintelese) ale registrelor utilizate pentru adresare: BX, SI, DI, SP, BP
si IP cu registrele segment, ca si posibilitatile utilizarii operatorului : pentru a modifica explicit
aceste asocieri sunt date in tabelul 1.
5

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Tab.1. Asocierile implicite si explicite ale registrelor segment si offset
Tip operatie

Registru segment
implicit

Registre segment
utilizabile explicit

Sursa offset-ului

CS

IP

SS

SP

DS

ES, SS, CS

EA (memorie)

DS

ES, SS, CS

SI

ES

DI

SS

DS, ES, CS

EA (memorie)

Incarcarea codurilor
instructiunilor in coada
Q
Operatii cu stiva
Transferuri date, cu
exceptiile:
- Siruri sursa
- Siruri destinatie
- Registrul BP

1.5. Directivele asamblorului TASM


Un program scris in limbaj de asamblare contine alaturi de instructiunile propriu-zise si
pseudo-instructiuni (directive), care se adreseaza programului asamblor modificindu-i modul de
lucru sau permitind specificarea datelor.
1. Directivele care specifica segmentele utilizate sunt:
a. Directiva SEGMENT - folosita pentru a marca inceputul unui segment (ex. DSEG, CSEG,
STIVA);
Exemple:
DSEG SEGMENT
defineste un segment de date numit DSEG,
STIVA SEGMENT
defineste un segment de stiva (neutilizat aici) numit STIVA,
CSEG SEGMENT
defineste un segment de cod (de program) numit CSEG.
b. Directiva ENDS - folosita pentru a marca sfirsitul segmentului;
Exemple:
DSEG ENDS
6

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
declara sfirsitul segmentului de date DSEG,
STIVA ENDS
declara sfirsitul segmentului de stiva STIVA,
CSEG ENDS
declara sfirsitul segmentului de cod CSEG.
c. Directiva ASSUME - informeaza TASM asupra registrelor de segment prin care vor fi
accesate segmentele logice definite anterior prin directiva SEGMENT (adresele de baza ale
segmentelor logice).
Exemplu:
ASSUME CS: CSEG, DS: DSEG, SS: STIVA, ES: DSEG
informeaza asamblorul ca segmentele CSEG, STIVA si DSEG vor avea adresele de baza incarcate
in CS, SS, DS si ES.
2. Directiva EQU permite declararea constantelor. Constantele astfel declarate sunt inlocuite
cu numere propriu-zise in momentul asamblarii. Pentru ele nu se aloca spatiu de memorie.
Exemplu:
ZERO EQU 0
Asamblorul inlocuieste in program constanta ZERO cu valoarea numerica 0.
3. Pentru declararea variabilelor se utilizeaza urmatoarele directive:
a. Directiva DB (Define Byte) declara octeti sau siruri de octeti.
Exemplu:
REZ DB ? , ? , ? , ?
declara o variabila REZ de tip sir de octeti formata din 4 octeti neinitializati
b. Directiva DW (Define Word) declara cuvinte sau siruri de cuvinte.
Exemple:
TABW DW 5 DUP(7000H)
declara o variabila TABW de tip sir de cuvinte formata din 5 cuvinte identice initializate cu 7000H
DW 40 DUP(?)
declara un sir de 40 de cuvinte neinitializate fara nume (simpla alocare)
c. Directiva DD (Define Double-word) declara dublu-cuvinte sau siruri de dublu-cuvinte.

Variabilele sint definite ca rezidente la o anumita adresa relativa (offset) in cadrul unui
anumit segment si sunt caracterizate de tipul datelor.
Se observa ca pentru rezervarea memoriei variabilelor neinitializate se utilizeaza operatorul:
? = rezervare zona de memorie pentru variabila neinitializata
iar pentru precizarea valorilor multiple ale variabilelor se utilizeaza operatorul:
7

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2

DUP = precizare numar replici (DUPlicate).


4. Declararea etichetelor utilizate pentru referirea la date din segmentele de date sau stiva
(etichete adrese de variabile) se face cu directiva LABEL
LABEL, eventual precizand si atributul.
Exemple:
TAB LABEL BYTE
defineste o eticheta cu numele TAB inaintea variabilei TABW, permitand accesul la variabila
TABW octet cu octet (varianta pentru BYTE PTR !),
VIRF LABEL WORD
defineste eticheta VIRF.

Etichetele sunt (ca si variabilele) nume simbolice de adrese. Ele sunt caracterizate de un
anumit offset in cadul unui segment.
In general etichetele identifica instructiunile. In acest caz etichetele pot fi referite in alte
instructiuni pentru executarea salturilor in program. Daca referirile la o eticheta sunt facute in cadrul
segmentului in care ea este definita ("home segment") atunci se spune ca ea are atributul NEAR. O
eticheta poate fi referita intr-o instructiune a altui segment logic daca poarta atributul FAR.
Atributele etichetelor se stabilesc la definirea acestora.
Pentru declararea etichetelor in segmentul de program (etichete adrese de instructiuni) se
utilizeaza si operatorul:
:
Exemple:
START:
declara eticheta de inceput a codului executabil
NEXT:
declara eticheta NEXT utilizata pentru iteratii
5. Directiva END,
END utilizata pentru declararea sfarsitului de program (cod).
Exemplu:
END START
indica asamblorului ca programul inceput la eticheta START se sfarseste.
6. Directiva RECORD,
RECORD utilizata pentru definirea inregistrarilor de date. Formatul declaratiei
de definire a unei inregistrari este:

nume_inreg RECORD nume_camp : expresie | = expresie' | |,..|


unde:
numele campurilor (nume_camp, ...) sunt unice;
expresia expresie este evaluata la o constanta intreaga intre 1 si 16 si specifica numarul de
biti (lungimea) ai campului; suma lungimilor trebuie sa fie mai mica sau egala cu 16, respectiv 8;
expresie' este optionala si serveste ca valoare initiala a campului;
|,... | indica repetarea optionala a lui nume_camp : expresie | = expresie' |
Exemplul 1:
8

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
CHIPS RECORD RAM:7, EPROM:4, ROM:5
defineste o inregistrare cu 16 biti formata din 3 campuri cu numele RAM, EPROM si ROM avand
lungimile de 7, 4, si respectiv 5 biti.
Exemplul 2:
CHIPS RECORD RAM:7=4, EPROM:4=2, ROM:5=0
defineste o inregistrare cu 16 biti formata din 3 campuri cu numele RAM, EPROM si ROM avand
lungimile de 7, 4, si respectiv 5 biti, cu precizarea valorilor initiale ale campurilor.
7. Directiva STRUCT
STRUCT, utilizata pentru definirea structurilor. Formatul declaratiei de definire
a unei structuri este:

nume_structura

STRUCT

| nume_camp | {DB | DW | DD} expresie | |, ..|

nume_structura

ENDS

unde:
numele campurilor (nume_camp, ...) sunt unice;
|,... | indica repetarea optionala a lui nume_camp {DB | DW | DD} expresie
Exemplu:
PROCES
STRUCT
STARE
DB
VAL_CRT
DW
PROCES
ENDS

0
?

2. Instructiuni de transfer
Instructiunile de transfer intre registre sau intre un registru si memorie realizeaza operatiile
de atribuire (copiere) si de permutare. Operatii de transfer pot fi realizate si intre registre si porturi.

1. Instructiunea de atribuire (copiere) are forma:


MOV operand1, operand2
si efectul:
operand1 = operand2
Se observa ca sensul in care se face atribuirea este de la dreapta la stanga (sens utilizat in
general pentru scrierea functiilor si a expresiilor matematice). Astfel, se poate spune ca forma
instructiunii este:
MOV destinatie, sursa
9

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Exemplu:
MOV AX, BX
copiaza in registrul AX valoarea continuta in registrul BX

2. Instructiunea de permutare (inter-schimbare) are forma:


XCHG operand1, operand2
si efectul:
temp = operand1
operand1= operand2
operand2 = temp
Astfel, cei doi operanzi isi schimba continutul intre ei, operanzii fiind si sursa si destinatie.
Exemplu:
MOV CX, BX
copiaza in registrul CX valoarea continuta in registrul BX, si in registrul BX valoarea initiala a lui
CX

3. Instructiunea de citire dintr-un port are forma:


IN acumulator, port
si efectul:
acumulator = port

4. Instructiunea de scriere intr-un port are forma:


OUT port, acumulator
si efectul:
port = acumulator

3. Instructiuni aritmetice
Instructiunile aritmetice ale microprocesorului Intel 8086 utilizeaza 1 sau 2 operanzi.

3.1. Instructiuni aritmetice care utilizeaza 2 operanzi


Instructiunile care utilizeaza 2 operanzi sunt: adunari (cu sau fara bitul Carry de la operatia
anterioara), scaderi (cu sau fara bitul Carry de la operatia anterioara), inmultiri, impartiri. In cele ce
urmeaza operand1 este sursa si destinatie iar operand2 este doar sursa.

1. Instructiunea de adunare are forma:


ADD operand1, operand2
10

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
si efectul:

operand1 = operand1 + operand2

Exemplu (initial AX = 7FFFH si BX = 8000H):


ADD BX, DX
Efect:
1000 0000 0000 0000 B
= 8000 H +
1100 0000 0000 0000 B
= C000 H
-------------------------------------------------(CF = 1) 0100 0000 0000 0000 B
= 4000 H
Valori in urma executiei instructiunii: BX = 4000H, CF = 1 (transport).

2. Instructiunea de adunare cu bitul Carry (transport) de la operatia anterioara are forma:


ADC operand1, operand2
si efectul:

operand1 = operand1 + operand2 + CF

Exemplu (initial AX = 7FFFH, CX = 4000H si CF = 1):


ADD AX, CX
Efect:
0111 1111 1111 1111 B
= 7FFF H +
0100 0000 0000 0000 B
= 4000 H +
1B
=
1H
-------------------------------------------------(CF = 0) 1100 0000 0000 0000 B
= C000 H
Valori in urma executiei instructiunii: AX = C000H, CF = 0.

3. Instructiunea de scadere are forma:


SUB operand1, operand2
si efectul:

operand1 = operand1 - operand2

Exemplu (initial BX = 8000H si DX = 0C000H):


SUB BX, DX
Efect:
1000 0000 0000 0000 B
= 8000 H 1100 0000 0000 0000 B
= C000 H
-------------------------------------------------(CF = 1) 1100 0000 0000 0000 B
= C000 H
11

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Valori in urma executiei instructiunii: BX = C000H, CF = 1 (imprumut).

4. Instructiunea de scadere cu bitul Carry (imprumut) de la operatia anterioara are forma:


SBB operand1, operand2
si efectul:

operand1 = operand1 - operand2 - CF

Exemplu (initial AX = 7FFFH, CX = 4000H, si CF = 1):


SBB AX, CX
Efect:

0111 1111 1111 1111 B


= 7FFF H 0100 0000 0000 0000 B
= 4000 H 1B
=
1H
-------------------------------------------------(CF = 0) 0011 1111 1111 1110 B
= 3FFE H

Valori in urma executiei instructiunii: AX = 3FFEH, CF = 0.

5. Instructiunea de inmultire intre numere fara semn are forma:


MUL operand
si efectul:

- pentru operanzi de 8 biti:


- pentru operanzi de 16 biti:

AX = AL * operand
DX, AX = AX * operand

6. Instructiunea de inmultire intre numere cu semn are forma:


IMUL operand
si efectul:

- pentru operanzi de 8 biti:


- pentru operanzi de 16 biti:

AX = AL * operand
DX, AX = AX * operand

7. Instructiunea de impartire intre numere fara semn are forma:


DIV operand
si efectul:

AL = AX / operand (catul)
AH = AX MOD operand
(restul)
- pentru operanzi de 16 biti:
AX = DX, AX / operand
DX = DX, AX MOD operand

- pentru operanzi de 8 biti:

8. Instructiunea de impartire intre numere cu semn are forma:


12

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
IDIV operand
si efectul:

- pentru operanzi de 8 biti:


- pentru operanzi de 16 biti:

AL = AX / operand
AH = AX MOD operand
AX = DX, AX / operand
DX = DX, AX MOD operand

3.2. Instructiuni aritmetice care utilizeaza 1 operand


Instructiunile care utilizeaza 1 operand (sursa si destinatie) sunt: incrementare, decrementare,
negare (aritmetica, in complement fata de 2).

1. Instructiunea de incrementare are forma:


INC operand
si efectul:

operand = operand + 1

Exemplu (initial DI = 0FFFFH):


INC DI
Efect:
1111 1111 1111 1111 B
= FFFF H +
0000 0000 0000 0001 B
=
1H
-------------------------------------------------(CF = 1) 0000 0000 0000 0000 B
= 0000 H
Valori in urma executiei instructiunii: DI = 0000H, CF = 1 (transport).
2. Instructiunea de decrementare are forma:
DEC operand
si efectul:

operand = operand - 1

Exemplu (initial SI = 0001H):


DEC SI
Efect:
0000 0000 0000 0001 B
= 0001 H 0000 0000 0000 0001 B
=
1H
-------------------------------------------------(CF = 0) 0000 0000 0000 0000 B
= 0000 H
Valori in urma executiei instructiunii: SI = 0000H, CF = 0.

3. Instructiunea de negare are forma:


13

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
NEG operand
si efectul:

operand = (0) - operand

Exemplul 1 (initial SI = 0001H):


NEG SI
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 0000 0000 0000 0001 B
= 0001 H
-------------------------------------------------(CF = 1) 1111 1111 1111 1111 B
= FFFF H
Valori in urma executiei instructiunii: SI = FFFFH, CF = 1 (transport).
Exemplul 2 (initial DI = 0FFFFH):
NEG DI
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 1111 1111 1111 1111 B
= FFFF H
-------------------------------------------------(CF = 1) 0000 0000 0000 0001 B
= 0001 H
Valori in urma executiei instructiunii: DI = 0001H, CF = 1 (transport).
Exemplul 3 (initial AX = 7FFFH):
NEG AX
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 0111 1111 1111 1111 B
= 7FFF H
-------------------------------------------------(CF = 1) 1000 0000 0000 0001 B
= 8001 H
Valori in urma executiei instructiunii: AX = 8001H, CF = 1 (transport).
Exemplul 4 (initial BX = 8000H):
NEG BX
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 1000 0000 0000 0000 B
= 8000 H
-------------------------------------------------(CF = 1) 1000 0000 0000 0000 B
= 8000 H
14

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Valori in urma executiei instructiunii: BX = 8000H, CF = 1 (transport).
Exemplul 5 (initial CX = 4000H):
NEG CX
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 0100 0000 0000 0000 B
= 4000 H
-------------------------------------------------(CF = 1) 1100 0000 0000 0000 B
= C000 H
Valori in urma executiei instructiunii: CX = C000H, CF = 1 (transport).
Exemplul 6 (initial DX = 0C000H):
NEG DX
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 1100 0000 0000 0000 B
= C000 H
-------------------------------------------------(CF = 1) 0100 0000 0000 0000 B
= 4000 H
Valori in urma executiei instructiunii: DX = 4000H, CF = 1 (transport).

4. Exemple de programe
4.1. Calcule in dubla precizie
Rolul principal al instructiunilor de adunare cu transport si scadere cu imprumut este acela
de a permite efectuarea calculelor in dubla precizie (pe 32 biti).
1. Adunarea a doua valori de 32 biti - perechile de registre (AX, BX), respectiv (CX, DX):
Initial: AX = 7FFFH, BX = 8000H, CX = 4000H si DX = 0C000H.
ADD BX, DX; adunarea LSW
ADC AX, CX
; adunarea MSW
Efectul secventei este:
AX BX +
15

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
CX DX
-----------AX BX
adica:
0111 1111 1111 1111
1000 0000 0000 0000 B
= 7FFF 8000 H +
0100 0000 0000 0000
1100 0000 0000 0000 B
= 4000 C000 H
(CF = 1)
-------------------------------------------------------------------------------------------(CF = 0) 1100 0000 0000 0000
0100 0000 0000 0000 B
= C000 4000 H
In urma executiei secventei: AX = C000H, BX = 4000H, CF = 0 (rezultat C000 4000 H).
2. Scaderea a doua valori de 32 biti - perechile de registre (AX, BX), respectiv (CX, DX):
Initial: AX = 7FFFH, BX = 8000H, CX = 4000H si DX = 0C000H.
SUB BX, DX ; scaderea LSW
SBB AX, CX ; scaderea MSW
Efectul secventei este:
AX BX CX DX
-----------AX BX
adica:

0111 1111 1111 1111


0100 0000 0000 0000

1000 0000 0000 0000 B


= 7FFF 8000 H 1100 0000 0000 0000 B
= 4000 C000 H
(CF = 1)
-------------------------------------------------------------------------------------------(CF = 0) 0011 1111 1111 1110
1100 0000 0000 0000 B
= 3FFE C000 H

Valori in urma executiei instructiunii: AX = 3FFEH, BX = C000H, CF = 0 (rezultat 3FFE C000 H).
3. Calculul sumei in dubla precizie a variabilelor de tip cuvant a si b. Rezultatul este plasat in
varibila c.
DAT SEGMENT
a dw 0a46fh
b dw 0dc89h
c dw ?, ?
16

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
DAT ENDS
ASSUME CS: COD, DS: DAT
COD SEGMENT
START:
MOV AX, DAT
MOV DS, AX
mov ax, a
mov dx, 0

; initializari

add ax, b
adc dx, 0

; suma in dubla precizie

mov c, ax
mov [c+2], dx

; memorare rezultat

MOV AH, 4CH


INT 21H
COD ENDS
END START

4.2. Alte programe


1. Program
Program de transformare a unui caracter litera mica citit de la tastatura in caracter litera
mare afisat pe ecran.
data segment
numeprog
db 25 dup(0ah),'Transformare caracter$'
citire
db 2 dup(0ah),0dh,' Introduceti litera mica $'
afisare
db 2 dup(0ah),0dh,' Litera mare este: $'
data ends
assume cs:cod, ds:data
cod segment
start:
mov ax, data
mov ds, ax
mov dx, offset numeprog ; afisare sir caractere
mov ah, 9
; (nume program)
int 21h
mov
mov

dx, offset citire


ah, 9

; afisare sir caractere


; (mesaj citire)
17

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
int

21h

mov ah, 1
int 21h
sub
mov

al, 20h
bl, al

; citire caracter cu ecou pe


; ecran (litera mica)
; conversie litera mica -> litera mare

mov dx, offset afisare


mov ah, 9
int 21h

; afisare sir caractere


; (mesaj afisare)

mov
dl, bl
mov ah, 2
int 21h
mov
int
mov
int
cod
end

ah, 8
21h
ah, 4ch
21h
ends
start

; afisare caracter
; (litera mare)
; citire caracter fara ecou pe
; ecran (Enter)
; exit

2. Program de transformare a unui caracter litera mare citit de la tastatura in caracter litera
mica afisat pe ecran.
data segment
numeprog
db 25 dup(0ah),'Transformare caracter$'
citire
db 2 dup(0ah),0dh,' Introduceti litera mare $'
afisare
db 2 dup(0ah),0dh,' Litera mica este: $'
data ends
assume cs:cod, ds:data
cod segment
start:
mov ax, data
mov ds, ax
mov dx, offset numeprog ; afisare sir caractere
mov ah, 9
; (nume program)
int 21h
mov dx, offset citire
mov ah, 9
int 21h
mov

ah, 1

; afisare sir caractere


; (mesaj citire)
; citire caracter cu ecou pe
18

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
int

21h

; ecran (litera mare)

add
al, 20h
; conversie litera mare -> litera mica
mov
bl, al
mov dx, offset afisare
; afisare sir caractere
mov ah, 9
; (mesaj afisare)
int 21h
mov
dl, bl
mov ah, 2
int 21h

; afisare caracter
; (litera mica)

mov ah, 8
int 21h

; citire caracter fara ecou pe


; ecran (Enter)

mov ah, 4ch


int 21h
cod ends
end start

; exit

5. Desfasurarea lucrarii
1. Se deschide un editor de texte (Borland C cu comanda BC, Turbo Pascal cu comanda
TURBO, etc.).
a) Se editeaza urmatorul textul urmatorului program (exceptand comentariile):
DATA SEGMENT

; nu sunt date de declarat

DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV
MOV
MOV
MOV

AX, 7FFFH
BX, 8000H
CX, 4000H
DX, C000H

ADD BX, DX

; initializare DS
; initializari registre de date

; adunarea LSW
19

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
ADC AX, CX

; adunarea MSW

MOV AH, 4CH


INT 21H

; exit

COD ENDS
END START
b) Se salveaza fisierul editat cu numele AP21.ASM. Se iese din editor (cu comanda [ Alt ] X)
si se da comanda:
DIR AP21.*
urmarindu-se efectul.
c) Se realizeaza asamblarea fisierului editat cu comanda:

TASM AP21
Se urmaresc mesajele de pe ecran si se corecteaza eventualele erori (reintrand in editor).
Se da comanda:
DIR AP21.*
si se urmareste efectul.
d) Se realizeaza editarea de legaturi cu comanda:

TLINK AP21
Se urmaresc mesajele de pe ecran si se corecteaza eventualele erori.
Se da comanda:
DIR AP21.*
si se urmareste efectul.
e) Se dau succesiv comenzile:

TYPE AP21.ASM
TYPE AP21.MAP
TYPE AP21.OBJ
TYPE AP21.EXE
Se analizeaza efectele.
f) Se lanseaza in executie depanatorul simbolic cu comanda:

TD AP21
Se executa pas cu pas programul (apasand tasta F7) urmarindu-se in special continuturile
registrelor AX, BX, CX, DX si a flagului Carry (CF).

20

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
2. Se editeaza programul de transformare a unui caracter litera mica citit de la tastatura in
caracter litera mare afisat pe ecran (vezi $4.2.) intr-un fisier cu numele AP22.ASM.
Se parcurg etapele 1.a) ... 1.f) pentru acest program si se lanseaza in executie programul
AP22.EXE.
3. Se editeaza programul de transformare a unui caracter litera mare citit de la tastatura in
caracter litera mica afisat pe ecran (vezi $4.2.) intr-un fisier cu numele AP23.ASM.
Se parcurg etapele 1.a) ... 1.f) pentru acest program si se lanseaza in executie programul
AP23.EXE.

6. Teme si exercitii
1. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a calcula suma a
doua cuvinte, aflate in registrele AX si DX, folosind numai registrele de tip octet (AH, AL, BH, BL,
CH, CL, DH, DL).
2. Sa se scrie un program care sa transforme caracterele 'a', ..., 'f' citite de la tastatura in
valorile 10, ..., 15.
3. Sa se scrie un program care sa transforme caracterele 'A', ..., 'F' citite de la tastatura in
valorile 10, ..., 15.
4. Sa se scrie un program care sa citeasca de la tastatura valorile 10, ..., 15 (doua cifre
succesive), sa le transforme in caracterele 'A', ..., 'F' si sa le afiseze pe ecran.

7. Intrebari
1. Care sunt tipurile operanzilor instructiunilor microprocesorului Intel 8086 ?
2. Care sunt modurile de adresare a memoriei ?
3. Care sunt modurile de adresare a porturilor ?
4. Care este diferenta intre negarea aritmetica (NEG) si negarea logica (NOT) ?
5. Care este diferenta intre deplasarea aritmetica la dreapta (SAR) si deplasarea logica la
dreapta (SHR) ?
6. Care este diferenta intre deplasarea logica si rotatia fara CF ?
5. Ce sunt directivele asamblorului TASM ?
6. Care sunt directivele pentru specificarea segmentelor ?
21

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
7. Care sunt directivele pentru declararea constantelor si variabilelor?
8. Care sunt diferentele intre constante si variabile ?
9. Cum se definesc inregistrarile de date ?
10. Cum se definesc structurile ?

22

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3

Programarea microprocesorului Intel 8086.


Instructiuni logice, de deplasare si rotatie
Scopul lucrrii
a) Operanzii instructiunilor microprocesorul Intel 8086.
b) Instructiuni logice.
c) Instructiuni de deplasare si rotatie.

1. Operanzii instructiunilor microprocesorului Intel 8086


Microprocesorul Intel 8086 utilizeaza mai multe moduri de adresare a datelor, numite
generic operanzi (sursa sau destinatie), in functie de locul in care sunt plasati acestia. Operanzii pot
fi continuti in registrii, in memorie, in codul instructiunii sau in porturile de intrare/iesire.

Operanzii din registre permit, datorita plasarii lor interne, ca instructiunile care ii utilizeaza
sa fie executate mai rapid, nemaifiind necesare transferuri cu memoria sau porturile. Registrele (de 8
sau 16 biti) pot fi operanzi sursa, operanzi destinatie sau operanzi sursa si destinatie.
Operanzii de tip imediat sunt date constante de 8 sau 16 biti continute in codul instructiunii,
dupa codul operatiei. Accesul la acesti operanzi este destul de rapid, deoarece ei sunt incarcati in
coada de instructiuni de catre unitatea de interfata odata cu instructiunea. Limitarile operanzilor de
tip imediat se datoreaza faptului ca ei pot fi doar valori constante si pot servi doar ca operanzi sursa.
Operanzii din memorie sunt accesati mai lent, deoarece sunt necesare: mai intai calculul
adresei efective a operandului (EA = offset-ul), apoi calculul adresei fizice si in final transferul lor.
Formula generala de calcul pentru EA (offset) este:
EA = (BX / BP)* + (SI / DI)* + (D8 / D16)*
unde: * indica un termen optional, iar
/ separa variantele unui termen.
Observatie: spatiul de adrese al porturilor este 0...FFFFH (64ko).

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3

1.1. Operanzi de tip imediat (adresarea imediata)


Operandul este explicit in codul instructiunii, dupa codul operatiei, aflandu-se in coada de
instructiuni.
Exemplul 1. In instructiunea:
ADD AL, 6
operandul al doilea este constanta numerica 6 de tip imediat.
Exemplul 2. In instructiunea:
ADC ALFA, AX
primul operand este constanta simbolica ALFA de tip imediat.

1.2. Operanzi din registre (adresarea directa la registru)


Operandul este in registrul specificat in codul instructiunii, in codul operatiei.
Exemplu. In instructiunea:
ADD AL, BL
ambii operanzi sunt de tip regsitru.

1.3. Operanzi din memorie (adresarea la memorie)


1. Adresarea directa la memorie.
Operandul este in memoria principala (MP), la offset-ul specificat in codul instructiunii
(dupa codul operatiei). Adresa efectiva se afla in codul instructiunii.
Exemplu. In instructiunea:
ADD AL, VAR
al doilea operand este variabila VAR (inlocuita la asamblare cu offset-ul variabilei VAR) declarata
cu o directiva. Operandul este continutul variabilei VAR din memorie.

2. Adresare indirecta la memorie prin registru.


2

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Operandul este in memoria principala (MP), la offset-ul aflat in registru de baza (BX, BP)
sau index (SI, DI) specificat in codul instructiunii, in codul operatiei.
Exemplul 1. In instructiunea:
ADD AX, [BX]
al doilea operand este perechea de octeti (cuvantul) din memoria principala, din segmentul curent de
date (specificat de DS), aflat la offset-ul continut in registrul BX.
Exemplul 2. In instructiunea:
ADD [SI], AL
primul operand este octetul din MP, din segmentul de date curent (specificat de DS), aflat la offsetul continut in registrul SI.

3. Adresare indirecta la memorie prin registru cu deplasare.


Operandul este in memoria principala MP, la offset-ul calculat ca suma continutului
registrului de baza sau index specificat in codul operatiei si deplasarea care urmeaza in codul
instructiunii dupa codul operatiei.
Exemplul 1. In instructiunea:
ADD AX, DS: [BP+2]
al doilea operand este cuvantul din MP, din segmentul de date curent (specificat explicit de DS),
aflat la offset-ul egal cu suma dintre continutul registrului BX si deplasarea 2 (de tip imediat).
Exemplul 2. In instructiunea:
ADD TAB [DI], AL
primul operand este cuvantul din MP, din segmentul de date curent (specificat de DS), aflat la
offset-ul egal cu suma dintre continutul registrului DI si deplasarea TAB (de tip imediat) .

4. Adresare indirecta la memorie prin doua registre.


Operandul este in memoria principala MP, la offset-ul calculat ca suma continuturilor
registrelor de baza si index specificate in codul operatiei.
Exemplu. In instructiunea:
3

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
ADD AX, [BX] [ SI]
al doilea operand este cuvantul din MP, din segmentul de date curent, aflat la offset-ul egal cu suma
continuturilor registrelor BX si SI.

5. Adresare indirecta la memorie prin doua registre cu deplasare.


Operandul este in memoria principala MP, la offset-ul calculat ca suma continuturilor
registrelor de baza si index specificate in codul operatiei si deplasarea care urmeaza codul operatiei
Exemplu. In instructiunea:
MOV MATR [BX] [SI], AX
primul operand este cuvantul din MP, din segmentul de date curent, aflat la offset-ul egal cu suma
continuturilor registrelor BX si SI cu deplasarea MATR (de tip offset).

1.4. Operanzi din porturi de intrare-iesire (adresarea porturilor)


1. Adresarea directa a porturilor (pentru adrese pe 8 biti, in gama 0..255).
Operandul se afla in portul aflat la adresa specificata in instructiune dupa codul operatiei.
Exemplul 1. In instructiunea:
IN AX, 20H
al doilea operand este portul de intrare aflat la adresa numerica 20H (de tip imediat).
Exemplul 2. In instructiunea:
OUT PORT2, AL
primul operand este portul de iesire aflat la adresa simbolica PORT2 (de tip imediat).

2. Adresarea indirecta a porturilor prin registrul DX.


Operandul se afla in portul aflat la adresa specificata in registrul DX.
Exemplu. In instructiunea:
OUT DX, AL
primul operand este portul de iesire aflat in portul de la adresa continuta in DX.

2. Instructiuni logice
4

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3

2.1. Instructiuni logice care utilizeaza 2 operanzi


Instructiunile care utilizeaza 2 operanzi sunt: functia si logic intre bitii operanzilor (AND),
functia sau logic intre bitii operanzilor (OR), functia sau-exclusiv logic intre bitii operanzilor
(XOR).
In cele ce urmeaza operand1 este sursa si destinatie iar operand2 este doar sursa.
1. Instructiunea AND are forma:
AND operand1, operand2
si efectul:

operand1 = operand1 AND operand2

Exemplu (initial AX = 5555H si BX = 6666H):


AND AX, BX
Efect:
0101 0101 0101 0101 B
= 5555 H x
0110 0110 0110 0110 B
= 6666 H
------------------------------------------------0100 0100 0100 0100 B
= 4444 H
Valoare in urma executiei instructiunii: AX = 4444H.
2. Instructiunea OR are forma:
OR operand1, operand2
si efectul:

operand1 = operand1 OR operand2

Exemplu (initial AX = 5555H si BX = 6666H):


OR AX, BX
Efect:
0101 0101 0101 0101 B
= 5555 H +
0110 0110 0110 0110 B
= 6666 H
------------------------------------------------0111 0111 0111 0111 B
= 7777 H
Valoare in urma executiei instructiunii: AX = 7777H.
3. Instructiunea XOR are forma:
XOR operand1, operand2
5

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
si efectul:

operand1 = operand1 XOR operand2

Exemplu (initial AX = 5555H si BX = 6666H):


XOR AX, BX
Efect:
0101 0101 0101 0101 B
= 5555 H +
0110 0110 0110 0110 B
= 6666 H
------------------------------------------------0011 0011 0011 0011 B
= 3333 H
Valoare in urma executiei instructiunii: AX = 3333H.

2.2. Instructiuni logice care utilizeaza 1 operand


Instructiunea care utilizeaza 1 operand (sursa si destinatie) este negarea logica (NOT) a
bitilor operandului (reprezentarea in complement fata de 1 - C1).
In cele ce urmeaza operand este sursa si destinatie.

Instructiunea NOT are forma:


NOT operand
si efectul:

operand = NOT operand

Exemplul 1 (initial SI = 0001H):


NOT SI
Efect:
0000 0000 0000 0001 B
= 0001 H \
-------------------------------------------------1111 1111 1111 1110 B
= FFFE H
Valoare in urma executiei instructiunii: SI = FFFEH.
Exemplul 2 (initial DI = 0FFFFH):
NOT DI
Efect:

1111 1111 1111 1111 B


= FFFF H \
-------------------------------------------------0000 0000 0000 0000 B
= 0000 H
6

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Valoare in urma executiei instructiunii: DI = 0000H.
Exemplul 3 (initial AX = 7FFFH):
NOT AX
Efect:
0111 1111 1111 1111 B
= 7FFF H \
-------------------------------------------------1000 0000 0000 0000 B
= 8000 H
Valoare in urma executiei instructiunii: AX = 8000H.
Exemplul 4 (initial BX = 8000H):
NOT BX
Efect:
1000 0000 0000 0000 B
= 8000 H \
-------------------------------------------------0111 0111 0111 0111 B
= 7FFF H
Valoare in urma executiei instructiunii: BX = 7FFFH.
Exemplul 5 (initial CX = 4000H):
NOT CX
Efect:
0100 0000 0000 0000 B
= 4000 H \
-------------------------------------------------1100 0000 0000 0000 B
= C000 H
Valoare in urma executiei instructiunii: CX = C000H.
Exemplul 6 (initial DX = 0C000H):
NOT DX
Efect:
1100 0000 0000 0000 B
= C000 H \
-------------------------------------------------0011 1111 1111 1111 B
= 3FFF H
Valoare in urma executiei instructiunii: DX = 3FFFH.

3. Instructiuni de deplasare si rotatie


7

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3

3.1. Instructiuni de deplasare


Instructiunile de deplasare executa operatii asupra unui singur operand (sursa si destinatie).
In cele ce urmeaza operand este sursa si destinatie.
1. Instructiunea de deplasare logica la stanga are forma:
SHL operand, 1
si efectul:

operand = operand deplasat la stanga cu o pozitie

sau

SHL operand, CL

respectiv

operand = operand deplasat la stanga cu (CL) poz.

Exemplul 1 (initial AX = AAAAH):


SHL AX, 1
Efect:

1
= AAAA H (<-----)
1010 1010 1010 1010 B
-----------------------------------------------------------0101 0101 0101 0100
0B
=5554H

Valori in urma executiei instructiunii: AX = 5554H, CF = 1.


Exemplul 2 (initial AX = AAAAH si CL = 4):
SHL AX, CL
Efect:

(CL)=4
= AAAA H (<-----)
1010 1010 1010 1010 B
-----------------------------------------------------------1010 1010 1010 0000 B
= AAA0 H

Valori in urma executiei instructiunii: AX = AAA0H, CF = 0.

Se observa ca deplasarea logica la stanga cu n pozitii are acelasi efect cu inmultirea cu 2n.
Astfel, pentru primul exemplu avem (n = 1, 2n = 21 = 2):
8

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
AAAA H * 2 H = 1 5 5 5 4 H
iar pentru al doilea (n = 4, 2n = 24 = 16 = 10 H):
AAAA H * 10 H = AAAA0 H
Se observa de asemenea ca in primul caz rezultatul corect este continut in CF (1) si AX
(5554H), pe cand in al doilea caz se pierd primii biti ai rezultatului.
2. Instructiunea de deplasare logica la dreapta are forma:
SHR operand, 1
si efectul:

operand = operand deplasat la dreapta cu o pozitie

sau

SHR operand, CL

respectiv

operand = operand deplasat la dreapta cu (CL) poz.

Exemplul 1 (initial AX = AAAAH):


SHR AX, 1
Efect:

1
1010 1010 1010 1010 B
= AAAA H (----->)
-----------------------------------------------------------0101 0101 0101 0101 B
=5555H

Valori in urma executiei instructiunii: AX = 5555H, CF = 0.


Exemplul 2 (initial AX = AAAAH si CL = 4):
SHR AX, CL
Efect:

(CL)=4
1010 1010 1010 1010 B
= AAAA H (----->)
-----------------------------------------------------------0000 1010 1010 1010 B
= 0AAA H

Valori in urma executiei instructiunii: AX = 0AAAH, CF = 1.


Se observa ca deplasarea logica la dreapta cu n pozitii are acelasi efect cu impartirea la 2n .
Astfel, pentru primul exemplu avem (n = 1, 2n = 21 = 2):

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
AAAA H : 2 H = 5 5 5 5 H
iar pentru al doilea (n = 4, 2n = 24 = 16 = 10 H):
AAAA H : 10 H = AAA H

3. Instructiunea de deplasare aritmetica la stanga are forma:


SAL operand, 1
si efectul:

operand = operand deplasat la stanga cu o pozitie

sau

SAL operand, CL

respectiv

operand = operand deplasat la stanga cu (CL) poz.

Exemplul 1 (initial AX = AAAAH):


SAL AX, 1
Efect:

1
= AAAA H (<-----)
1010 1010 1010 1010 B
----------------------------------------------------------0101 0101 0101 0100
0B
= 5554H

Valori in urma executiei instructiunii: AX = 5554H, CF = 1.


Exemplul 2 (initial AX = AAAAH si CL = 4):
SAL AX, CL
Efect:

(CL)=4
= AAAA H (<-----)
1010 1010 1010 1010 B
-----------------------------------------------------------1010 1010 1010 0000 B
= AAA 0 H

Valori in urma executiei instructiunii: AX = AAA0H, CF = 0.


Se observa faptul ca efectul acestei instructiuni este identic cu cel al instructiunii de
deplasare logica la stanga !.

4. Instructiunea de deplasare aritmetica la dreapta (cu pastrarea semnului) are forma:


SAR operand, 1

10

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
si efectul:

operand = operand depl. aritmetic la dr. cu o poz.

sau

SAR operand, CL

respectiv

operand = operand depl. aritmetic la dr cu (CL) poz

Exemplul 1 (initial AX = AAAAH):


SAR AX, 1
Efect:

1
= AAAA H (----->)
1010 1010 1010 1010 B
-----------------------------------------------------------1101 0101 0101 0101 B
= D5 5 5 H

Valori in urma executiei instructiunii: AX = D555H, CF = 0.


Exemplul 2 (initial AX = AAAAH si CL = 4):
SAR AX, CL
Efect:

(CL)=4
1010 1010 1010 1010 B
= AAAA H (----->)
-----------------------------------------------------------1111 1010 1010 1010 B
= FAAA H

Valori in urma executiei instructiunii: AX = FAAAH, CF = 1.

3.2. Instructiuni de rotatie


Instructiunile de rotatie executa operatii asupra unui singur operand (sursa si destinatie).
In cele ce urmeaza operand este sursa si destinatie.
1. Instructiunile de rotatie la stanga fara CF au forma:
ROL operand, 1
si efectul:

operand = operand rotit spre stanga cu o pozitie

sau

ROL operand, CL

respectiv

operand = operand rotit spre stanga cu (CL) poz.

Exemplul 1 (initial AX = AAAAH):


ROL AX, 1
Efect:
1010 1010 1010 1010 B

= AAAA H (rot. stg. cu 1)


11

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
------------------------------------------------------------------0101 0101 0101 0101
1B
= 5555H
Valori in urma executiei instructiunii: AX = 5555H, CF = 1.
Exemplul 2 (initial AX = AAAAH si CL = 4):
ROL AX, CL
Efect:
1010 1010 1010 1010 B
= AAAA H (rot. stg. cu CL)
---------------------------------------------------------------------1010 1010 1010 1010 B
= AAAA H
Valori in urma executiei instructiunii: AX = AAAAH, CF = 0.

2. Instructiunile de rotatie la stanga cu CF au forma:


RCL operand, 1
si efectul:

operand = (operand,CF) rotit spre stanga cu o poz.

sau

RCL operand, CL

respectiv

operand = (operand,CF) rotit spre stg. cu (CL) poz.

Exemplul 1 (initial AX = AAAAH si CF = 1):


RCL AX, 1
Efect:
= AAAA H (rot. stg. cu 1)
(CF = 1) 1010 1010 1010 1010 B
-------------------------------------------------------------------=5555H
(CF = 1) 0101 0101 0101 0101 B
Valori in urma executiei instructiunii: AX = 5555H, CF = 1.
Exemplul 2 (initial AX = AAAAH si CF = 0):
RCL AX, 1
Efect:
(CF = 0) 1010 1010 1010 1010 B
= AAAA H (rot. stg. cu 1)
-------------------------------------------------------------------(CF = 1) 0101 0101 0101 0100 B
=5554H

12

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Valori in urma executiei instructiunii: AX = 5554H, CF = 1.
Exemplul 3 (initial AX = AAAAH, CL = 4 si CF = 1):
RCL AX, CL
Efect:
(CF = 1) 1010 1010 1010 1010 B
= AAAA H (rot. stg. cu CL)
---------------------------------------------------------------= AAAD H
(CF = 0) 1010 1010 1010 1101 B
Valori in urma executiei instructiunii: AX = AAADH, CF = 0.
Exemplul 4 (initial AX = AAAAH, CL = 4 si CF = 0):
RCL AX, CL
Efect:
= AAAA H (rot. stg. cu CL)
(CF = 0) 1010 1010 1010 1010 B
---------------------------------------------------------------------(CF = 0) 1010 1010 1010 0101 B
= AAA5 H
Valori in urma executiei instructiunii: AX = AAA5H, CF = 0.
3. Instructiunile de rotatie la dreapta fara CF au forma:
ROR operand, 1
si efectul:

operand = operand rotit spre dreapta cu o pozitie

sau

ROR operand, CL

respectiv

operand = operand rotit spre dreapta cu (CL) poz.

Exemplul 1 (initial AX = AAAAH):


ROR AX, 1

Efect:
1010 1010 1010 1010
0B
= AAAA H (rot. dr. cu 1)
------------------------------------------------------------------0101 0101 0101 0101 B
=5555H

13

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Valori in urma executiei instructiunii: AX = 5555H, CF = 0.
Exemplul 2 (initial AX = AAAAH si CL = 4):
ROR AX, CL
Efect:
1010 1010 1010 1010 B
= AAAA H (rot. dr. cu CL)
------------------------------------------------------------------1010 1010 1010 1010 B
= AAAA H
Valori in urma executiei instructiunii: AX = AAAAH, CF = 1.

4. Instructiunile de rotatie la dreapta cu CF au forma:


RCR operand, 1
si efectul:

operand = (operand,CF) rotit spre dreapta cu o poz.

sau

RCR operand, CL

respectiv

operand = (operand,CF) rotit spre dr. cu (CL) poz.

Exemplul 1 (initial AX = AAAAH si CF = 1):


RCR AX, 1
Efect:
1010 1010 1010 1010
0 (CF = 1) B = AAAA H (rot. dr. cu 1)
-----------------------------------------------------------------------1101 0101 0101 0101 (CF = 0) B = D 5 5 5 H
Valori in urma executiei instructiunii: AX = D555H, CF = 0.
Exemplul 2 (initial AX = AAAAH si CF = 0):
RCR AX, 1
Efect:
1010 1010 1010 1010
0 (CF = 0) B = AAAA H (rot. dr. cu 1)
-----------------------------------------------------------------------0101 0101 0101 0101 (CF = 0) B = 5 5 5 5 H
Valori in urma executiei instructiunii: AX = 5555H, CF = 0.
14

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Exemplul 3 (initial AX = AAAAH, CL = 4 si CF = 1):
RCR AX, CL
Efect:
1010 1010 1010 1010 (CF = 1) B = AAAA H (rot. dr. cu CL)
--------------------------------------------------------------------------0101 1010 1010 1101 (CF = 1) B = 5AAA H
Valori in urma executiei instructiunii: AX = 5AAAH, CF = 1.
Exemplul 4 (initial AX = AAAAH, CL = 4 si CF = 0):
RCR AX, CL
Efect:
1010 1010 1010 1010 (CF = 0) B = AAAA H (rot. dr. cu CL)
-------------------------------------------------------1010 1010 1010 0101 (CF = 1) B = AAAA H
Valori in urma executiei instructiunii: AX = AAAAH, CF = 1.

4. Exemple de programe
4.1. Calcule in dubla precizie
Rolul principal al bitului de transport in instructiunile de deplasare si rotatie este acela de a
permite efectuarea calculelor in dubla precizie (pe 32 biti).
1. Deplasarea cu o pozitie la stanga a unei valori de 32 biti - perechea de registre (AX, BX):
Initial: AX = AAAAH si BX = 8888H.
SHL AX, 1
SHL BX, 1
ADC AX, 0

; deplasarea MSW
; deplasarea LSW
; adunarea bitului CF la LSW

Efectul secventei este:


1010 1010 1010 1010
1000 1000 1000 1000 B
= AAAA 8 8 8 8 H
//// //// //// ////
//// //// //// ////
--------------------------------------------------------------------------------------------------------(CF = 1)0101 0101 0101 0101
1
0001 0001 0001 0000
0B
= 5555 1110H
In urma executiei secventei: AX = 5555H, BX = 1110H, CF = 1 (rezultat 1 5555 1110H).
15

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
2. Deplasarea cu o pozitie la dreapta a unei valori de 32 biti - perechea de registre (AX, BX):
Initial: AX = AAAAH si BX = 8888H.
SHR BX, 1
SHR AX, 1
ADC DX, 0
MOV CL, 15
SHL DX, CL
ADD BX, DX

;
;
;
;
;
;

deplasarea LSW
deplasarea MSW
adunarea bitului CF la DX
pregatire deplasare 15 biti
deplasare CF pe pozitia MSb
adunarea bitului CF la MSW

Efectul secventei este:


1010 1010 1010 1010
0
1000 1000 1000 1000
0
B = AAAA 8 8 8 8 H
\\\\ \\\\ \\\\ \\\\
\\\\ \\\\ \\\\ \\\\
--------------------------------------------------------------------------------------------------------0101 0101 0101 0101
0100 0100 0100 0100 (CF = 0) B = 5 5 5 5 4 4 4 4 H
In urma executiei secventei: AX = 5555H, BX = 4444H, CF = 0 (rezultat 5555 4444H).
3. Rotatia cu o pozitie spre stanga a unei valori de 32 biti - perechea de registre (AX, BX):
Initial: AX = AAAAH, BX = 8888H, DX = 0000H, CL = 4 si CF = 1.
ROL AX, 1
RCL BX, 1
ADC AX, 0

; rotirea MSW
; rotirea (LSW,CF)
; adunarea la MSW a bitului CF
; obtinut prin rotirea lui BX

Efectul secventei este:


1000 1000 1000 1000 B
= AAAA 8 8 8 8 H
1010 1010 1010 1010
//// //// //// ////
//// //// //// ////
--------------------------------------------------------------------------------------------------------(CF = 1)0101 0101 0101 0101
1
0001 0001 0001 0001 B
= 5555 1111H
In urma executiei secventei: AX = 5555H, BX = 1111H, CF = 1 (rezultat 1 5555 1111H).
4. Rotatia cu o pozitie spre dreapta a unei valori de 32 biti - perechea de registre (AX, BX):
Initial: AX = AAAAH, BX = 8888H, DX = 0000H, CL = 4 si CF = 1.
ROR AX, 1
RCR BX, 1

; rotirea cuvantului superior (MSW)


; rotirea cuvantului inferior (LSW) cu CF
; de la rotirea lui AX
16

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
ADC DX, 0
ROR DX, 1
ADD AX, DX

;
;
;
;
;

aducerea in DX a lui CF de la rotirea lui BX


plasarea in DX a lui CF obtinut prin rotirea
lui BX, pe cea mai semnificativa pozitie
adunarea la cuvantul superior a bitului
CF obtinut prin rotirea lui BX

Efectul secventei este:


B = AAAA 8 8 8 8 H
1010 1010 1010 1010
0
1000 1000 1000 1000
\\\\ \\\\ \\\\ \\\\
\\\\ \\\\ \\\\ \\\\
--------------------------------------------------------------------------------------------------------0101 0101 0101 0101 (CF = ) 0100 0100 0100 0100 (CF = 0) B = 5 5 5 5 4 4 4 4 H
In urma executiei secventei: AX = 5555H, BX = 4444H, CF = 0 (rezultat 5555 4444H).

5. Program de deplasare in dubla precizie a continutului unei variabile v cu 2 pozitii catre


dreapta.
data segment
v dw 0abcdh, 0ef12h
data ends
assume cs: cod, ds: data
cod
segment
st:
mov ax, data
mov ds, ax
mov ax, x
mov bp, offset v
mov ax, ds:[bp]
mov bx, ds:[bp+2]
mov dx, 0
shr ax, 1
shr bx, 1
adc dx, 0
ror dx, 1
adc ax, 0
mov dx, 0
shr ax, 1
shr bx, 1
adc dx, 0
ror dx, 1
adc ax, 0

; initializari

; prima deplasare

; a doua deplasare

17

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3

cod
end

mov ds:[bp], ax
mov ds:[bp+2], bx
mov ah, 4ch
int 21h
ends
st

; stocare rezultat

4.2. Alte programe


1. Program de calcul al produsului unei variabile x cu valoarea 7. Rezultatul plasat in
memorie in variabila y.
data segment
x dw 120h
y dw ?
data ends
assume cs: cod, ds: data
cod
segment
st:
mov ax, data
mov ds, ax
mov ax, x
mov y, ax
shl ax, 1
add y, ax
shl
ax, 1
add y, ax
mov ah, 4ch
int 21h
cod
ends
end
st

; copiere x in AX
; copiere x in y (y = x)
; calcul 2x
; adunare 2x la y (y = x+2x = 3x)
; calcul 4x
; adunare 4x la y (y = x+2x+4x = 7x)

2. Program de calcul al produsului unei variabile x cu valoarea 0,75 (=3/4). Rezultatul plasat
in memorie in variabila y.
data segment
x dw 120h
y dw ?
data ends
assume cs: cod, ds: data
cod
segment
st:
mov ax, data
mov ds, ax
; Varianta 1
18

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
mov ax, x
shr ax, 1
mov y, ax
shr
ax, 1
add y, ax
; Varianta 2
mov ax, x
mov y, ax
shr ax, 1
shr
ax, 1
sub y, ax
mov ah, 4ch
int 21h
cod
ends
end
st

; copiere x in AX
; calcul x/2
; copiere x/2 in y (y = x/2)
; calcul x/4
; adunare x/4 la y (y =x/2+x/4= 3x/4)
; copiere x in AX
; copiere x in y (y = x)
; calcul x/2
; calcul x/4
; scadere x/4 din y (y =x-x/4= 3x/4)

5. Desfasurarea lucrarii
1. Se editeaza programul de calcul al produsului unei variabile x cu valoarea 7 (vezi $4.2.)
intr-un fisier cu numele AP31.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
2. Se concepe si editeaza un program de calcul al produsului unei variabile z cu valoarea
3,25 intr-un fisier cu numele AP32.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
3. Se concepe si editeaza un program de calcul al expresiei e = (2x + 1)(x/2 - 1) intr-un fisier
cu numele AP33.ASM.

6. Teme si exercitii
1. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a deplasa la
stanga cu 5 pozitii un cuvint din memorie folosind numai registrele de tip octet (AH, AL, BH, BL,
CH, CL, DH, DL).
2. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a roti catre
dreapta cu 5 pozitii un cuvint din memorie folosind numai registrele de tip octet (AH, AL, BH, BL,
CH, CL, DH, DL).

19

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3

7. Intrebari
1. Care sunt tipurile de operanzi ai instructiunilor microprocesorului Intel 8086 ?
2. Care sunt modurile de adresare a memoriei principale ?
3. Care sunt modurile de adresare a porturilor ?
4. Care este diferenta intre negatia logica (NOT) si cea aritmetica (NEG) ?
5. Care este diferenta intre deplasarea logica la dreapta (SHR) si cea aritmetica (SAR) ?
6. Care este diferenta intre deplasarile logice si rotatiile fara CF ?
7. Care este diferenta intre rotatiile fara CF si rotatiile cu CF ?

20

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4

Programarea microprocesorului Intel 8086.


Instructiuni de transfer al comenzii
Scopul lucrrii
a) Instructiuni de salt.
b) Instructiuni de test.
c) Instructiuni iterative.

1. Instructiuni de salt
Instructiunile de salt pot fi de salt neconditionat si de salt conditionat.

1.1. Instructiunea de salt neconditionat


Instructiunea de salt neconditionat are forma:
JMP pozitie
unde pozitie poate fi o eticheta, un registru, o variabila, etc.
Efectul ei este incarcarea in registrul IP si eventual in registrul CS a unei adrese noi (obtinuta
din pozitie), a urmatoarei instructiuni care va fi executata.

1.2. Instructiuni de salt conditionat


Instructiunile de salt conditionat au forma:
Jconditie pozitie
unde dupa ce conditie este testata, se executa saltul doar daca aceasta este indeplinita.

Formele particulare ale instructiunii de salt conditionat sunt:


1. Pentru orice tip de valori:
a) Salt conditionat de CX=0 (registrul contor are continut nul):
JCXZ
CXZ pozitie
1

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
b) Salt conditionat de CF=1 (transport la operatia anterioara):
JC
C pozitie
c) Salt conditionat de CF=0 (fara transport la operatia anterioara):
JNC
NC pozitie
d) Salt conditionat de ZF=1 (rezultat zero la operatia anterioara):
JE
E pozitie
JZ
Z pozitie
e) Salt conditionat de ZF=0 (rezultat nenul la operatia anterioara):
JNE
NE pozitie
JNZ
NZ pozitie
f) Salt conditionat de PF=1 (rezultat par la operatia anterioara):
JP
P pozitie
JPE
PE pozitie
g) Salt conditionat de PF=0 (rezultat impar la operatia anterioara):
JNP
NP pozitie
JPO
PO pozitie

2. Pentru valori fara semn (naturale)


a) Salt conditionat de (CF=0 AND ZF=0), adica rezultat "mai mare" (> 0) la operatia anterioara:
JA
A pozitie
JNBE
NBE pozitie
b) Salt conditionat de CF=0, adica rezultat "mai mare sau egal" (>= 0) la operatia anterioara:
JAE
AE pozitie
JNB
NB pozitie
c) Salt conditionat de CF=1, adica rezultat "mai mic" (< 0) la operatia anterioara:
JB
B pozitie
JNAE
NAE pozitie

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
d) Salt conditionat de (CF=1 AND ZF=1), adica rezultat "mai mic sau egal" (<= 0) la operatia
anterioara:
JBE
BE pozitie
JNA
NA pozitie

3. Pentru valori cu semn (intregi):


a) Salt conditionat de (SF=OF AND ZF=0), adica rezultat "mai mare" (> 0) la operatia anterioara:
JG
G pozitie
JNLE
NLE pozitie
b) Salt conditionat de SF=OF, adica rezultat "mai mare sau egal" (>= 0) la operatia anterioara:
JGE
GE pozitie
JNL
NL pozitie
c) Salt conditionat de SF<>OF, adica rezultat "mai mic" (< 0) la operatia anterioara:
JL
L pozitie
JNGE
NGE pozitie
d) Salt conditionat de (SF<>OF AND ZF=1), adica rezultat "mai mic sau egal" (<= 0) la operatia
anterioara:
JLE
LE pozitie
JNG
NG pozitie
e) Salt conditionat de SF=1 (rezultat negativ la operatia anterioara):
JS
S pozitie
f) Salt conditionat de SF=0 (rezultat pozitiv la operatia anterioara):
JNS
NS pozitie
g) Salt conditionat de OF=1 (depasire de gama la operatia anterioara):
JO
O pozitie
h) Salt conditionat de OF=0 (fara depasire de gama la operatia anterioara):
JNO
NO pozitie

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
Cu ajutorul acestor instructiuni se pot realiza structuri de decizie in program, asemanatoare
instructiunilor if din limbajele de nivel inalt (C, Pascal, etc.).
Exemplul 1 (calculul modulului unei sume):
ADD AX, DX
; suma
JGE et1
; daca AX >= 0, ramane neschimbat
NEG AX
; altfel AX = - AX
et1:
MOV rez, AX
; variabila rez ia valoarea AX
Exemplul 2 (indicarea prin 'O" rezultatul nul si prin 'N' rezultatul nenul al unei sume):
MOV rez, 'O' ; rezultat presupus nul
ADD AX, DX
; suma
JZ
et1
; daca AX = 0 salt
MOV rez, 'N' ; altfel rezultat nenul
et1:
; instructiunea urmatoare

2. Instructiuni de test
In cazul in care se doreste testarea unor conditii pentru a fi utilizate intr-o instructiune de salt
conditionat fara ca rezultatul testului sa fie incarcat intr-un registru sau stocat in memorie se pot
utiliza instructiunile de test CMP si TEST.
Aceste instructiuni au un efect asemanator cu instructiunile SUB respectiv AND, dar fara ca
rezultatul sa fie incarcat intr-un registru sau stocat in memorie.

1. Instructiunea CMP are forma:


CMP operand1, operand2
si efectul:

operand1 - operand2

Exemplu (initial AX = 1000 H si BX = 800 H):


CMP AX, BX
Efect:
0001 0000 0000 0000 B
= 1000 H 0000 1000 0000 0000 B
= 0800 H
------------------------------------------------0000 1000 0000 0000 B
= 0800 H
In urma executiei instructiunii: AX = 1000 H, BX = 800 H, OF=0, SF=0, ZF=0 si CF = 0.

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4

2. Instructiunea TEST are forma:


TEST operand1, operand2
si efectul:

operand1 AND operand2

Exemplu (initial AX = 5555 H si BX = 6666 H):


TEST AX, BX
Efect:
0101 0101 0101 0101 B
= 5555 H x
0110 0110 0110 0110 B
= 6666 H
------------------------------------------------0100 0100 0100 0100 B
= 4444 H
In urma executiei instructiunii: AX = 5555 H, BX = 6666 H, SF=0 si ZF=0.

3. Instructiuni iterative
3.1. Instructiunea iterativa neconditionata
Instructiunea iterativa simpla are forma:
LOOP pozitie
unde pozitie poate fi o eticheta, un registru, o variabila, etc.
Prima operatie efectuata in acest caz este decrementarea registrului CX (contor sau
numarator). Daca continutul acestuia nu devine 0 dupa decrementare, efectul este identic
instructiunii JMP. Daca in urma decrementarii CX devine 0, instructiunea LOOP nu are nici un alt
efect.
Astfel, efectul instructiunii:
LOOP etich
este echivalent cu al secventei:
DEC CX
JNZ etich
Instructiunea LOOP se utilizeaza intr-o structura de program tipica:

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
MOV CX, nr

etich: ...
...
LOOP etich

; secventa de
; instructiuni

care permite executia repetata de nr ori a secventei de instructiuni.


Aceasta instructiune permite realizarea structurilor iterative de program.
Exemplu (calculul in DX a numarului de biti 1 din cuvintul cuv, varianta prin bitul Carry
(CF), ciclu cu test final, numar fix = 16 iteratii):

et1:
et2:

MOV AX, cuv


XOR DX, DX
MOV CX, 16
; pentru CX de la 16 la 1
SHL AX, 1
; CF = MSb
JNC et2
; daca CF = 0 salt
INC DX
; altfel (CF=0), numara un 1
LOOP et1
; repeta

3.2. Instructiuni iterative conditionate


Instructiunile iterative conditionate au formele:
a) Bucla conditionata de rezultat nul (ZF=1):
LOOPZ
Z etich
LOOPE
E etich

sau

b) Bucla conditionata de rezultat nenul (ZF=0):


LOOPNZ
NZ etich
LOOPNE
NE etich

sau

Structura tipica in care se utilizeaza instructiunea LOOPconditie:


MOV CX, nr

etich: ...
...
LOOPconditie etich

; secventa de
; instructiuni

permite executia repetata de cel mult nr ori a secventei de instructiuni, deoarece repetarea este
intrerupta in cazul in care conditie este indeplinita.
Astfel, efectul instructiunii:
6

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
LOOPconditie etich
este echivalent cu al secventei:
Jconditie etich
DEC CX
JNZ etich
Exemplu (cautarea bitului 0 cel mai semnificativ in cuv, ciclu cu test final cu dubla conditie):

et:

MOV CX, 15 ; CX = pozitia bitului testat


MOV BX, 1 ; BX = masca
ROR BX, 1 ; roteste BX cu o pozitie catre dr.
TEST cuv, BX
; AND bit cu bit fara stocarea rez.
LOOPNZ et
; pana cand ((bit testat=0)OR(CX=0))

4. Exemple de programe
1. Program de calcul al produsului a doua cifre hexazecimale citite de la tastatura si de
afisare a rezultatului pe ecran.
data segment
numeprog
db 25 dup(0ah),'Calculul produsului a doua valori $'
cifra1
db 2 dup(0ah),0dh,' Prima valoare: $'
cifra2
db 2 dup(0ah),0dh,' A doua valoare: $'
eroarecifra
db 2 dup(0ah),0dh,' Valorile nu sunt cifre hexa ! $'
rezultat
db 2 dup(0ah),0dh,' Rezultatul: $'
data ends
assume cs:cod, ds:data
cod segment
start:
mov ax, data
mov ds, ax
mov dx, offset numeprog ; afisare sir caractere
mov ah, 9
; (nume program)
int 21h
mov dx, offset cifra1
; afisare sir caractere
mov ah, 9
; (mesaj cifra 1)
int 21h
mov

ah, 1

; citire caracter cu ecou pe ecran


7

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
int

21h

; (citire prima cifra in al)

; conversie caracter -> cifra


cmp al, 30h
; caracter >= '0' ?
jl er1
; nu => eroare
cmp al, 3ah
; da => caracter <= '9' ?
jnl urm11
; nu => continuare cu urmatorul test
sub al, 30h ; da => ajustare (caracterul e cifra 0..9)
jmp sf1
; salt la sfirsit conversie
urm11:cmp al, 41h
; caracter >= 'A' ?
jl er1
; nu => eroare
cmp al, 47h
; da => litera <= 'F' ?
jnl urm12
; nu => continuare cu urmatorul test
sub al, 37h ; da => ajustare (caracterul e cifra A..F)
jmp sf1
; salt la sfirsit conversie
urm12:cmp al, 61h
; caracter >= 'a' ?
jl er1
; nu => eroare
cmp al, 67h
; da => litera <= 'f' ?
jnl er1
; nu => continuare cu urmatorul test
sub al, 57h ; da => ajustare (caracterul e cifra a..f)
jmp sf1
er1:mov dx, offset eroarecifra
mov ah, 9
; afisare sir caractere
int 21h
; (mesaj eroare)
sf1:
mov
bl, al
; cifra 1 in bl
mov dx, offset cifra2
mov ah, 9
int 21h
mov ah, 1
int 21h

; afisare sir caractere


; (mesaj cifra 2)
; citire caracter cu ecou pe ecran
; (citire a doua cifra in al)

; conversie caracter -> cifra


cmp al, 30h
; caracter >= '0' ?
jl er2
; nu => eroare
cmp al, 3ah
; da => caracter <= '9' ?
jnl urm21
; nu => continuare cu urmatorul test
sub al, 30h ; da => ajustare (caracterul e cifra 0..9)
jmp sf2
; salt la sfirsit conversie
urm21:cmp al, 41h
; caracter >= 'A' ?
jl er2
; nu => eroare
cmp al, 47h
; da => litera <= 'F' ?
jnl urm22
; nu => continuare cu urmatorul test
sub al, 37h ; da => ajustare (caracterul e cifra A..F)
jmp sf2
; salt la sfirsit conversie
8

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
urm22:cmp al, 61h
; caracter >= 'a' ?
jl er2
; nu => eroare
cmp al, 67h
; da => litera <= 'f' ?
jnl er2
; nu => continuare cu urmatorul test
sub al, 57h ; da => ajustare (caracterul e cifra a..f)
jmp sf2
er2:mov dx, offset eroarecifra
mov ah, 9
; afisare sir caractere
int 21h
; (mesaj eroare)
sf2:
; calcul propriu-zis
mov dl, bl
mul dl
mov bx, ax
mov dx, offset rezultat
mov ah, 9
int 21h
mov cl, 4
mov
al, bl
shr al, cl

; cifra 1
; (cifra 2 in al)
; rezultat in bx
; afisare sir caractere
; (mesaj rezultat)
; separare cifra 1

; conversie cifra 1 -> caracter


cmp al, 0ah
; cifra = 0..9 ?
jl urm3
; da => ajustare (urm4)
cmp al, 10h
; nu => cifra = A..F ?
jnl er3
add al, 37h
; da => ajustare
jmp sf3
urm3:add al, 30h
jmp sf3
er3:
sf3:
mov dl, al
mov ah, 2
; afisare cifra 1
int 21h
shl
shr

mov
al, cl
al, cl

al, bl

; separare cifra 2

; conversie cifra 2 -> caracter


cmp al, 0ah
; cifra = 0..9 ?
jl urm4
; da => ajustare (urm4)
9

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
cmp al, 10h
jnl er4
add al, 37h
jmp sf4
urm4:add al, 30h
jmp sf4
er4:
sf4:
mov dl, al
mov ah, 2
int 21h
mov
int
mov
int
cod
end

ah, 8
21h
ah, 4ch
21h
ends
start

; nu => cifra = A..F ?


; da => ajustare

; afisare cifra 2
; citire caracter fara ecou pe ecran
; (Enter)
; exit

2. Program de ordonare crescatoare a 2 valori dintr-un sir de numere naturale.


DATA SEGMENT
vect DW 8766 H, 5678 H, 0ABC3 H, 0B44 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET VECT
MOV AX, [BX]
; AX ia valoarea vect[0]
CMP AX, [BX+2]
; AX (vect[0]) e comparat cu vect[2]
JB inord
; daca vect[0] < vect[1] atunci sunt
; in ordine crescatoare (salt)
XCHG AX, [BX+2]
; altfel se permuta vect[0] cu
MOV [BX], AX
; vect[2]
inord:MOV AH, 4CH
INT 21H
COD ENDS
END START
3. Program de ordonare crescatoare a 2 valori dintr-un sir de intregi cu semn.
DATA SEGMENT
10

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
vect DW 8766 H, 5678 H, 0ABC3 H, 0B44 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET VECT
MOV AX, [BX]
; AX ia valoarea vect[0]
CMP AX, [BX+2]
; AX (vect[0]) e comparat cu vect[2]
JL inord
; daca vect[0] < vect[1] atunci sunt
; in ordine crescatoare (salt)
XCHG AX, [BX+2]
; altfel se permuta vect[0] cu
MOV [BX], AX
; vect[2]
inord:MOV AH, 4CH
INT 21H
COD ENDS
END START
4. Program de calcul al numarului de biti egali cu 1 din cuvintul cuv in registrul DX.
a) Varianta prin bitul Carry, ciclu cu test final, numar fix = 16 iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
MOV CX, 16
; pentru CX de la 16 la 1
et1:
SHL AX, 1
; deplasare la stanga cu o pozitie
JNC et2
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
et2:
LOOP et1
; repeta
MOV AH, 4CH
INT 21H
COD ENDS
END START

b) Varianta prin bitul Carry, ciclu cu test initial, numar fix de iteratii:
11

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
MOV CX, 17
; pentru CX de la 17 la 1
et1:
DEC CX
; CX = CX - 1
JCXZ et2
; daca CX = 0 salt la et2 (gata)
SHL AX, 1
; altfel deplasare la stanga cu o pozitie
JNC et1
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
JMP et1
; repeta
et2: MOV AH, 4CH
INT 21H
COD ENDS
END START
c) Varianta prin bitul Carry, ciclu cu test final, numar variabil de iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
et1:
SHL AX, 1
; repeta deplasare la stanga cu o pozitie
JNC et2
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
et2: OR AX, AX
; testeaza AX
JNZ et1
; pana cand AX=0
MOV AH, 4CH
INT 21H
COD ENDS
END START

12

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
d) Varianta prin bitul Carry, ciclu cu test initial, numar variabil de iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
et1:
JCXZ et2
; cat timp CX <> 0
SHL CX, 1
; deplasare la stanga cu o pozitie
JNC et1
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
JMP et1
; repeta
et2:
MOV AH, 4CH
INT 21H
COD ENDS
END START
e) Varianta prin mascare si numar fix de iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
MOV BX, 1
; masca = BX = 1
et1: TEST cuv, BX
; repeta test (cuv AND BX)
JZ et2
INC DX
; daca rezultatul testului e nenul, s-a
; gasit un 1 si se incrementeaza contorul
et2: SHL BX, 1
; deplasarea mastii cu o pozitie la stg.
JNC et1
; salt daca a fost transport
MOV AH, 4CH
INT 21H
COD ENDS
END START

13

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4

5. Desfasurarea lucrarii
1. Se editeaza programul de ordonare crescatoare a 2 valori dintr-un sir de numere naturale
(vezi $4.) intr-un fisier cu numele AP41.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
2. Se concepe si editeaza un program de ordonare crescatoare a N (=4) valori dintr-un sir de
numere naturale intr-un fisier cu numele AP42.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
3. Se concepe si editeaza un program de ordonare crescatoare a N (=4) valori dintr-un sir de
numere intregi intr-un fisier cu numele AP43.ASM.
4. Se concepe si editeaza un program de deplasare in dubla precizie a continutului unei
variabile v cu N (=6) pozitii catre dreapta intr-un fisier cu numele AP44.ASM (vezi si lucrarea nr. 3,
$4.1.).

6. Teme si exercitii
1. Sa se scrie un program care sa calculeze suma in dubla precizie a doua siruri de dublucuvinte din memorie.
2. Sa se scrie un program care sa citeasca o cifra N de la tastatura, sa calculeze N! (N
factorial) si sa afiseze rezultatul pe ecran.
3. Sa se scrie un program care sa citeasca de la tastatura valorile x, y si z, sa calculeze
expresia: E = x! + 0,25y + 5z si sa afiseze rezultatul pe ecran.

7. Intrebari
1. Care sunt instructiunile de salt conditionat pentru valori de orice tip ?
2. Care sunt instructiunile de salt conditionat pentru valori naturale ?
3. Care sunt instructiunile de salt conditionat pentru valori intregi ?
4. Cum se poate realiza utilizand instructiuni de salt o structura de program de forma:
daca conditie atunci
secventa1
altfel
secventa2
14

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5

Programarea microprocesorului Intel 8086.


Instructiuni pentru lucrul cu siruri

Scopul lucrrii
a) Instructiuni de transfer pentru lucrul cu siruri.
b) Instructiuni de comparatie pentru lucrul cu siruri.

1. Instructiuni pentru lucrul cu siruri


Sirurile de date sunt declarate in limbajul de asamblare al microprocesorului Intel 8086 cu
ajutorul directivelor DB, DW si DD (in functie de tipul datelor).
Exemplul 1:
cifra DB 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0AH, 0BH, 0CH, 0DH, 0EH, 0FH
Exemplul 2:
mesaj DB 'Introduceti datele $'
In primul caz este vorba de 16 octeti reprezentand cifrele in baza 16 iar in al doilea caz este
vorba de 19 octeti reprezentand codurile ASCII ale literelor unui text.
Pentru realizarea unei operatii in mod repetat asupra elementelor consecutive ale unui sir sau
a doua siruri se utilizeaza instructiuni specializate numite instructiuni pentru lucrul cu siruri.

1.1. Instructiuni pentru lucrul cu siruri cu operanzi expliciti


Instructiunile pentru lucrul cu siruri utilizeaza intotdeauna cate 2 operanzi. Daca acestia sunt
specificati explicit in codul instructiunii dupa mnemonica atunci instructiunea se numeste cu
operanzi expliciti.

1.2. Instructiuni pentru lucrul cu siruri cu operanzi impliciti


Instructiunile pentru lucrul cu siruri care nu are cei doi operanzi specificati explicit in codul
instructiunii se numesc cu operanzi impliciti.

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
Deoarece sirurile de date se afla in memorie s-au stabilit perechi de registre utilizate implicit
pentru adresarea datelor curente ale sirurilor. Daca sirul este de tip destinatie, atunci perechea de
registre de adresare este ES : DI. Daca sirul este de tip sursa, atunci perechea de registre de adresare
este DS : SI. De aceea registrul DI poarta numele Destination Index iar registrul SI numele Source
Index.
Daca datele sunt octeti (Bytes), instructiunea utilizata va avea terminatia B iar daca datele
sunt cuvinte (Words), instructiunea utilizata va avea terminatia W.
Actualizarea registrelor de adresare difera in functie de doi parametrii:
- tipul datelor sirului (exprimat in numar de octeti: 1 pentru Byte si 2 pentru Word), care
determina valoarea absoluta a actualizarii (modulul actualizarii),
- valoarea flag-ului Direction (DF, 1 pentru sens direct si 0 pentru sens invers), care
precizeaza sensul in care se face actualizarea.
Prin conventia Intel s-a stabilit sensul direct sensul crescator al adreselor iar sensul invers
sensul descrescator al adreselor. De aceea putem spune ca valoarea flag-ului DF reprezinta semnul
actualizarii registrelor SI si/sau DI.
Daca notam cu a actualizarea:
- pentru o instructiune care lucreaza cu octeti (terminata cu B),
- daca DF = 0:
a= +1
- daca DF = 1:
a= -1
- pentru o instructiune care lucreaza cu cuvinte (terminata cu W),
a= +2
- daca DF = 0:
a= -2
- daca DF = 1:
Instructiunile pentru lucrul cu siruri se pot imparti in instructiuni de transfer si instructiuni de
comparatie. O instructiune de lucru cu siruri este doua sarcini de realizat:
- operatia propriu-zisa (transfer sau comparatie) asupra datelor curente,
- actualizarea registrelor de adresare corespunzatoare (SI si/sau DI) pentru urmatoarea
executie a instructiunii (pregatirea urmatoarelor date).

2. Instructiuni de transfer pentru lucrul cu siruri


2.1. Instructiunile MOVS, LODS, STOS
Instructiunile de transfer pentru lucrul cu siruri cu operanzi expliciti sunt:
- transfer intre doua siruri:
MOVS SIRDEST, SIRSURSA
- transfer din sir in registru (incarcare registru):
LODS AL, SIRSURSA
LODS AX, SIRSURSA
- transfer din registru in sir (stocare in memorie):

sau

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
STOS SIRDEST, AL sau
STOS SIRDEST, AX

Instructiunile cu operanzi impliciti pentru siruri de octeti au formele:


- transfer intre doua siruri:
MOVSB
- transfer din sir in registru (incarcare registru):
LODSB
- transfer din registru in sir (stocare in memorie):
STOSB
iar instructiunile cu operanzi impliciti pentru siruri de octeti au formele:
- transfer intre doua siruri:
MOVSW
- transfer din sir in registru (incarcare registru):
LODSW
- transfer din registru in sir (stocare in memorie):
STOSW
1. Efectul instructiunii MOVSB este:
a) Daca DF = 0:
ES : DI <-- DS : SI
SI <-- SI + 1
DI <-- DI + 1

- transfer curent sir - sir


- actualizare index sir sursa
- actualizare index sir dest.

ES : DI <-- DS : SI
SI <-- SI - 1
DI <-- DI - 1

- transfer curent sir - sir


- actualizare index sir sursa
- actualizare index sir dest.

b) Daca DF = 1:

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
2. Efectul instructiunii MOVSW este:
a) Daca DF = 0:
ES:DI,DI+1 <-- DS:SI,SI+1 - transfer curent sir-sir
SI <-- SI + 2
- actualizare index sir sursa
DI <-- DI + 2
- actualizare index sir dest.
b) Daca DF = 1:
ES:DI,DI+1 <-- DS:SI,SI+1 - transfer curent sir-sir
SI <-- SI - 2
- actualizare index sir sursa
DI <-- DI - 2
- actualizare index sir dest.
3. Efectul instructiunii LODSB este:
a) Daca DF = 0:
AL <-- DS : SI
SI <-- SI + 1
DI <-- DI + 1

- transfer curent sir-acumulator


- actualizare index sir sursa
- actualizare index sir dest.

AL <-- DS : SI
SI <-- SI - 1
DI <-- DI - 1

- transfer curent sir-acumulator


- actualizare index sir sursa
- actualizare index sir dest.

b) Daca DF = 1:

4. Efectul instructiunii LODSW este:


a) Daca DF = 0:
AX <-- DS : SI,SI+1 - transfer curent sir-acumulator
SI <-- SI + 2
- actualizare index sir sursa
DI <-- DI + 2
- actualizare index sir dest.
b) Daca DF = 1:
AX <-- DS : SI,SI+1 - transfer curent sir-acumulator
SI <-- SI - 2
- actualizare index sir sursa
DI <-- DI - 2
- actualizare index sir dest.
5. Efectul instructiunii STOSB este:
a) Daca DF = 0:
ES : DI <-- AL
SI <-- SI + 1
DI <-- DI + 1

- transfer curent acumulator-sir


- actualizare index sir sursa
- actualizare index sir dest.

b) Daca DF = 1:
4

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
ES : DI <-- AL
SI <-- SI - 1
DI <-- DI - 1

- transfer curent acumulator-sir


- actualizare index sir sursa
- actualizare index sir dest.

6. Efectul instructiunii STOSW este:


a) Daca DF = 0:
ES : DI,DI+1 <-- AX - transfer curent acumulator-sir
SI <-- SI + 2
- actualizare index sir sursa
DI <-- DI + 2
- actualizare index sir dest.
b) Daca DF = 1:
ES : DI,DI+1 <-- AX - transfer curent acumulator-sir
SI <-- SI - 2
- actualizare index sir sursa
DI <-- DI - 2
- actualizare index sir dest.

2.2. Prefixul REP


Pentru a reduce timpul de executie in cazul repetarii de N>1 ori a unei instructiuni pentru
lucrul cu siruri s-a introdus prefixul REP. Punand acest prefix in fata uneia dintre instructiunile
pentru lucrul cu siruri, numita generic instrsir:
REP instrsir
efectul ei devine echivalent cu al secventei:
etich: instrsir
LOOP etich
(necesitand preincarcarea in registrul CX a numarului de repetari).

3. Instructiuni de comparatie pentru lucrul cu siruri


3.1. Instructiunile CMPS si SCAS
Instructiunile de comparatie pentru lucrul cu siruri cu operanzi expliciti sunt:
- comparatie intre doua siruri:
CMPS SIRDEST, SIRSURSA
- comparatie intre sir "destinatie" si registru:
5

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
SCAS SIRDEST, AL sau
SCAS SIRDEST, AX

Instructiunile cu operanzi impliciti pentru siruri de octeti au formele:


- comparatie intre doua siruri:
CMPSB
- comparatie intre sir "destinatie" si registru:
STOSB
iar instructiunile cu operanzi impliciti pentru siruri de octeti au formele:
- comparatie intre doua siruri:
CMPSW
- comparatie intre sir "destinatie" si registru:
STOSW
Aceste instructiuni au un efect asemanator cu instructiunea de test CMP (rezultatul nu este
incarcat intr-un registru sau stocat in memorie). De aceea ele sunt folosite in cazul in care se doreste
testarea unor conditii.
1. Efectul instructiunii CMPSB este:
a) Daca DF = 0:
CMP(ES : DI),(DS : SI)- comparatie valori curente sir-sir
SI <-- SI + 1
- actualizare index sir sursa
DI <-- DI + 1
- actualizare index sir destinatie
b) Daca DF = 1:
CMP(ES : DI),(DS : SI)- comparatie valori curente sir-sir
SI <-- SI - 1
- actualizare index sir sursa
DI <-- DI - 1
- actualizare index sir destinatie
2. Efectul instructiunii CMPSW este:
a) Daca DF = 0:
CMP(ES : DI,DI+1),(DS : SI,SI+1)
SI <-- SI + 2
DI <-- DI + 2
b) Daca DF = 1:
CMP(ES : DI,DI+1),(DS : SI,SI+1)
6

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
SI <-- SI - 2
DI <-- DI - 2
3. Efectul instructiunii SCASB este:
a) Daca DF = 0:
CMP(ES : DI),AL - comparatie valori curente sir-registru
SI <-- SI + 1
- actualizare index sir sursa
DI <-- DI + 1
- actualizare index sir destinatie
b) Daca DF = 1:
CMP(ES : DI), AL - comparatie valori curente sir-registru
SI <-- SI - 1
- actualizare index sir sursa
DI <-- DI - 1
- actualizare index sir destinatie
4. Efectul instructiunii SCASW este:
a) Daca DF = 0:
CMP(ES : DI,DI+1),AX
SI <-- SI + 2
DI <-- DI + 2
b) Daca DF = 1:
CMP(ES : DI,DI+1),AX
SI <-- SI - 2
DI <-- DI - 2

3.2. Prefixele REPZ, REPE, REPNZ si REPNE


Pentru a reduce timpul de executie in cazul unei repetari de N>1 ori a unei instructiuni de
comparatie pentru lucrul cu siruri, se poate folosi unul dintre prefixele: REPZ
Z, REPE
E, REPNZ
NZ,
NZ
REPNE
NE.
NE
Punand unul dintre aceste prefixe, numit generic REPconditie, in fata uneia dintre
instructiunile de comparatie pentru lucrul cu siruri, numita generic instrsir:
REPconditie instrsir
efectul ei devine echivalent cu al secventei:
etich: instrsir
LOOPconditie etich

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5

4. Exemple de programe
4.1. Calcule in dubla precizie
1. Copierea unui sir de octeti sirsursa intr-un alt sir de octeti sirdest:
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 8 DUP(?)
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
; pregatirea adresei primului
; octet din sirsursa
MOV DI, OFFSET sirdest
; pregatirea adresei primului
; octet din sirdest
MOV CX, N
; numarul de elemente
; ale sirului sirsursa
et:
MOVSB
; copiere octet curent
; si actualizare SI si DI
LOOP et
; repetare de N ori
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
2. Copierea unui sir de cuvinte sirsursa intr-un alt sir de cuvinte sirdest:
DATA SEGMENT
sirsursa DW 0, 1000H, 2000H, 3000H, 4000H, 5000H
sirdest DW 6 DUP(?)
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD

; fortare DI = 1 (sens invers)


8

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
MOV SI, OFFSET sirsursa
ADD SI, M
MOV DI, OFFSET sirdest
ADD DI, M
MOV CX, N
et:

MOVSW
LOOP et
MOV AH, 4CH
INT 21H
COD ENDS
END START

; M = 2*(N-1) este deplasarea de


; la primul pana la ultimul
; cuvant din sirsursa
; pregatirea adresei primului
; cuvant din sirdest
; M = 2*(N-1) este deplasarea de
; la primul pana la ultimul
; cuvant din sirdest
; numarul de elemente
; ale sirului sirsursa
; copiere cuvint curent
; repetare de N ori
; exit

3. Incarcarea succesiva a octetilor unui sir sirsursa in registrul acumulator AL pentru negarea
octetilor si stocarea lor in sirul sirdest:
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 8 DUP(?)
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI,OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
et:
LODSB
; incarcare octet curent in AL
NEG AL
; negare continut AL
STOSB
; stocare continut AL in octet
; curent si actualizare DI
LOOP et
; repetare de N ori
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
4. Copierea unui sir de cuvinte sirsursa intr-un alt sir de cuvinte sirdest:
9

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
DATA SEGMENT
sirsursa DW 0, 1000H, 2000H, 3000H, 4000H, 5000H
sirdest DW 6 DUP(?)
N
EQU 6
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
REP MOVSW
; copiere cuvint curent
; repetata de N ori
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
5. Compararea unui sir de octeti sirsursa cu un alt sir de octeti sirdest si semnalarea diferentei
lor prin variabila rez:

Varianta 1.
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 0, 10H, 20H, 30H, 40H, 50H, 50H, 70H
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
MOV rez, 1
; initializare rez cu 1
; (siruri identice)
et1:
CMPSB
; comparare octet curent
JE et2
; continuare daca octetul curent
10

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
MOV rez, 0
JMP et3
et2:
et3:

LOOP et1
MOV AH, 4CH
INT 21H
COD ENDS
END START

; este identic
; modificare rez in 0
; (siruri diferite)
; oprire daca octetul curent
; nu este identic
; repetare de N ori
; exit

Varianta 2.
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 8 DUP(?)
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
MOV rez, 1
; initializare rez cu 1
; (siruri identice)
REPZ CMPSB
; repetare (de max. N ori) daca octetul
; curent al sirului sirsursa este identic
; cu octetul curent al sirului sirdest
MOV AX, ES:[DI] ; copiere ultim octet comparat din sirdest
; in acumulator
CMP AX, [SI]
; comparatie cu oct. similar din sirsursa
JE et1
; continuare daca ultimii octeti comparati
; sunt identici
MOV rez, 0
; rez = 0 (siruri diferite) daca ultimii
; octeti comparati sunt diferiti
et1:
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
6. Compararea octetilor unui sir de octeti sirdest cu un octet aflat in acumulator si
semnalarea pozitiei primului octet care difera in poz:
11

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
DATA SEGMENT
sirdest DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV DI, OFFSET sirdest
MOV CX, N
REPZ SCASB
; comparare octet curent
MOV poz, AL
; stocare pozitie octet care
; difera
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
7. Compararea cuvintelor unui sir de cuvinte sirdest cu un cuvant aflat in acumulator si
semnalarea pozitiei primului cuvant care este identic in poz:
DATA SEGMENT
sirdest DW 0, 1000H, 2000H, 3000H, 4000H, 5000H, 6000H
N
EQU 7
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV DI, OFFSET sirdest
MOV CX, N
REPNZ SCASB
; comparare octet curent
MOV poz, AL
; stocare pozitie cuvant identic
; cu cel din acumulator
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START

12

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5

5. Desfasurarea lucrarii
1. Se editeaza urmatorul program de comparare a doua siruri de octeti sir1 si sir2, si de
semnalare a diferentei lor prin variabila rez, intr-un fisier cu numele AP51.ASM:
DATA SEGMENT
sir1
DB 'Triunghiul echilateral are toate laturile congruente.'
sir2
DB 'Triunghiul echilateral are toate laturile congruente.'
sir3
DB 'Triunghiul echilateral are toate unghiurile congruente.'
rez DB ?
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV CX, SIZE sir1
MOV SI, OFFSET sir1
MOV DI, OFFSET sir2
MOV rez, 'I'
; siruri identice
REPZ CMPSB
JCXZ et1
MOV rez, 'D'
; siruri diferite
et1:
MOV AH, 4CH
INT 21H
COD ENDS
END START
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
2. Se concepe si editeaza un program care sa determine daca valoarea unui cuvant cuv se
regaseste intr-un sir de cuvinte sir si sa semnaleze gasirea lui in variabila rez, intr-un fisier cu
numele AP52.ASM.

6. Teme si exercitii
1. Sa se scrie un program care sa citeasca de la tastatura doua sir de caractere (incheiate de
exemplu prin punct), sa determine daca sirurile sunt identice sau nu si sa afiseze un mesaj
corespunzator pe ecran.

13

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
2. Sa se scrie un program care sa citeasca de la tastatura un sir de caractere (incheiat de
exemplu prin punct) si inca un caracter pe care sa il compare cu sirul citit anterior, sa determine daca
sirul contine caracterul si daca da pe ce pozitie, si sa afiseze mesaje rezultatele pe ecran

7. Intrebari
1. Care sunt perechile de registre utilizate implicit la adresare de instructiunile pentru lucrul
cu siruri ?
2. Care sunt registrele utilizate implicit de instructiunile pentru lucrul cu siruri LODS,
STOS si SCAS ?
3. Care sunt asemanarile si care sunt deosebirile intre efectul instructiunii LOOP si efectul
prefixului REP ?
4. Care sunt asemanarile si care sunt deosebirile intre efectul instructiunii LOOPE si efectul
prefixului REPE ?

14

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6

Conectarea memoriei principale


la microprocesorul Intel 8086
Scopul lucrrii
a) Decodificarea adreselor memoriei principale la microprocesorul Intel 8086.
b) Selectia circuitelor de memorie la microprocesorul Intel 8086.
c) Conectarea memoriei principale la microprocesorul Intel 8086.

1. Interfatarea microprocesorului Intel 8086 cu bus-urile


bus-urile in mod minim
1.1. Interfata microprocesorului Intel 8086 cu bus-urile
bus-urile
UCP contine alaturi de microprocesorul Intel 8086, elemente de interfata cu bus-urile,
generatoare de ceas ("CLK"), de stari "WAIT" si de "RESET". Schema tipica de realizare a unei
astfel de UCP cu microprocesorul Intel 8086 (in mod minim) este prezentata in figura 1.
Vcc

("1")

MN/MX

HOLD
HLDA
NMI
INTR

Vcc
CLK
GEN.CEAS
I 8284A
RES

INTA
M/ IO

READY
RESET

RDY
UCP
I 8086

A 16-19
AD
0-15

WAIT

NMI
INTR

protocol cerere-confirmare acceptare intr.

INTA
M/ IO

RD
WR

BHE

GENERATOR
DE STARI

HOLD
HLDA

protocol cerere-confirmare cedare bus-uri

(BC)

RD
WR

DI

DO

LATCH
I 8282
STB
OE

20
4
8

BHE
A
0-19

(BA)

ALE
16
DT/ R
DEN
mod minim

T/R
OE BUFFER
I 8286
A
B
0-7
0-7

optional pentru
bus de date
incarcat
16

0-15

(BD)

Fig. 1. Interfata microprocesorul Intel 8086 cu bus-urile in mod minim


Se observa ca in cazul unui numar mare de circuite conectate pe BD (D0-15) este
necesara folosirea unor buffere pentru date (separatoare de magistrala). Transferul prin buffer
este validat de semnalul DEN\ iar sensul transferului este selectat prin semnalul DT/R\.

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Semnificatiile pinilor in mod minim sunt urmatoarele:
AD0-15
- adrese in T1/date in T2 , T3 , TW , T4 multiplexate in timp (BA+BD - I/O);
A0 este analog BHE\, validind bus-ul inferior ("Low") de date D0-7 - BDI (O);
trec in impedanta inalta (Z) in ciclurile "INTA" sau la cedarea bus-urilor
A16-19/ S3-6 - adrese (BA - O) / semnale de stare a UCP in T2-4 (BC - O);
S6 = "0" indica ocuparea bus-urilor de catre UCP
S5 = IF = starea flag-ului de intrerupere ("0" = inhibata,"1" = validata)
S4
S3
- indica registrul segment curent utilizat pentru adresare:
"0"
"0"
"Alternate Data"
"0"
"1"
"Stack"
"1"
"0"
"Code or None"
"1"
"1"
"Data"
BHE\ / S7
- comanda validare bus superior ("High") de date D8-15 - BDH (O)
/ semnal de stare a UCP in T2-4 (BC - I);
BHE\ A0
Transfer
"0"
"0"
D0-15
"0"
"1"
D8-15
"1"
"0"
D0-7
"1"
"1"
inhibat
ALE
- comanda de memorare a liniilor de adresa A0-15 ("latch"-uire pentru
RD\
- comanda de citire de pe BD ("0" = citire din memorie/porturi - O);
WR\
- comanda de scriere pe BD ("0" = scriere in memorie/porturi - O);
M/IO\
- comanda de selectie memorie/porturi ("0" = porturi; "1" = memorie - O);
DT / R\
- comanda sensului transferului datelor ("0" = receptie; "1" = transmisie - O);
DEN\
- comanda de validare date ("0" = validare - O);
NMI
- comanda intrerupere nemascabila ("1" = intrerupere - I);
INTR
- comanda (cerere) intrerupere mascabila ("1" = cerere intrerupere - I);
INTA\
- comanda (confirmare) acceptare intrerupere mascabila (semnal "RD" pentru
intrerupator in ciclurile de intrerupere "INTA 1,2" - O);
HOLD
- comanda (cerere) de cedare a busurilor catre alta UC "master" (I);
HLDA
- comanda (confirmare) a acceptarii cedarii bus-urilor catre UC "master" (O);
CLK
- semnal de tact (ceas) necesar operatiilor interne secventiale (I);
READY
- comanda (semnalarea) starii "gata" de transfer a memoriei (incheierea starii de
asteptare TW ("WAIT") - I);
RESET
- comanda de resetare a circuitului.
MN / MX\
- comanda modului ("1" = mod minim - I);

1.2. Ciclurile masina de bus la sisteme cu microprocesor Intel 8086


Un ciclu masina de bus pentru UCP I8086 se compune din minimum 4 perioade de ceas,
notate Ti , cu i = 1 .. 4 si perioade suplimentare (de asteptare - WAIT) notate TW in cazul in care
logica externa de generare a semnalului READY (gata) il tine pe acesta in "0" in perioada T2.
Acest mecanism este necesar pentru sincronizarea UCP cu memoriile sau perifericele (porturile)
mai lente.

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Figurile 2 si 3 prezinta formele de unda ale semnalelor care participa la realizarea
ciclurilor de citire (RD) si de scriere (WR) a datelor/ instructiunilor sau de citire a vectorului de
intrerupere (INTA).
T
1

T
2

T
3

T
4

T
W

CLK
A/ D

ALE

BHE, A

0-15

0-15

/S
16-19 3-7

momentul
deschiderii

citire date:

0-15

0-15

momentul
inchiderii latch-ului

noua adresa memorata de latch de la care se face citirea datelor

BHE , A

16-19

RD / INTA

3-7

comanda citire date

DT/ R

validare sens receptie

DEN

validare bus date


READY

READY

WAIT

ultimul moment in care se poate face


tranzitia in "1" pentru a nu apare T

UCP inactiva in starea


anterioara lui T 4

Fig. 2. Ciclurile de citire de pe bus (RD si INTA)

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
T
1

T
2

T
3

T
4

T
W

CLK
A/ D

ALE

BHE, A

0-15

0-15

/S
16-19 3-7

scriere date:

0-15

momentul
deschiderii

0-15

momentul
inchiderii latch-ului

noua adresa memorata de latch la care se face scrierea datelor

BHE , A

16-19

3-7

WR

comanda scriere date

DT/ R

validare sens transmisie

DEN

validare bus date


READY

READY

WAIT

ultimul moment in care se poate face


tranzitia in "1" pentru a nu apare T

UCP inactiva in starea


anterioara lui T 4

Fig. 3. Ciclul de scriere pe bus (WR)


In perioada T1 microprocesorul lanseaza pe liniile A0-19 adresa fizica a locatiei pe care
vrea sa o acceseze. Datorita multiplexarii in timp realizata de UCP pe liniile A/D0-15 este
necesara separarea adreselor de date (demultiplexarea) prin memorarea adreselor pe perioadele
T2-4 in latch-urile externe 74S373 la frontul negativ al semnalului ALE.
In perioada T2 este lansat semnalul de accesare: RD (scriere) sau WR (citire) care
valideaza transferul datelor prin intermediul liniilor A/D0-15 (pe post de D0-15) in perioadele
T3-4.
In perioadele in care coada interna de stocare a instructiunilor (Q) este plina iar unitatea
interna de executie (EU) nu solicita transferuri pe bus apar cicluri inactive (Idle State) notate TI.
Pe durata ciclurilor inactive, pe A0-19 se genereaza starea din ciclul anterior iar pe A/D0se
genereaza
data anterioara (daca ciclul anterior a fost "WR") sau este in impedanta mare
15
(daca ciclul anterior a fost "RD").

1. Decodificarea adreselor memoriei principale si selectia circuitelor de memorie


la microprocesorul Intel 8086
Memoria principala in sistemele cu microprocesor (UCP) este realizata cu elemente
semiconductoare (ROM, RAM), conectarea acestora facindu-se prin intermediul bus-urilor de
adrese (BA), de comenzi (BC) si de date (BD).
4

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Largimea in numar de biti a BA determina capacitatea maxima a memoriei direct
adresabile de catre UCP. Multimea adreselor posibile este 0 .. 2n-1, daca pe BA exista n linii de
adresa A0 .. An-1. Aceasta multime (A) se numeste spatiul adreselor. Multimea locatiilor fizice
in care sunt memorate date de b biti (in general b=8) va fi numita spatiul memoriei (M).
In sistemele simple, adresele generate de UCP pe BA coincid cu adresele la intrarea
memoriei fizice, dimensiunea acesteia din urma fiind in general mai mica decit dimensiunea
spatiului adreselor. Se poate spune ca operatia de adresare aloca unei adrese din A un element
din M prin functia de translatare: fT : A --> M, iar in cazul cel mai simplu fT este functia identica.
In figura 1 este reprezentata memoria principala ca o multime de cuvinte cu b=8 biti
(octeti), in care cel mai putin semnificativ bit (LSb) este D0 , cel mai semnificativ bit (MSb) este
D7 , M = A iar fT este functia identica.
adresa

data

0:
1:

D7
D
7

i:

MSb

. . .
. . .

D1
D
1

D0
D
0

:
. . .

j:

:
LSB

j+1:

MSB

2 n-1:
20
(2 -1)

LSb octet

cuvint de 16 biti

b = 8 biti

Fig.1 Harta memoriei principale la microprocesorul Intel 8086


Fiecare octet este identificat prin adresa sa a care apartine A.
In cazul in care se lucreaza cu date reprezentate pe mai multi octeti atunci se aloca in
mod corespunzator in M mai multi octeti adiacenti conform unei conventii prestabilite.
Conventia Intel este: octetul cel mai putin semnificativ (LSB) se plaseaza la adresa cea mai mica,
iar octetul cel mai semnificativ (MSB) la adresa cea mai mare din intervalul de adrese ale zonei
de cuvint multi-octet.
Microprocesorul Intel 8086 are d = 16 biti pe BD si n = 20 biti pe BA. Spatiul adreselor
lui (A) contine 220 elemente.
Organizarea memoriei ca o succesiune de octeti este utilizata si pentru microprocesoare
cu d = 16 biti pe BD, din cauza ca octetul (byte-ul) reprezinta (si din considerente tehnologice)
unitatea unanim acceptata de reprezentare a informatiei numerice.
In acest caz accesul la memorie trebuie sa permita un transfer flexibil (pe octeti sau pe
cuvinte de 16 biti dupa caz). Metoda uzuala (folosita si in schema din figura 2) este separarea
memoriei fizice in doua "blocuri" sau "bancuri" de memorie, organizate fiecare pe cite 8 biti, la
adrese pare, respectiv impare. Bitii de adresa An-1 .. A1 (A19 .. A1 ) selecteaza perechi de octeti.
Activarea bancului superior (HIGH) si / sau a bancului inferior (LOW) se face cu ajutorul
a doua semnale, unul special generat de catre BC (BHE\ = Bus High Enable) si respectiv cel mai
putin semnificativ bit (LSb) al BA (A0). Plasarea bancului "HIGH" la adrese pare sau impare
5

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
depinde de conventia utilizata pentru microprocesorul respectiv, la Intel 8086 corespunzind
adreselor impare (pentru care A0="1").
In figura 2 este reprezentata divizarea memoriei in cele doua blocuri (HIGH si LOW).
Spatiul adreselor

Subspatiile adreselor
Bancul adreselor impare
Bancul adreselor pare
512KB
512KB
1:
0:
3:
2:
:
:
2K+1:
2K:

1 MB
0:
1:
2:
3:
:

2K:
2K+1:

FFFFF:
:

FFFFE:
FFFFF:

FFFFE:
8

19
A

1-19

D 8-15
(BDH)
High (superior)

BHE

D 0-7
(BDI)
Low (inferior)

Fig.2 Impartirea memoriei principale in blocuri de adrese pare si impare


Blocurile se reflecta pe BD prin impartirea sa in BDH (HIGH) si BDI (LOW).
Linia de adresa A0 si semnalul BHE\ comanda tipul transferului efectuat.
Rezulta urmatoarele tipuri de transferuri (in care X este o adresa para iar (X) este
continutul octetului de la adresa X):
a) octet de la adresa para (BHE\="1",A0="0"),
b) octet de la adresa impara (BHE\="0",A0="1"),
c) cuvint de la adresa impara (mai intai primul octet cu BHE\="0",A0="1", apoi si al
doilea octet cu BHE\="1",A0="0"),
d) cuvint de la adresa para (BHE\="0",A0="0").

2. Exemplu de conectare a memoriei principale la microprocesorului Intel 8086


Conectarea memoriei principale la bus-urile UCP este exemplificata pentru cazul unui un
sistem cu microprocesorul Intel 8086 avand o "harta" (map) a memoriei principale ca in figura 3.
RAM

1M x 8b

8CI-(1K x 4b)
zona
neutilizata
(disponibila)

R0M

00000 H
00FFF H
01000 H

4K x 8b

F7FFF H
F8000 H
32K x 8b

4CI-(8K x 8b)
FFFFF H

Fig.3 Exemplu de alocare a zonelor ROM si RAM ale memoriei principale


Schema electrica de principiu corespunzatoare este data in figura 4.
6

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6

BC
M/ IO

BA A17-19 A14-16

ABC
E1 DCD E2
E3
74LS138
01234567

A17-19

A0

BHE

A0

BHE
CSROM-1

NC

M/ IO

ABC
E1 DCD E2
E3
01234567

A0

BHE

A0

BHE
CSRAM-1

NC
CSRAM-0

CSROM-0
13
CS
CS
A
A
1-13 0-12
ROM0,HROM0,L

BD

A11-13 A14-16

13

CS
CS
A
A1-13 0-12
ROM1,H ROM1,L

10
CS CS CS CS
A
A
1-10 0-9
RAM0,H RAM0,L

10
CS CS CS CS
A
A
1-10 0-9
RAM1,H RAM1,L

O0-7

OE
O0-7 RD

O0-7

OE
O0-7 RD

R/W
I/O0-3 I/O0-3 I/O0-3 I/O0-3 WR

D8-15

D0-7

D8-15

D0-7

D12-15 D8-11 D4-7 D0-3

R/W
I/O0-3 I/O0-3 I/O0-3 I/O0-3 WR
4

D12-15 D8-11 D4-7 D0-3

Fig.4 Exemplu de conectare a memoriei principale la microprocesorul Intel 8086


In exemplul considerat:
- Memoria ROM are capacitate de 32Kx8b si este realizata cu 4 capsule de circuit
integrat (CI) avind fiecare capacitate de memorare de 8Kx8b.
- Memoria RAM are capacitate de 4Kx8b si este realizata cu opt CI avind fiecare
capacitate de memorare de 1Kx4b. De aceea CI de RAM sint imperecheate 2 cite 2 pentru a
forma "grupuri" de 1Kx8b.
Iesirile ROM si RAM se leaga in paralel la BD, ceea ce impune activarea la un moment
dat a unui singur circuit pe fiecare linie a BD, cu ajutorul semnalelor de selectie a circuitelor:
CS\ROM-0, CS\ROM-1, CS\RAM-0, CS\RAM-1 (active in "0"). Acestea, impreuna cu semnalele de
selectie a blocurilor (BHE\ si A0 - active tot in "0") constituie intrarile unor porti logice OR
("sau logic").
Iesirile acestor porti valideaza transferurile daca sunt plasate pe intrarile CS (Chip
Select) de selectie a fiecarui CI de memorie. Ambele CI ale unui grup RAM sint validate de
catre un semnal provenit de la acelasi circuit OR.
Datorita functiei de decodificare a circuitelor DCD pentru ROM si respectiv pentru
RAM, numai o singura iesire este activa la un moment dat, ceea ce asigura activarea unei singure
capsule (grup RAM) de memorie pe fiecare bloc al BD si inactivarea celorlalte. Circuitele
inactivate prezinta impedanta mare la iesire.
Decodificatoarele (DCD) realizeaza functia de translatare fT : A --> M, alocand adreselor
logice A0-19 , locatii fizice din cele 12 circuite.
In exemplu s-a ales dimensiunea 2no cu no = 13 pentru ROM si dimensiunea 2na cu na =
10 pentru RAM. Liniile de adresa mai putin semnificative incepind cu A1 (A1 .. Ano, respectiv
A1 .. Ana) sint conectate direct la ROM, respectiv la RAM (in exemplu: A1 .. A13, respectiv A1 ..
A10).
La intrarile decodificatoarelor sint legate celelalte linii de adresa (Ano+1 .. An-1 , respectiv
Ana+1 .. An-1,), care in exemplu sint: A14 .. A19, respectiv A11 .. A19.
7

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Dintre acestea cel mai putin semnificative mo, respectiv ma vor fi necesare
decodificatoarelor pentru a genera semnalele de selectie CS\ROM 0 .. CS\ROM (2mo-1) ,
respectiv CS\RAM 0 .. CS\RAM (2ma-1). In exemplul considerat mo = ma = 1. Asadar bitii de
adresa A14, respectiv A11 sunt utilizati in acest scop.
Restul liniilor de adresa (Ano+mo+1 .. An-1, respectiv Ana+ma+1 .. An-1) au valori fixe in
cazul decodificarii numite completa sau neprecizate in cazul decodificarii incomplete. In
exemplu s-a considerat o decodificare completa si deci A15 .. A19 pentru ROM, respectiv A12 ..
A19 pentru RAM, au valori fixate (A15 .. A19 = "1" pentru ROM, respectiv A12 .. A19 = "0"
pentru RAM).
Acest lucru se poate urmari si in tabelele de decodificare (tabelele 1 si 2) asociate
schemei, indicat a fi construite in etapa de proiectare a unor astfel de scheme.
Tab.1 Tabelul de decodificare al memoriei ROM:
M/IO

A19 .. A15

A14

A13 .. A1

Subspatiu adrese

Iesire activa

1 ........ 1

0 ........ 0
1 ........ 1

F8000 - FBFFF H

CS\ROM-0

1 ........ 1

0 ........ 0
1 ........ 1

FC000 - FFFFF H

CS\ROM-1

Tab.2 Tabelul de decodificare al memoriei RAM:


M/IO

A19 .. A12

A11

A10 .. A1

Subspatiu adrese

Iesire activa

0 ........ 0

0 ........ 0
1 ........ 1

00000 - 007FF H

CS\RAM-0

0 ........ 0

0 ........ 0
1 ........ 1

00800 - 00FFF H

CS\RAM-1

La memorie decodificarea poate fi:


- completa (toate liniile de adresa concura la precizarea unica a locatiei de memorie) - ca
in exemplul prezentat;
- incompleta (o parte din liniile de adresa nu intra in mecanismul de decodificare, valorile
bitilor corespunzatori nu conditioneaza selectia circuitelor si daca acestia sint in numar de N se
obtine o "multiplicare virtuala" de 2N ori a locatiei).
Multiplicarea virtuala a unei locatii de memorie in spatiul adreselor care apare in cazul
decofdificarii incomplete face ca locatia sa poata fi accesata ("atinsa") la mai multe adrese
diferite si are dezavantajul pierderii unei cantitati din spatiul adreselor disponibile pentru alte
circuite.
8

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Spre exemplu, daca decodificatorul pentru memoria RAM ar avea intrarile E1\ si E2\
puse la masa ("0"), iar liniile de adresa A12-A19 (8 biti ai adresei) nu ar avea nici un rol in
selectia circuitelor RAM, atunci pentru a accesa (citi sau scrie) locatia 200 H, de exemplu, s-ar
putea folosi adresele:
200 H, 1200 H, 2200 H, .. , xx200 H, .. , FF200 H
care ar fi in acest caz echivalente.
Dar, asa cum am spus, in acest caz s-ar pierde zona de memorie 1000 H - FFFFF H, in
care ar fi multiplicata de 28 = 256 ori zona 0 - FFF h.
In plus, in acest caz nu s-ar mai putea face deosebire intre memoria RAM si cea ROM la
operatiile de citire si s-ar naste conflicte (scurtcircuite) electrice.
O situatie posibila pentru decodificare incompleta fara suprapunerea memoriei RAM
peste memoria ROM ar fi aceea in care decodificatorul de RAM ar avea pe intrarea E1\ iesirea
unei porti OR cu doua intrari pe care sa fie conectate liniile de adresa A12 - A13, pe intrarea E2\
iesirea unei porti OR cu doua intrari pe care sa fie conectate liniile de adresa A14 - A15, iar liniile
de adresa A16-A19 (4 biti ai adresei) nu ar avea nici un rol in selectia circuitelor RAM.
Astfel, multiplicarea s-ar face doar de 24 = 16 ori iar locatia de adresa 200 H ar putea fi
accesata utilizind adresele:
200 H, 10200 H, .. , x0200 H, F0200 H

ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6

3. Desfasurarea lucrarii
1. Se da urmatoarea harta de utilizare a memoriei principale a unui microprocesor Intel
8086:
00000 H

RAM
1M x 8b

zona
neutilizata
(disponibila)

RAM
R0M

FFFFF H

a) Daca memoria ROM este realizata cu 8 circuite de dimensiune 8Kx8b, iar memoria
RAM cu 4 circuite de dimensiune 16Kx8b, sa se determine dimensiunile zonelor de memorie
ROM si RAM.
b) Sa se determine adresele de inceput si de sfarsit ale zonelor de memorie de la 1.a).
c) Sa se alcatuiasca tabelele de decodificare pentru circuitele de la 1.a).
d) Sa se proiecteze decodificatoarele corespunzatoare tabelelor de la 1.c).
e) Sa se completeze schema electrica de principiu pentru memoria principala de la pct.
1.a).
2. Se da aceeasi harta de utilizare a memoriei principale a unui microprocesor Intel 8086
ca la pct. 1.
a) Daca memoria ROM are dimensiunea de 128Kx8b si este realizata cu 4 circuite, iar
memoria RAM are dimensiunea de 32Kx8b si este realizata cu 8 circuite, sa se determine
dimensiunile circuitelor de memorie ROM si RAM.
b) Sa se determine adresele de inceput si de sfarsit ale zonelor de memorie de la 2.a).
c) Sa se alcatuiasca tabelele de decodificare pentru circuitele de la 2.a).
d) Sa se proiecteze decodificatoarele corespunzatoare tabelelor de la 2.c).
e) Sa se completeze schema electrica de principiu pentru memoria principala de la pct.
2.a).
3. Se da aceeasi harta de utilizare a memoriei principale a unui microprocesor Intel 8086
ca la pct. 1.
a) Daca memoria ROM are dimensiunea de 256Kx8b si este realizata cu circuite de
dimensiune 32Kx8b, iar memoria RAM are dimensiunea de 128Kx8b si este realizata cu circuite
de dimensiune 8Kx8b, sa se determine numarul circuitelor de memorie ROM si RAM.
b) Sa se determine adresele de inceput si de sfarsit ale zonelor de memorie de la 3.a).
c) Sa se alcatuiasca tabelele de decodificare pentru circuitele de la 3.a).
d) Sa se proiecteze decodificatoarele corespunzatoare tabelelor de la 3.c).
e) Sa se completeze schema electrica de principiu pentru memoria principala de la pct.
3.a).

10