129
ARHITECTURA MICROPROCESOARELOR ANEXA NR. 1 1 Moduri de reprezentare a datelor utilizate de Moduri de reprezentare a datelor utilizate de Moduri de reprezentare a datelor utilizate de Moduri de reprezentare a datelor utilizate de microprocesorul Intel 8086 microprocesorul Intel 8086 microprocesorul Intel 8086 microprocesorul Intel 8086 1. Elemente de algebră booleană 1. Elemente de algebră booleană 1. Elemente de algebră booleană 1. Elemente de algebră booleană Algebra logică sau algebra booleană a fost concepută ca o metodă simbolică de tratare a funcţiilor logice formale, fiind ulterior extinsă şi în alte domenii. Deoarece între logica formală şi circuitele de comutaţie (cu două stări) există o corespondenţă directă (logica formală studiază valoarea de adevăr sau de fals a unor afirmaţii ce pot fi numai adevărate sau false, iar circuitele de comutaţie sunt realizate prin interconectarea unor comutatoare ce au două stări: închis sau deschis), algebra booleană s-a impus ca cea mai importantă modalitate de analiză şi sinteză a circuitelor de comutaţie. Algebra booleană se defineşte axiomatic astfel: fie (M, x, +) o mulţime cu două operaţii şi M={0, 1} cu următoarele proprietăţi (axiome): a) pentru orice elemente a1, a2 care apartin lui M există relaţiile (parte stabilă): a1 a2 apartine lui M şi a1 + a2 apartine lui M b) operaţiile x şi + sunt comutative: a1 x a2 = a2 x a1 şi a1 + a2 = a2 + a1 c) operaţiile x şi + sunt asociative: (a1 x a2 ) x a3 = a1 x (a2 x a3 ) şi (a1 + a2) + a3 = a1 + (a2 + a3) d) operaţiile 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 operaţie: a x 1 = a şi a + 0 = a; f) există element invers (complementar) pentru fiecare operaţie: a x a\ = a şi a + a\ = 1; Valorile 0 şi 1 modelează logic stările circuitelor logice (digitale) care au două stări. În continuare operaţia x va fi denumită conjuncţie, iar operaţia + va fi denumită disjuncţie. Există următoarele teoreme (reguli de calcul) asociate algebrei boolene: 1. a x a = a şi a+a = a (idempotenţa) 2. a x 0 = 0 şi a+1 = 1 (elementele neutre) 3. a\\ = a (dubla negaţie) 4. a(a + b) şi a + a x b = a (absorbţia) 5. (a+b)\ = a\ x b\ şi (a x b)\ = a\ + b\ (relatiile de Morgan)

Arhitectura Microprocesoarelor Lucrarea de Laborator

Embed Size (px)

DESCRIPTION

elem de algebra booleanabaze de numeratiereprezentarea datelor pe numar finit de biti

Citation preview

Page 1: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

1

Moduri de reprezentare a datelor utilizate deModuri de reprezentare a datelor utilizate deModuri de reprezentare a datelor utilizate deModuri de reprezentare a datelor utilizate demicroprocesorul Intel 8086microprocesorul Intel 8086microprocesorul Intel 8086microprocesorul Intel 8086

1. Elemente de algebră booleană1. Elemente de algebră booleană1. Elemente de algebră booleană1. Elemente de algebră booleană

Algebra logică sau algebra booleană a fost concepută ca o metodă simbolică de tratare afuncţiilor logice formale, fiind ulterior extinsă şi în alte domenii. Deoarece între logica formală şicircuitele de comutaţie (cu două stări) există o corespondenţă directă (logica formală studiazăvaloarea de adevăr sau de fals a unor afirmaţii ce pot fi numai adevărate sau false, iar circuitele decomutaţie sunt realizate prin interconectarea unor comutatoare ce au două stări: închis sau deschis),algebra booleană s-a impus ca cea mai importantă modalitate de analiză şi sinteză a circuitelor decomutaţie.

Algebra booleană se defineşte axiomatic astfel: fie (M, x, +) o mulţime cu două operaţii şiM={0, 1} cu următoarele proprietăţi (axiome):

a) pentru orice elemente a1, a2 care apartin lui M există relaţiile (parte stabilă): a1 a2 apartine lui M şi a1 + a2 apartine lui M

b) operaţiile x şi + sunt comutative: a1 x a2 = a2 x a1 şi a1 + a2 = a2 + a1

c) operaţiile x şi + sunt asociative: (a1 x a2 ) x a3 = a1 x (a2 x a3 ) şi (a1 + a2) + a3 = a1 + (a2 + a3)

d) operaţiile 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 operaţie: a x 1 = a şi a + 0 = a;f) există element invers (complementar) pentru fiecare operaţie:

a x a\ = a şi a + a\ = 1;

Valorile 0 şi 1 modelează logic stările circuitelor logice (digitale) care au două stări. Încontinuare operaţia x va fi denumită conjuncţie, iar operaţia + va fi denumită disjuncţie.

Există următoarele teoreme (reguli de calcul) asociate algebrei boolene:

1. a x a = a şi a+a = a (idempotenţa)2. a x 0 = 0 şi a+1 = 1 (elementele neutre)3. a\\ = a (dubla negaţie)4. a(a + b) şi a + a x b = a (absorbţia)5. (a+b)\ = a\ x b\ şi (a x b)\ = a\ + b\ (relatiile de Morgan)

Page 2: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

2

Operaţiile x şi + pot fi ilustrate cu ajutorul tabelului de adevăr:

a b a x b a + b a\0 0 0 0 10 1 0 1 11 0 0 1 01 1 1 1 0

Operaţia + reprezintă suma modulo 2 (SAU exclusiv) dată de tabelul de adevăr:

a1 a2 a1 + a2

0 0 00 1 11 0 11 1 0

Notaţiile utilizate pentru operaţiile anterioare sunt: x pentru AND, + pentru OR, + pentruXOR si \ pentru NOT.

2. Baze de numeratie2. Baze de numeratie2. Baze de numeratie2. Baze de numeratie

Reprezentarea unui număr în baza B este:

(N)B = cn-1 ............ c0 .... c-1 ................ c-m parte întreagă parte fracţionară

unde ci {0, ... , B-1}, i = n-1, ... , -m.

Numărul 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

Page 3: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

3

Deoarece informatia digitala este memorata sub forma binara, baza de numeratie utilizataeste 2. Cifrele in baza 2 se numesc biti.

Valorile obisnuite din baza 10 trebuie deci echivalate in baza 2 pentru efectuarea unorcalcule. De aceea este importanta cunoasterea echivalentei valorilor zecimale cu valori binare. Intabelul 1 sunt date echivalentele primelor 32 de valori zecimale intregi in binar.

Tab.1. Echivalenta valorilor zecimale (0..31), binare si hexazecimale

Valoare in baza 10 (zecimala) Valoare in baza 2(binara)

Valoare in baza 16(hexa-zecimala)

Propriu-zisa Ca suma de puteri ale lui 201 20

01

01

23

21

21 + 201011

23

4567

22

22 + 20

22 + 21

22 + 21 + 20

100101110111

4567

89

101112131415

23

23 + 20

23 + 21

23 + 21 + 20

23 + 22

23 + 22 + 20

23 + 22 + 21

23 + 22 + 21 + 20

10001001101010111100110111101111

89ABCDEF

16171819202122232425262728293031

24

24 + 20

24 + 21

24 + 21 + 20

24 + 22

24 + 22 + 20

24 + 22 + 21

24 + 22 + 21 + 20

24 + 23

24 + 23 + 20

24 + 23 + 21

24 + 23 + 21 + 20

24 + 23 + 22

24 + 23 + 22 + 20

24 + 23 + 22 + 21

24 + 23 + 22 + 21 + 20

1 00001 00011 00101 00111 01001 01011 01101 01111 10001 10011 10101 10111 11001 11011 11101 1111

101112131415161718191A1B1C1D1E1F

Pe de alta parte, pentru usurinta scrierii valorilor care au un numar mare de cifre binare, seutilizeaza baza 16. Cifrele in baza 16 se numesc cifre hexa-zecimale, sau mai scurt cifre hexa.

Convenim sa utilizam terminatia B B B B pentru valori binare si terminatia H H H H pentru valori hexa-zecimale, valorile zecimale fiind scrise obisnuit.

Page 4: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

4

Conversia unui număr din baza 2 în baza B=2m se efectuează astfel: se împarte numărulscris în binar în grupe de cifre de câte m biţi ş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 hexa-zecimala.

Exemplu: 0111 1111 B = 7 F H

Se observa urmatoarele echivalente:

1 cifra hexa = 4 cifre binare (4 biti)2 cifre hexa = 8 cifre binare (1 octet)4 cifre hexa = 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 in baza 10 (zecimala) Valoare in baza 2(binara)

Valoare in baza 16(hexa-zecimala)

Propriu-zisa Aproximativa Ca putere a lui 21248

163264

128256512

1 0242 0484 0968 192

16 38432 76865 536

131 072262 144524 288

1 048 576

1 K2 K4 K8 K

16 K32 K64 K

128 K256 K512 K

1 M

20

21

22

23

24

25

26

27

28

29

210

211

212

213

214

215

216

217

218

219

220

110

1001000

1 00010 0000

100 00001000 0000

1 0000 000010 0000 0000

100 0000 00001000 0000 0000

1 0000 0000 000010 0000 0000 0000

100 0000 0000 00001000 0000 0000 0000

1 0000 0000 0000 000010 0000 0000 0000 0000

100 0000 0000 0000 00001000 0000 0000 0000 0000

1 0000 0000 0000 0000 0000

1248

10204080

100200400800

1000200040008000

10000200004000080000

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 parteadreapta. Acest lucru este echivalent cu deplasarea cu o cifra la stanga (cifra unitatilor devenea cifrazecilor, cifra zecilor devenea cifra sutelor, etc.).

Page 5: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

5

Produsul cu 100 = 102 inseamna adaugare a 2 zerouri in partea dreapta sau deplasarea cu 2cifre 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 inbaza 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 cudeplasarea cu 1 pozitie (cifra hexa) catre stanga, iar in baza 2 cu deplasarea cu 4 pozitii (biti) catrestanga.

Exemplu:

(hexa-zecimal) (binar) (zecimal)

3A H x = 0011 1010 B x = 58 x 10000 H= 1 0000 0000 0000 0000 B = 16_______ __________________ _____3A0 0 0 0 H = 0011 1010 0000 0000 0000 0000 B = 928

3. Reprezentarea datelor pe numar finit de biti3. Reprezentarea datelor pe numar finit de biti3. Reprezentarea datelor pe numar finit de biti3. 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 lungimefinita.

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 douavalori de n biti are ca rezultat o valoare de 2n biti).

Exemplul 1 (pentru n = 8):1110 0010 B + E 2 H +1010 0001 B A1 H------------------ ---------

(transport = 1) 1000 0011 B (1) 8 3 H

Exemplul 2 (pentru n = 16): 1001 1100 1110 0010 B - 9 C E 2 H - 1011 0110 1010 0001 B B 6 A1 H ------------------------------- --------------

(imprumut = 1) 1110 0110 0100 0001 B (-1) E 6 4 1 HPentru 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 laadunare "transportul" sau "tinem 1", si indica la scadere "imprumutul" sau "ne imprumutam 1".

Page 6: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

6

Transportul apare atunci cand la o operatie de adunare pe n biti valoarea exacta a rezultatuluidepaseste n biti, sau cand la o operatie de scadere pe n biti este necesar imprumutul de la al n-1-leabit. Daca se neglijeaza transportul, operatiile aritmetice cu valori reprezentate pe n biti pot fidescrise grafic pe un cerc:

0

2n-1

2 - 1n 1

2 -1 n-1

2 +1 n-1

2n-2

2n-3

2 + 2n-1 n-2

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

Pentru exemplul 1 anterior (n = 8) acest cerc devine:00H 01HFFH 02HFEH

20H

40H

7FH80H80H

C0H

E2H

A1H

83H

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

Page 7: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

7

0000H0001HFFFFH 0002HFFFEH

2000H

4000H

7FFFH8000H

8001H

C000H

9CE2H

B6A1H

E641H

Fig. 3. Cercul valorilor naturale (intregi fara semn) reprezentabile cu 16 biti pentru exemplul2

Se observa ca operatiile de adunare pe n biti sunt echivalente operatiilor de adunare modulo2n. Pe datele din exemplul 1 (n = 8, 2n = 28 = 256 = 100H = 1 0000 0000 B) se observa ca:

E 2 H + 2 2 6 +A1 H 1 6 1--------- ---------

(1) 8 38 38 38 3 H 3 8 7 = 1 x 2 5 6 + 1 3 11 3 11 3 11 3 1

De asemenea, pe datele din exemplul 2 (n = 16, 2n = 216 = 65536 = 10000H = 1 0000 00000000 0000 B) se observa ca:

9 C E 2 H - 4 0 1 6 2 -B 6 A1 H 4 6 7 5 3-------------- ------------

(-1) E 6 4 1 E 6 4 1 E 6 4 1 E 6 4 1 H - 0 3 4 0 9 = - 1 x 6 5 5 3 6 + 6 2 1 2 76 2 1 2 76 2 1 2 76 2 1 2 7

Asadar, corespondenta dintre multimea numerelor naturale si multimea valorilorreprezentabile cu n biti este cea din figura 4.

Page 8: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

8

0 2 -1 2n2 -1 n

2 -1 n

(multimea numerelor naturale)

(multimeavalorilor

reprezentabilecu n biti)

2 n 2 2n

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

4. Reprezentarea numerelor negative4. Reprezentarea numerelor negative4. Reprezentarea numerelor negative4. 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 numerelepozitive au bn-1 = 0 şi numerele pozitive au bn-1 = 1.

4.1. Reprezentarea în modul şi semn (MS)4.1. Reprezentarea în modul şi semn (MS)4.1. Reprezentarea în modul şi semn (MS)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 număruluiN î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 modulmaxim 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 biţi au gamadinamică +/- (2 n-1 -1).

În multe cazuri domeniul +/- (2 n-1 -1) se scalează (normează) cu 2n-1, adică N' = N/ 2 n-1, decivirgula va fi plasată imediat după bitul de semn. In aceasta situatii se reprezintă pe n biţi numerefracţionare cu semn. Gama dinamică pentru reprezentarea MS a numerelor fracţionare este +/-(1-1/2n-1).

Page 9: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

9

4.2. Reprezentarea în complement de 1 (C1)4.2. Reprezentarea în complement de 1 (C1)4.2. Reprezentarea în complement de 1 (C1)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 său.

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 obţinerea reprezentării valorilor negative a unui număr întreg în C1: scăderea din 2n-1 avalorii sale absolute.

Gama dinamică pentru reprezentarea C1 este +/- (2n-1 - 2-m) (la fel ca în cazul reprezentăriiMS).

Dezavantajul reprezentărilor MS şi C1 este acela că valoarea 0 se exprimă în 2 moduridiferite (pentru MS valoarea 0 este 000...0 sau 100...0 iar pentru C1 valoarea 0 este 000...0 sau111...1.

4.3. Reprezentarea în complement de 2 (C2)4.3. Reprezentarea în complement de 2 (C2)4.3. Reprezentarea în complement de 2 (C2)4.3. Reprezentarea în complement de 2 (C2)

Pentru numere pozitive reprezentarea este identică cu cea din C1 şi MS. Pentru numerenegative (-N)C2 = 2n -N.

Dacă numărul binar are reprezentarea în C2: bn-1, bn-2, ..., b0.b-1...b-m, atunci valoarea sa înzecimal este dată de relaţia:

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 obţine 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 obţine pentru bi=0, i = -m,n-2:

Nmin = -2n-1

Prin scalare cu 2n-1 se obţine reprezentarea în C2 a numerelor fracţionare. Gama dinamică(pentru m=0) este: -1 ....... 1- 1/2n-1

Există două moduri de obţinere a reprezentării in C2 a lui -N:

Page 10: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

10

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 număr fără

semn).

Exemplu (pentru n = 8 şi m = 0):(103103103103)C2 = 0110 0111 B = 67 H67 H67 H67 H

a) Din C1:(-103-103-103-103)C2 = 1001 1000 B + = 98 H +

1 B 1 H ------------------ --------- 1001 1001 B = 99 H99 H99 H99 H

b) Prin scadere:

(-103-103-103-103)C2 = 1 0000 0000 B - = 100 H - = 28 - 103 0110 0111 B 67 H

------------------- ---------1001 1001 B = 99 H99 H99 H99 H = 153153153153

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 rezultatulexact poate depasi gama de reprezentare pe n biti (adunarea a doua valori pozitive de n biti poateavea ca rezultat valori negative de n biti iar adunarea a doua valori negative de n biti poate avea carezultat valori pozitive de n biti).

Exemplul 1 (pentru n = 8):

1110 0010 B + E 2 H + adica: - 1 E H +1001 0001 B 9 1 H - 6 F H------------------ --------- -----------

(transport = 1) 0111 0011 B 7 3 H (depasire = 1) - 8 D H

Pentru interpretarea corecta a rezultatului trebuie semnalata asadar depasirea de gama. Acestlucru 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 + 9 C E 2 H + adica: - 6 3 1 E H + 1011 0110 1010 0001 B B 6 A1 H - 4 9 5 F H ------------------------------- -------------- ----------------

(imprumut = 1) 1110 0110 0100 0001 B 5 3 8 3 H (depasire = 1) + 5 3 8 3 HReprezentarea in C2 a valorilor intregi de n biti poate fi descrisa grafic ca in figura 5.

Page 11: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

11

0

2n-1

1

2 -1 n-1

2n-2

2n-3

-1

-(2 -1) n-1

-2 n-2

+-

Fig. 5. Cercul valorilor intregi (cu semn) reprezentabile cu n biti

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

00H 01H(FFH)

02H(FEH)

20H

40H

7FH80H

(80H)

(C0H)

E2H(-1EH)

91H(-67H)

73H-7FH

-40H

-01H-02H

(depasire)

+-

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

Page 12: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

12

Pentru exemplul 2 anterior (n = 16) acest cerc devine:

0000H0001HFFFFH 0002HFFFEH

2000H

4000H

7FFFH8000H

8001H

C000H

9CE2H

B6A1H

E641H

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

4.4. Echivalenta valorilor binare in diferite moduri de reprezentare4.4. Echivalenta valorilor binare in diferite moduri de reprezentare4.4. Echivalenta valorilor binare in diferite moduri de reprezentare4.4. Echivalenta valorilor binare in diferite moduri de reprezentare

Microprocesorul Intel 8086 utilizeaza date de tip octet (8 biti) si cuvant (16 biti). De aceeaeste necesara cunoasterea echivalentei valorilor fara semn (naturale) reprezentabile cu 8 si 16 biti cuvalorile cu semn (intregi).

Echivalentele pentru date de tip octet sunt date in tabelul 3, iar cele pentru date de tip cuvantin tabelul 4.

Page 13: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

13

Tab.3. Echivalenta valorilor de 8 biti fara semn (naturale) cu cele cu semn (intregi)in diferite moduri de reprezentare (MS, C1, C2)

faraValoareasemn a numarului in

Valoareacodului binar

obţinută princa număr cu

interpretareasemn în

zecimal binar hexazecimal (MS) (C1) (C2) 0 0000 0000 0 0 0 0 0 1 0000 0001 0 1 1 1 1 2 0000 0010 0 2 2 2 2 3 0000 0011 0 3 3 3 3 4 0000 0100 0 4 4 4 4 5 0000 0101 0 5 5 5 5 6 0000 0110 0 6 6 6 6 ... ... ... ... ... ... ... ... ... ... ... ... 63 0011 1111 3 F 63 63 63 64 0100 0000 4 0 64 64 64 65 0100 0001 4 1 65 65 65 ... ... ... ... ... ... ... ... ... ... ... ... 127 0111 1111 7 F 127 127 127 128 1000 0000 8 0 0 - 127 - 128 129 1000 0001 8 1 1 - 126 - 127 ... ... ... ... ... ... ... ... ... ... ... ...

191 1011 1111 B F -63 -64 -65 192 1100 0000 C 0 -64 -63 -64 193 1100 0001 C 1 -65 -62 -63

... ... ... ... ... ... ... ... ... ... ... ... 250 1111 1110 F A -122 -5 -6 251 1111 1110 F B -123 -4 -5 252 1111 1100 F C -124 -3 -4 253 1111 1101 F D -125 -2 -3 254 1111 1110 F E -126 -1 -2 255 1111 1111 F F -127 0 -1

Page 14: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORANEXA NR. 1

14

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

faraValoarea

semn a numarului in Valoarea

codului binarobţinută princa număr cu

interpretareasemn în

zecimal binar hexa (MS) (C1) (C2) 0 0000 0000 0000 0000 0 0 0 0 0 0 0 1 0000 0000 0000 0001 0 0 0 1 1 1 1 2 0000 0000 0000 0010 0 0 0 2 2 2 2 3 0000 0000 0000 0011 0 0 0 3 3 3 3 4 0000 0000 0000 0100 0 0 0 4 4 4 4 5 0000 0000 0000 0101 0 0 0 5 5 5 5 6 0000 0000 0000 0110 0 0 0 6 6 6 6 ... ... ... ... ... ... ... ... ... ... ... ...

16383 0011 1111 1111 1111 3 F F F 16383 16383 16383 16384 0100 0000 0000 0000 4 0 0 0 16384 16384 16384 16385 0100 0000 0000 0001 4 0 0 1 16385 16385 16385 ... ... ... ... ... ... ... ... ... ... ... ...

32767 0111 1111 1111 1111 7 F F F 32767 32767 32767 32768 1000 0000 0000 0000 8 0 0 0 0 - 32767 -32768 32769 1000 0000 0000 0001 8 0 0 1 - 1 - 32766 -32767

... ... ... ... ... ... ... ... ... ... ... ...49151 1011 1111 1111 1111 B F F F - 16383 - 16384 - 1638549152 1100 0000 0000 0000 C 0 0 0 - 16384 - 16383 - 1638449153 1100 0000 0000 0001 C 0 0 1 - 16385 - 16382 - 16383 ... ... ... ... ... ... ... ... ... ... ... ...

65531 1111 1111 1111 1110 F F F A -122 -5 -6 65532 1111 1111 1111 1110 F F F B -123 -4 -5 65533 1111 1111 1111 1110 F F F C -124 -3 -4 65534 1111 1111 1111 1110 F F F D -125 -2 -3 65535 1111 1111 1111 1110 F F F E -126 -1 -2 65536 1111 1111 1111 1111 F F F F -127 0 -1

Page 15: Arhitectura Microprocesoarelor Lucrarea de Laborator

1

Setul de instructiuni al microprocesorului Intel 8086

1. Notatii utilizate

Operatii:<-- = atribuire (valoarea din dreapta copiata in stinga)<--> = permutare (interschimbare)

Operatori:R = registru generalR8 = registru general de 8 biti: AL, AH, BL, BH, CL, CH, DL, DHR16 = registru general de 16 biti: AX, BX, CX, DX, SP, BP, SI, DIRn = bitul n al registrului RA = registru acumulator: AL, AH, AXSR = registru segment: CS, DS, SS, ES

M = data din memorieM8 = octet din memorieM16 = cuvint din memorie (2 octeti)M32 = pointer din memorie (4 octeti = 2 cuvinte)Mn = 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 = data de tip imediat (constanta numerica sau simbolica)D8 = octet de tip imediatD16 = cuvint de tip imediat

info = R, M sau DMSb(info) = cel mai semnificativ bit al valorii infoLSb(info) = cel mai putin semnificativ bit al valorii info

etich = 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

Page 16: Arhitectura Microprocesoarelor Lucrarea de Laborator

2

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 AX, BXMOV R, M R <-- M - MOV DX, VAR1MOV M, R M <-- R - MOV TAB [SI][DI], BXMOV R, D R <-- D - MOV AL, 20HMOV M, D M <-- D - MOV TAB [SI+2][DI], 1200HMOV SR,R16SR <-- R16 (SR cu exceptia lui CS) - MOV ES, AXMOV SR,M16 SR <-- M16 (SR cu exceptia lui CS) - MOV DS, DATASEGBASEMOV R16,SRR16 <-- SR (SR cu exceptia lui CS) - MOV AX, SSMOV M16,SR M16 <-- SR (SR cu exceptia lui CS) - MOV DATASEGBASE, DS

2. Permutare (Exchange)XCHG R, R' R <--> R' - XCHG AX, DXXCHG M M <--> R - XCHG TAB [SI][DI+20], AX

3. Salvare in stiva (Push)PUSH R16 SP <-- SP-2 \_ notatie prescurtata: - PUSH SI

(SP+1,SP) <-- R16 / STIVA <-- R16PUSH SR STIVA <-- SR - PUSH DSPUSH M16 STIVA <-- M16 - PUSH VAR2 4. Extragere din stiva (Pop)POP R16 R16 <-- (SP+1,SP) \_ notatie prescurtata: - POP DX

SP <-- SP+2 / R16 <-- STIVAPOP SR SR <-- STIVA - POP ESPOP M16 M16 <-- STIVA - POP VAR1

Page 17: Arhitectura Microprocesoarelor Lucrarea de Laborator

3

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

2.2. Instructiuni de transfer cu porturile

1. Citire din portIN A, D8 A <-- PORT(D8) - IN AL, 0FAHIN A, DX A <-- PORT(DX) - IN AX, DX

2. Sriere in portOUT D8, A PORT(D8) <-- A - OUT 44, AXOUT DX, A PORT(DX) <-- A - OUT DX, AL

2.3. Instructiuni de transfer (calcul) de adrese

1. Calcul adresa efectiva (Load Effective Adress)LEA R16, M R16 <-- EA(M) - LEA BX, TAB [SI]

2. Calcul adresa fizice, folosind DS (Load Data Segment Register)LDS R16, M R16 <-- (M+1,M) - LDS DI, TAB [BX]

DS <-- (M+3,M+2)

3. Calcul adresa fizice, folosind ES (Load Extra Segment Register)LES R16, M R16 <-- (M+1,M) - LES BX, TAB [SI]

ES <-- (M+3,M+2)

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 - LAHF

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

Page 18: Arhitectura Microprocesoarelor Lucrarea de Laborator

4

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

3. Salvare flag-uri in stiva (Push Flags)PUSHF STIVA <-- F - PUSHF

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

3. Instructiuni aritmetice

3.1. Instructiuni de adunare

1. Adunare simpla (Add)ADD R, R' R <-- R + R' OF,SF,ZF,AF,PF,CF ADD CX, DXADD R, M R <-- R + M OF,SF,ZF,AF,PF,CF ADD AL, TAB [SI+1]ADD M, R M <-- M + R OF,SF,ZF,AF,PF,CF ADD [BX], DXADD R, D R <-- R + D OF,SF,ZF,AF,PF,CF ADD CL, 10HADD M, D M <-- M + D OF,SF,ZF,AF,PF,CF ADD [SI], 1000H

2. Adunare cu transport (Add with Carry)ADC R, R' R <-- R + R'+ CF OF,SF,ZF,AF,PF,CF ADC CL, DLADC R, M R <-- R + M + CF OF,SF,ZF,AF,PF,CF ADC AX, TABADC M, R M <-- M + R + CF OF,SF,ZF,AF,PF,CF ADC [DI], DLADC R, D R <-- R + D + CF OF,SF,ZF,AF,PF,CF ADC CX, 1000HADC M, D M <-- M + D + CF OF,SF,ZF,AF,PF,CF ADC VAR2, 10H

3. Adunare cu 1 (Increment)INC R R <-- R + 1 OF,SF,ZF,AF,PF,CF INC CLINC M M <-- M + 1 OF,SF,ZF,AF,PF,CF INC CNTR

Page 19: Arhitectura Microprocesoarelor Lucrarea de Laborator

5

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

3.2. Instructiuni de scadere

1. Scadere simpla (Substract)SUB R, R' R <-- R - R OF,SF,ZF,AF,PF,CF SUB AX, CXSUB R, M R <-- R - M OF,SF,ZF,AF,PF,CF SUB AX, TAB [BX]SUB M, R M <-- M - R OF,SF,ZF,AF,PF,CF SUB DS : TAB [BP], CLSUB R, D R <-- R - D OF,SF,ZF,AF,PF,CF SUB AH, 10HSUB M, D M <-- M - D OF,SF,ZF,AF,PF,CF SUB VAR1, 2

2. Scadere simpla cu imprumut (Substract with Carry)SBB R, R' R <-- R - R'- CF OF,SF,ZF,AF,PF,CF SBB BX, DXSBB R, M R <-- R - M - CF OF,SF,ZF,AF,PF,CF SBB BH, VAR1SBB M, R M <-- M - R - CF OF,SF,ZF,AF,PF,CF SBB VAR2, CXSBB R, D R <-- R - D - CF OF,SF,ZF,AF,PF,CF SBB CX, 1000HSBB M, D M <-- M - D - CF OF,SF,ZF,AF,PF,CF SBB TAB [SI+2], 4

3. Scadere cu 1 (Decrement)DEC R R <-- R + 1 OF,SF,ZF,AF,PF,CF DEC CLDEC M M <-- M + 1 OF,SF,ZF,AF,PF,CF DEC TAB [SI]

4. Scadere din 0 (Negate)NEG R R <-- 0 - R (R negat in C2) OF,SF,ZF,AF,PF,CF NEG AXNEG M M <-- 0 - M (M negat in C2) OF,SF,ZF,AF,PF,CF NEG TAB [BX+2]

5. Comparatie aritmetica prin scadere (Compare)CMP R, R' R - R' (afecteaza doar flagurile) OF,SF,ZF,AF,PF,CF CMP AH, CLCMP R, M R - M (afecteaza doar flagurile) OF,SF,ZF,AF,PF,CF CMP AX, VAR1CMP M, R M - R (afecteaza doar flagurile) OF,SF,ZF,AF,PF,CF CMP VAR2, DXCMP R, D R - D (afecteaza doar flagurile) OF,SF,ZF,AF,PF,CF CMP AX, 0CMP M, D M - D (afecteaza doar flagurile) OF,SF,ZF,AF,PF,CF CMP VAR1, 0

Page 20: Arhitectura Microprocesoarelor Lucrarea de Laborator

6

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

3.3. Instructiuni de inmultire1. 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 BLMUL R16 DX,AX <-- AX*R16 (produs) OF,CF,(SF,ZF,AF,PF) MUL CXMUL M8 AX <-- AL*M8 (produs) OF,CF,(SF,ZF,AF,PF) MUL VAR1MUL M16 DX,AX <-- AX*M16 (produs) OF,CF,(SF,ZF,AF,PF) MUL TAB [SI]

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 DHIMUL R16 DX,AX <-- AX*R16 (produs) OF,CF,(SF,ZF,AF,PF) IMUL BXIMUL M8 AX <-- AL*M8 (produs) OF,CF,(SF,ZF,AF,PF) IMUL VAR2IMUL M16 DX,AX <-- AX*M16 (produs) OF,CF,(SF,ZF,AF,PF) IMUL 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) nedefiniti DIV DLDIV R16 AX <--DX,AX/R16 (cit)

DX <-- DX,AX mod R8 (rest) nedefiniti DIV CXDIV M8 AL <--AX/M8 (cit) AH <-- AX mod R8 (rest) nedefiniti DIV VAR1DIV M16 AX <--DX,AX/M16 (cit)

DX <-- DX,AX mod R8 (rest) nedefiniti DIV VAR2

2. Impartire intre numere cu semn (Integer Division)IDIV R8 AL <--AX/R8 (cit)

AH <-- AX mod R8 (rest) nedefiniti IDIV DHIDIV R16 AX <--DX,AX/R16 (cit)

DX <-- DX,AX mod R8 (rest) nedefiniti IDIV BX

Page 21: Arhitectura Microprocesoarelor Lucrarea de Laborator

7

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

IDIV M8 AL <--AX/M8 (cit)AH <-- AX mod R8 (rest) nedefiniti IDIV TAB [SI]

IDIV M16 AX <--DX,AX/M16 (cit)DX <-- DX,AX mod R8 (rest) 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 - CBW

daca AL7 = 1 => AH <-- 0FFH

2. Conversie de la cuvant la dublu cuvant (Convert Word to Double Word)CWD daca AX15 = 0 => DX <-- 0 - CWD

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

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 AXNOT M M <-- M\ (R negat in C1, bit cu bit) - NOT VAR1

2. "Si" logic (And)AND R, R' R <-- R AND R' (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF AND CX, DXAND R, M R <-- R AND M (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF AND BX, TAB [BX-2]AND M, R M <-- M AND R (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF AND VAR1, ALAND R, D R <-- R AND D (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF AND BX, 10HAND M, D M <-- M AND D (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF AND [BX], 10H

Page 22: Arhitectura Microprocesoarelor Lucrarea de Laborator

8

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

3. "Sau" logic (Or)OR R, R' R <-- R OR R' (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF OR AL, CHOR R, M R <-- R OR M (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF OR CL, TABOR M, R M <-- M OR R (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF OR VAR1, DHOR R, D R <-- R OR D (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF OR AX, 100HOR M, D M <-- M OR D (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF OR DX, 1000H

4. "Sau exclusiv" logic (Exclusive Or)XOR R, R' R <-- R XOR R' (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF XOR BX, AXXOR R, M R <-- R XOR M (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF XOR BX, [SI]XOR M, R M <-- M XOR R (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF XOR [DI-4], CXXOR R, D R <-- R XOR D (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF XOR BL, 3XOR M, D M <-- M XOR D (bit cu bit) CF=0,OF=0,(AF),SF,ZF,PF XOR VAR2, 5

5. "Si" logic fara memorarea rezultatului (Test)TEST R, R' R AND R' (afecteaza doar flagurile) CF=0,OF=0,(AF),SF,ZF,PF TEST CH, DLTEST R, M R AND M (afecteaza doar flagurile) CF=0,OF=0,(AF),SF,ZF,PF TEST AX, TAB [DI-2]TEST M, R M AND R (afecteaza doar flagurile) CF=0,OF=0,(AF),SF,ZF,PF TEST [DI], BXTEST R, D R AND D (afecteaza doar flagurile) CF=0,OF=0,(AF),SF,ZF,PF TEST DL, 10TEST M, D M AND D (afecteaza doar flagurile) CF=0,OF=0,(AF),SF,ZF,PF TEST DS : [BP], 1

4.2. Instructiuni de deplasare

1. Deplasare logica la stinga (Shift Logical Left)SHL R,1 R <-- R*2 CF=MSb(R),OF,SF,ZF,(AF),PF SHL AL, 1SHL M,1 M <-- M*2 CF=MSb(M), OF,SF,ZF,(AF),PF SHL VAR1, 1SHL R,CL R <-- R*2CL CF=R1616-CL sau R816-CL,OF,SF,ZF,(AF),PF SHL BX, CLSHL M,CL M <-- M*2CL CF=M1616-CL sau M816-CL,OF,SF,ZF,(AF),PF SHL TAB [SI], CL

Page 23: Arhitectura Microprocesoarelor Lucrarea de Laborator

9

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 AX, 1SAL M,1 M <-- M*2 CF=MSb(M),OF,SF,ZF,(AF),PF SAL VAR2, 1SAL R,CL R <-- R*2CL CF=R1616-CL sau R816-CL,OF,SF,ZF,(AF),PF SAL DX, CLSAL M,CL M <-- M*2CL CF=M1616-CL sau M816-CL,OF,SF,ZF,(AF),PF SAL [SI], CL

3. Deplasare logica la dreapta (Shift Logical Right)SHR R,1 R <-- R/2 CF=LSb(R),OF,SF,ZF,(AF),PF SHR BX, 1SHR M,1 M <-- M/2 CF=LSb(M),OF,SF,ZF,(AF),PF SHR [BX], 1SHR R,CL R <-- R/2CL CF=RCL-1,OF,SF,ZF,(AF),PF SHR AH, CLSHR M,CL M <-- M/2CL CF=MCL-1,OF,SF,ZF,(AF),PF SHR 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 CX, 1SAR M,1 M <-- M/2 CF=LSb(M),OF,SF,ZF,(AF),PF SAR [SI], 1SAR R,CL R <-- R/2CL CF=RCL-1,OF,SF,ZF,(AF),PF SAR AL, CLSAR M,CL M <-- M/2CL CF=MCL-1,OF,SF,ZF,(AF),PF SAR VAR2, CL

4.3. Instructiuni de rotatie1. Rotatie la stinga (Rotate Left)ROL R,1 R <-- R rotit cu 1 poz. la stinga CF= MSb(R),OF ROL DL, 1ROL M,1 M <-- M rotit cu 1 poz. la stinga CF= MSb(M),OF ROL [DI+2], 1ROL R,CL R <-- R rotit cu CL poz. la stinga CF= R1616-CL sau R816-CL,OF ROL DH, CLROL M,CL M <-- M rotit cu CL poz. la stinga CF= M1616-CL sau M816-CL,OF ROL VAR1, CL

2. Rotatie la dreapta (Rotate Right)ROR R,1 R <-- R rotit cu 1 poz. la dreapta CF= LSb(R),OF ROR BX, 1ROR M,1 M <-- M rotit cu 1 poz. la dreapta CF= LSb(M),OF ROR TAB [BX], 1ROR R,CL R <-- R rotit cu CL poz. la dreapta CF= RCL-1,OF ROR AL, CLROR M,CL M <-- M rotit cu CL poz. la dreapta CF= MCL-1,OF ROR [SI] [DI], CL

Page 24: Arhitectura Microprocesoarelor Lucrarea de Laborator

10

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 CF= MSb(R),OF RCL CX, 1RCL M,1 M <-- perechea M,CF rotita cu 1 poz. la stinga CF= M15, OF RCL TAB [SI], 1RCL R,CL R <-- perechea R,CF rotita cu CL poz. la stinga CF= R16-CL, OF RCL BL, CLRCL M,CL M <-- perechea M,CF rotita cu CL poz. la stinga CF= M16-CL, OF RCL [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 CF= R15, OF RCR CL, 1RCR M,1 M <-- M rotit cu 1 poz. la dreapta CF= M15, OF RCR VAR1, 1RCR R,CL R <-- R rotit cu CL poz. la dreapta CF= R16-CL,OF RCR AX, CLRCR M,CL M <-- M rotit cu CL poz. la dreapta CF= M16-CL,OF RCR 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') - MOVS SIRB1, SIRB2

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

- daca DF=1: (DI) <-- (SI)DI <-- DI-1 = actualizare DI cu -1SI <-- SI-1 = actualizare SI cu -1

MOVS M16,M16' initial DI = EA(M16), SI = EA(M16') - MOVS SIRW1, SIRW2- daca DF=0: (DI+1,DI) <-- (SI+1,SI)

DI <-- DI+2 = actualizare DI cu 2SI <-- SI+2 = actualizare SI cu 2

Page 25: Arhitectura Microprocesoarelor Lucrarea de Laborator

11

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

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

2. Incarcare acumulator dintr-un sir cu operanzi expliciti (Load String)

LODS AL,M8 initial SI = EA(M8) - LODS AL, SIRB- daca DF=0: AL <-- (SI)

actualizare SI cu 1- daca DF=1: AL <-- (SI)

actualizare SI cu -1LODS AX,M16 initial SI = EA(M16) - LODS AX, SIRW

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

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

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

STOS M8,AL initial DI = EA(M8) - STOS SIRB, AL- daca DF=0: (DI) <-- AL

actualizare DI cu 1- daca DF=1: (DI) <-- AL

actualizare DI cu -1STOS M16,AX' initial DI = EA(M16) - STOS SIRW, AX

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

- daca DF=1: (DI+1,DI) <-- AXactualizare DI cu -2

Page 26: Arhitectura Microprocesoarelor Lucrarea de Laborator

12

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) - MOVSB

DI <-- DI+1 = actualizare DI cu 1SI <-- SI+1 = actualizare SI cu 1

- daca DF=1: (ES:DI) <-- (DS:SI)DI <-- DI-1 = actualizare DI cu -1SI <-- 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) - MOVSW

DI <-- DI+2 = actualizare DI cu 2SI <-- SI+2 = actualizare SI cu 2

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

5. Incarcare acumulator dintr-un sir cu operanzi impliciti (Load String)dupa initializare cu SI = EA(M8'):LODSB - daca DF=0: AL <-- (DS:SI) - LODSB

SI <-- SI+1 = actualizare SI cu 1- daca DF=1: AL <-- (DS:SI)

SI <-- SI-1 = actualizare SI cu -1dupa initializare cu SI = EA(M16'):LODSW - daca DF=0: AX <-- (DS:SI+1,SI) - LODSW

SI <-- SI+2 = actualizare SI cu 2- daca DF=1: AX <-- (DS:SI+1,SI)

SI <-- SI-2 = actualizare SI cu -2Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

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

Page 27: Arhitectura Microprocesoarelor Lucrarea de Laborator

13

dupa initializare cu DI = EA(M8):STOSB - daca DF=0: (ES:DI) <-- AL - STOSB

DI <-- DI+1 = actualizare DI cu 1- daca DF=1: (ES:DI) <-- AL

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

DI <-- DI+2 = actualizare DI cu 2- daca DF=1: (ES:DI+1,DI) <-- AX

DI <-- DI-2 = actualizare DI cu -2

7. Prefixul de repetare

REP transfsir transfsir REP MOVSB CX <-- CX-1 REP MOVSW

- daca CX#0 se reia transfsir REP STOSB- daca CX=0 se trece la instructiunea urmatoare

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 CMPS SIRB1, SIRB2

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

- daca DF=1: (DI) - (SI)DI <-- DI-1 = actualizare DI cu -1SI <-- SI-1 = actualizare SI cu -1

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

CMPS M16,M16' initial DI = EA(M16), SI = EA(M16') CF,OF,SF,ZF,AF,PF CMPS SIRW1, SIRW2

Page 28: Arhitectura Microprocesoarelor Lucrarea de Laborator

14

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

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

2. Comparatie intre un sir si acumulator cu operanzi expliciti (Scan String)

SCAS AL,M8 initial SI = EA(M8) CF,OF,SF,ZF,AF,PF SCAS AL, SIRB- daca DF=0: AL - (SI)

actualizare SI cu 1- daca DF=1: AL - (SI)

actualizare SI cu -1SCAS AX,M16 initial SI = EA(M16) CF,OF,SF,ZF,AF,PF SCAS AX, SIRW

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

- daca DF=1: AX - (SI+1,SI)actualizare SI cu -2

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 CMPSB

DI <-- DI+1 = actualizare DI cu 1SI <-- SI+1 = actualizare SI cu 1

- daca DF=1: (ES:DI) - (DS:SI)DI <-- DI-1 = actualizare DI cu -1SI <-- SI-1 = actualizare SI cu -1

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

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

Page 29: Arhitectura Microprocesoarelor Lucrarea de Laborator

15

CMPSW - daca DF=0: (ES:DI+1,DI) - (DS:SI+1,SI) CF,OF,SF,ZF,AF,PF CMPSWDI <-- DI+2 = actualizare DI cu 2SI <-- SI+2 = actualizare SI cu 2

- daca DF=1: (ES:DI+1,DI) - (DS:SI+1,SI)DI <-- DI-2 = actualizare DI cu -2SI <-- 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 SCASB

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 SCASW

SI <-- SI+2 = actualizare SI cu 2- daca DF=1: AX - (DS:SI+1,SI)

SI <-- SI-2 = actualizare SI cu -25. Prefixul de repetare conditionata

REPE compsir compsir REPE CMPSW CX <-- CX-1

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

REPZ compsir compsir REPZ SCASB CX <-- CX-1

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

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

REPNE compsir compsir REPNE CMPSB CX <-- CX-1

- daca (CX#0 si ZF=0) se reia compsir

Page 30: Arhitectura Microprocesoarelor Lucrarea de Laborator

16

- daca (CX=0 sau ZF=1) se trece la instructiunea urmatoareREPNZ compsir compsir REPNZ SCASW

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

6. Instructiuni de transfer al comenzii

6.1. Instructiuni de salt neconditionat

1. Salt neconditionat intrasegment direct (Jump)JMP etich IP <-- IP + DEPL(etich) = salt la etich - JMP ET1

2. Salt neconditionat intrasegment indirect (Jump)JMP R16 IP <-- R16 = salt la (R16) - JMP AXJMP M16 IP <-- M16 = salt la (M16) - JMP OFFS

3. Salt neconditionat intersegment direct (Jump)JMP etich IP <-- OFFSET(etich) - JMP ET2

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

4. Salt neconditionat intersegment indirect (Jump)JMP M32 IP <-- (M+1,M) - JMP ADRLOG

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

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

6.2. Instructiuni de apel de subprogram

1. Apel de subprogram intrasegment direct (Call)

Page 31: Arhitectura Microprocesoarelor Lucrarea de Laborator

17

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

2. Apel de subprogram intrasegment indirect (Call)CALL R16 STIVA <-- IP - CALL CX

IP <-- R16CALL M16 STIVA <-- IP - CALL OFF

IP <-- M16

3. Apel de subprogram intersegment direct (Call)CALL etich FAR STIVA <-- CS - CALL ET FAR

STIVA <-- IPIP <-- OFFSET(etich)CS <-- SEG(etich)

4. Apel de subprogram intersegment indirect (Call)CALL M32 FAR STIVA <-- CS - CALL ADRLOGICA

STIVA <-- IPIP <-- (M+1,M)CS <-- (M+3,M+2)

6.3. Instructiuni de revenire din subprogram

1. Revenire din subprogram intrasegment fara POP (Return)RET IP <-- STIVA - RET2. Revenire din subprogram intrasegment cu POP (Return)RET D16 IP <-- STIVA - RET 4

SP <-- SP + D16

Mnemonica Operatie (efect) Indicatori afectati Exemplu de instructiune

3. Revenire din subprogram intersegment fara POP (Return)RET IP <-- STIVA - RET

CS <-- STIVA

Page 32: Arhitectura Microprocesoarelor Lucrarea de Laborator

18

4. Revenire din subprogram intersegment cu POP (Return)RET D16 IP <-- STIVA - RET 8

CS <-- STIVASP <-- SP + 2 + D16

6.4. Instructiuni de salt conditionat

1. Salt conditionat direct apropiat (Jump)Jconditie etich - daca conditie este indeplinita atunci: - JZ REZNUL

IP <-- IP + DEPL(etich) = salt la etich - altfel trece la instructiunea urmatoare

Mnemonica Conditie de salt Interpretare conditie

1.a. Pentru orice tip de valori:JC etich (CF=1) rezultat ALU cu transportJNC etich (CF=0) rezultat ALU fara transportJE etich (ZF=1) rezultat ALU nulJZ etich (ZF=1) rezultat ALU nulJNE etich (ZF=0) rezultat ALU nenulJNZ etich (ZF=0) rezultat ALU nenulJP etich (PF=1) rezultat ALU cu numar par de 1JPE etich (PF=1) rezultat ALU cu numar par de 1JNP etich (PF=0) rezultat ALU cu numar impar de 1JPO etich (PF=0) rezultat ALU cu numar impar de 1JCXZ etich (CX=0) contor nulMnemonica Conditie de salt Interpretare conditie

1.b. Pentru valori fara semn:

JA etich (CF=0) si (ZF=0) rezultat ALU > 0JNBE etich (CF=0) si (ZF=0) rezultat ALU > 0JAE etich (CF=0) rezultat ALU >= 0

Page 33: Arhitectura Microprocesoarelor Lucrarea de Laborator

19

JNB etich (CF=0) rezultat ALU >= 0JB etich (CF=1) rezultat ALU < 0JNAE etich (CF=1) rezultat ALU < 0JBE etich (CF=1) sau (ZF=1) rezultat ALU <= 0JNA etich (CF=1) sau (ZF=1) rezultat ALU <= 0

1.c. Pentru valori cu semn:

JS etich (SF=0) rezultat ALU negativJNS etich (SF=1) rezultat ALU pozitiv

JO etich (OF=1) rezultat ALU cu depasire de gamaJNO etich (OF=0) rezultat ALU fara depasire de gama

JG etich (SF=OF) si (ZF=0) rezultat ALU > 0JNLE etich (SF=OF) si (ZF=0) rezultat ALU > 0JGE etich (SF=OF) rezultat ALU >= 0JNL etich (SF=OF) rezultat ALU >= 0JL etich (SF<>OF) rezultat ALU < 0JNGE etich (SF<>OF) rezultat ALU < 0JLE etich (SF<>OF) sau (ZF=1) rezultat ALU > 0JNG etich (SF<>OF) sau (ZF=1) 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 - LOOP RELUARE

- altfel (CX=0) trece la instructiunea urmatoare

Page 34: Arhitectura Microprocesoarelor Lucrarea de Laborator

20

2. Ciclu cu test final cu dubla conditie (Loop)LOOPE etich - daca (CX#0 si ZF=1) atunci salt la etich - LOOPE OPNOU

- altfel (CX=0 sau ZF=0) trece la instructiunea urmatoareLOOPZ etich - daca (CX#0 si ZF=1) atunci salt la etich - LOOPZ NOUTEST

- altfel (CX=0 sau ZF=0) trece la instructiunea urmatoareLOOPNE etich - daca (CX#0 si ZF=1) atunci salt la etich - LOOPNE REV

- altfel (CX=0 sau ZF=1) trece la instructiunea urmatoareLOOPNZ etich - daca (CX#0 si ZF=1) atunci salt la etich - LOOPNZ BUCLA1

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

6.6. Instructiuni de control al intreruperilor1. Apel intrerupere software (Interupt)INT tip (= D8) STIVA <-- F = salvare flag-uri IF, TF INT 21H

IF <-- 0 , TF <-- 0 = invalidare intreruperiSTIVA <-- CS = salvare segment adresaSTIVA <-- IP = salvare offset adresaCS <-- (4*tip+3, 4*tip+2) = incarcare segment adresa subprogramIP <-- (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 IRET

CS <-- STIVA = restabilire segment adresaF <-- STIVA = restabilire flag-uri

Mnemonica Operatie (efect) Indicatori afectati 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

Page 35: Arhitectura Microprocesoarelor Lucrarea de Laborator

21

2. Fortare CF = 0 (Clear Carry)CLC CF <-- 0 = transport = 0 CF CLC3. Complementare CF (Complement Carry)CMC CF <-- CF\ = complementare transport CF CMC4. Fortare DF = 1 (Set Direction)STD DF <-- 1 = directie inapoi la parcurgerea sirurilor DF STD5. Fortare DF = 0 (Clear Direction)CLD DF <-- 0 = directie inainte la parcurgerea sirurilor DF CLD6. Fortare IF = 1 (Set Interupt)STI IF <-- 1 = validare intreruperi IF STI7. Fortare IF = 0 (Clear Interupt)CLI IF <-- 0 = invalidare intreruperi 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) HLT

2. Stare de asteptare (Wait)WAIT asteapta pana intrarea TEST=0 - WAIT

7.3. Nici o operatie (no operation)NOP nici o operatie - NOP

Page 36: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

1

Arhitectura Arhitectura Arhitectura Arhitectura microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului Intel 8086

Scopul Scopul Scopul Scopul lucrăriilucrăriilucrăriilucrării

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. 1. 1. 1. Microprocesorul Intel 8086Microprocesorul Intel 8086Microprocesorul Intel 8086Microprocesorul Intel 8086

1.1. 1.1. 1.1. 1.1. Sisteme cu Sisteme cu Sisteme cu Sisteme cu microprocesor Intel 8086microprocesor Intel 8086microprocesor Intel 8086microprocesor Intel 8086

Microprocesorul este o unitate centrala de prelucrare (UCP) realizata intr-un singur circuitintegrat. Un sistem digital de prelucrare realizat cu ajutorul unui microprocesor este numitmicrocalculator. 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), microcalculatorultransfera informatii cu elementele mediului exterior, numite echipamentele periferice. Echipamenteperiferice 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 2componente:

1. Unitatea de executie (UE) decodifica instructiunile numerice, da comenzi interne pentruefectuarea calculelor si comenzi externe catre cea de-a doua unitate. UE contine 8 locatii dememorie interna numite registre de uz general. Registrele ofera o capacitate de memorare mica darsi un acces (citire sau scriere) foarte rapid.

Pentru a stoca o cantitate mai mare de date (codurile numerice ale instructiunilor sivariabilele programelor) este necesara conectarea microprocesorului cu o memorie de capacitatemare, 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 intreUE si MP sau intre UE si I/O, si transfera catre UE codurile numerice ale instructiunilor citite dinMP.

Pentru a identifica in mod unic fiecare dintre locatiile MP si IO, este necesara asocierea unorreferinte numerice numite adrese. De aceea UI este responsabila cu generarea adreselor catre MP.

Page 37: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

2

Microprocesorul Intel 8086 lucreaza cu date de 16 biti, numite cuvinte de date. Transferurileintre UE si UI sau intre microprocesor si MP sau IO se fac in general sub forma de cuvinte de datede 16 biti. De aceea bus-ul intern prin care comunica UE si UI al microprocesorului Intel 8086 estede 16 biti.

Pentru compatibilitate cu microprocesoarele care lucrau cu date de 8 biti, si Intel 8086 poatetransfera 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 generacel mult 1 M de adrese distincte. Deoarece 1M = 216 , inseamna ca adresele la microprocesorul Intel8086 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).

UE������

UIB

������

MP I/O

microprocesor I8086microcalculator

date, adrese

perifericeechipamente

��= memorie

date

date

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

1.2. 1.2. 1.2. 1.2. Arhitectura Arhitectura Arhitectura Arhitectura microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului 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 alesale - UE decodifica instructiunile si efectueaza calculele, in timp ce UI calculeaza adresele siefectueaza 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 alemicroprocesorului pentru a executa instructiunile sunt numite cicluri de instructiune, pentru UE sicicluri masina de bus, pentru UI.

Page 38: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

3

AX AH ALBH BLCH CLDH DL

BXCXDX

DISIBPSP

16 biti

8 biti

REGISTRETEMPORARE

ALU

reg. Flag-uri

9

16

rezultat

16 16

16 16

16

DECODIFICARE COD OPERATIE

SI COMANDA

operanzi

16 INTERFATA

BUS-URI

instructiuni

date, comenzi

adresa fizica20

8 8

Unitate de ExecutieUI

COADA DE ASTEPTARE (Q)CODURI INSTRUCTIUNI

1 2 3 4 5 6

CSDSESSS

16

16 16

IP

16

16

16

16

20

segment

registre de date

registre de adresare

comenzi

4

16A

AD

BC

16-19

0-15

BA+BDmultiplexate

in timp

bus intern

busuri externe

1616

UEUnitate de Interfata

offset

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 catreALU.

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 privindtransferul cu exteriorul revenind unitatii de interfata.

Page 39: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

4

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. 2. 2. 2. Registrele Registrele Registrele Registrele microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului Intel 8086

Registrele de capacitate 16 biti ale microprocesorului Intel 8086 pot fi clasificate din punctde 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. 2.1. 2.1. 2.1. Registrele Registrele Registrele Registrele generalegeneralegeneralegenerale

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 fiaccesate (citite sau scrise) separat. Aceasta inseamna ca fiecare registru de date poate fi folosit ca unregistru 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.

Page 40: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

5

Registrele de date sunt utilizate in majoritatea instructiunilor aritmetice si logice. Majoritateainstructiunilor aritmetice utilizeaza in acelasi mod toate registrele.

Exista si instructiuni aritmetice pentru care anumite registre generale au intrebuintarispeciale, 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 silogice.

Registrele pointer contin componente offset ale adreselor din stiva (adresele relative insegmentul 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 insegmentul de date curent). Ele sunt utilizate ca registre de adresare in instructiunile de transfer sauprelucrare de siruri de octeti (caractere). In acest ultim caz SI contine adresa relativa curenta a siruluidestinatie in cadrul segmentului de date curent (DS), iar DI contine adresa relativa curenta a siruluisursa in cadrul segmentului de date suplimentar (ES).

2.2. Registrele segment2.2. Registrele segment2.2. Registrele segment2.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 (instructiunilorprogramului);- DS (Data Segment) - contine componenta segment a adreselor variabilelor (segment date curent);- ES (Extra Segment) - contine componenta segment a adreselor variabilelor (segment suplimentar);

Page 41: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

6

- 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 inregistrul CS (Cod Segment), la adresa relativa continuta in registrul IP.

Continutul registrului DS defineste segmentul de date curent. Toate referirile la datele dinmemorie, 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 ininstructiunile pentru siruri utilizeaza in mod implicit segmentul referit de registrul ES.

Continutul registrului SS defineste segmentul curent al stivei. Toate referirile la datele dinmemorie prin registrele BP si SP utilizeaza in mod implicit segmentul referit de registrul SS.

2.3. Alte registre2.3. Alte registre2.3. Alte registre2.3. Alte registre

Registrul indicator al adresei instructiunii curente IP (Instruction Pointer) este un registru de16 biti care contine componenta offset a adresei instructiunii in segmentul de cod curent. Programelenu 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 deconditii, fanioane sau flag-uri. Indicatorii de conditii sunt utilizati pentru a memora informatiireferitoare la rezultatul unor operatii aritmetice si logice (OF,SF,ZF,AF,PF,CF) si pentru memorareaunor 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 maisemnificativ al rezultatului operatiilor aritmetice. Astfel, acest indicator poate fi folosit in cazuloperatiilor in dubla precizie. Valoarea CF = 1 semnifica fie transport la adunare fie imprumut lascadere. 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 unnumar 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 dela jumatatea de octet inferioara la jumatatea de octate superioara (de la bitul 3 la bitul 4). Acestindicator este folosit de instructiunile de aritmetica zecimala.

Page 42: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

7

- 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 dereprezentat) - este 1 daca dimensiunea rezultatului depaseste capacitatea locatiei de destinatie si afost 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 permiteUCP sa recunoasca cererile de intrerupere externe mascabile. Prin valoarea 0 intreruperile externemascabile vor fi invalidate. Acest indicator nu afecteaza intreruperile interne sau pe cele externenemascabile.

3. Memoria principala a unui sistem cu microprocesor3. Memoria principala a unui sistem cu microprocesor3. Memoria principala a unui sistem cu microprocesor3. Memoria principala a unui sistem cu microprocesor

Microprocesorul INTEL 8086 poate adresa un spatiu de memorie principala (MP) de1Moctet. Instructiunile si datele, pentru a oferi o utilizare eficienta a memoriei, pot fi stocate inmemorie fara sa conteze alinierea lor.

Conform conventiei INTEL, datele formate din mai multi octeti (multioctet) sunt intotdeaunamemorate cu octetul cel mai semnificativ (MSB) la locatia de adresa cea mai mare. Asadar octetulcel mai putin semnificativ (LSB) este memorat la adresa cea mai mica din grupul de octeti ai uneidate multioctet.

3.1. Gestiunea memoriei principale. Segmentarea3.1. Gestiunea memoriei principale. Segmentarea3.1. Gestiunea memoriei principale. Segmentarea3.1. Gestiunea memoriei principale. Segmentarea

Microprocesorul Intel 8086 vede memoria organizata ca un grup de segmente. Un segmenteste 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 aceastaeste necesar ca fiecare segment sa poata fi adresat independent. De aceea un segment are asociata oadresa de baza, care este adresa locatiei la care incepe segmentul. Aceasta adresa este multiplu de16.

Segmentele pot fi adiacente, disjuncte, partial suprapuse sau suprapuse complet (ca in figura4). 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 (prinintermediul CS), 64 K octeti pentru stiva (prin SS), 128 K octeti pentru date (prin DS si ES) (vezifigura 4).

Page 43: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

8

������������������������������������������

������������

::

::

::

::

00000H

00100H000FFH

10000H

10100H

::

0F0000H

0FFFFFH

segmentede date

(DS=ES=0)

segment de stiva(SS=10H)

suprapuse

segmentepartial

suprapuse

zonaneacoperita

cu segmente segment de cod(CS=F000H)

segmente disjuncte

Fig. 4. Exemplu de organizare a memoriei in segmente

3.2. Generarea adresei fizice3.2. Generarea adresei fizice3.2. Generarea adresei fizice3.2. Generarea adresei fizice

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

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 pentrua calcula adresa fizica.

Adresa logica consta dintr-o componenta segment de 16 biti si o componenta offset de 16biti. Din componenta segment microprocesorul poate calcula adresa de baza (de inceput) asegmentului prin inmultirea cu 10 H = 10000 B.

Adresa fizica se calculeaza adunand la adresa de baza a segmentului componenta offset. Deaceea componenta offset se mai numeste si deplasare, adresa relativa sau adresa efectiva, iar adresafizica 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

Page 44: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

9

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 adresafizica se calculeaza prin deplasarea cu 4 biti la stanga a segmentului si adunarea cu offset-ul, asacum este ilustrat in exemplul din figura 5.

1 A 3 0

15 0

0 1 2 4

15 0

Adresa logica

1A30H : 0124H 1 A 3 0 0

0 1 2 4

1 A 4 2 4 +

Deplasare stinga 4 biti

Offset-ul

Spre memorie

Adresafizica

1A424H

Segmentul

Baza segmentului

Fig. 5. Calculul adresei fizice din adresa logica

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

BAZASEGMENT

ADRESA FIZICA

OFFSETBAZASEGMENT

OFFSET

ADRESA LOGICA :

F0000HF0001HF0002HF0003H

FFFEDHFFFEEHFFFEFHFFFF0HFFFF1HFFFF2H

:

:

:

F000H

FFF0H

FFF0H

00F0H

FFFF0H

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, iardin 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 diferitin functie de modul de adresare a memoriei.

Structura pe segmente a memoriei UCP Intel 8086 face posibila scrierea unor programe caresunt 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 alterezeregistrele 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 registrelesegment sunt actualizate cu noua adresa de baza.

Page 45: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

10

4. Programarea microprocesorului Intel 80864. Programarea microprocesorului Intel 80864. Programarea microprocesorului Intel 80864. Programarea microprocesorului Intel 8086

Microprocesorul Intel 8086 efectueaza prelucrari sub comanda unui program numit siprogram 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 80864.1. Etapele dezvoltarii unui program pentru microprocesorul Intel 80864.1. Etapele dezvoltarii unui program pentru microprocesorul Intel 80864.1. Etapele dezvoltarii unui program pentru microprocesorul Intel 8086

Desi limbajele de nivel inalt sunt preferate in general datorita posibilitatilor de structurare aprogramelor, in cazul sistemelor dedicate realizate cu microprocesor, este util si uneori necesar ca oparte sau uneori intregul program sa fie scris in limbaj de asamblare.

Principalul avantaj al programelor scrise in limbaj de asamblare este viteza maxima deexecutie. Acesta deriva din faptul ca in limbaj de asamblare operatiile limbajului (instructiunile)sunt cele ale microprocesorului.

Page 46: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

11

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 rezolvemicroprocesorul la crearea unui program care sa indeplineasca corect cerintele acelei probleme senumeste 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 elaborareaprogramelor in cod masina. Programul asamblor converteste reprezentarile simbolice aleinstructiunilor in configuratii binare obtinind echivalentele in cod masina ale instructiunilor.

Asamblorul este de fapt un compilator simplificat pentru programe sursa scrise in limbaj deasamblare. Asamblarea se face de obicei in doi pasi:

- la prima parcurgere a textului se culeg toate referintele simbolice (denumirile) si seintroduc 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; valoareaunui 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 inlate sectiuni si a caror valoare se stabileste numei in momentul legarii sectiunilor intr-un programunic.

Rezultatul asamblarii este un text in forma binara (cod obiect) in care se pastreaza in formainitiala numai referintele externe. In plus se furnizeaza informatii indicind locul referintelorrelocabile pentru ca in momentul incarcarii valorile lor sa devina referinte absolute.

Combinarea sectiunilor se face de catre un program editor de legaturi prin rezolvareareferintelor externe (adica inlocuirea numelor cu adrese din memorie) si adaugarea eventual arutinelor din bibliotecile standard (care sint pastrate tot intr-o forma relocabila).

Programul rezultat este deja pus intr-o forma interna, direct executabila, el trebuind eventualnumai relocatat de catre un program locator. Locatorul este apelat in momentul punerii in executie aprogramului creat.

Page 47: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

12

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 estedepanatorul 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 Debugger4.2. Depanatorul simbolic Turbo Debugger4.2. Depanatorul simbolic Turbo Debugger4.2. Depanatorul simbolic Turbo Debugger

Depanatorul simbolic Turbo Debugger (TD) este o componenta a mediilor de dezvoltarePascal 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 Intel80x86.

Resursele sunt interne (registrele microprocesorului) sau externe (valorile unor locatii dememorie principala). Ele pot fi urmarite in timpul executiei unui program in cod masina sau inlimbaj de nivel inalt (Pascal, C), instructiune cu instructiune sau dupa executia unei secvente deinstructiuni.

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= F= F= File EEEEdit VVVView RRRRun BBBBreakpoints DDDData OOOOptions WWWWindow HHHHelp

Page 48: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

13

cs:0000 > B83454 mov ax,5434cs:0003 8ED8 mov ds,axcs:0005 A10000 mov ax,[0000]cs:0008 8B1E0200 mov bx,[0002]cs:000C 03060400 add ax,[0004]cs:0010 A30800 mov [0008],axcs:0013 131E0600 adc bx,[0006]cs:0017 891E0A00 mov [000A],bxcs:001B B44C mov ah,4Ccs:001D CD21 int 21

ax 0000bx 0000cx 0000dx 0000si 0000di 0000bp 0000sp 0000ds 5424ss 5434

c = 0z = 0s = 0o = 0p = 0a = 0i = 1d = 0

ds:0000 CD 20 FF 9F 00 9A F0 FE - � Ü -ds:0008 1D F0 E0 01 45 1B AA 01 ” - Ó _ E _ _

cs 5435ip 0000

ds:0010 45 1B 89 02 A0 15 12 07 E _ ë _ á § _ _ds:0018 01 01 01 00 02 FF FF FF _ __ _

ss:0002 0000ss:0000 > A286

F1F1F1F1-Help F2F2F2F2-Bkpt F3F3F3F3-Mod F4F4F4F4-Here F5F5F5F5-Zoom F6F6F6F6-Next F7F7F7F7-Trace F8F8F8F8-Step F9F9F9F9-Run F10F10F10F10-Menu

De asemenea, pe ecran apar doua linii de meniu:- linia de meniu superioara, care cuprinde submeniurile:

- System (=);- File File File File (fisiere), care prin:

- comanda Open Open Open Open permite deschiderea unor fisiere executabile pentru depanare, - comanda Quit ([Alt] - X[Alt] - X[Alt] - X[Alt] - 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,- F4F4F4F4 - Here (executie pana la cursor),- F5 - Zoom (marire fereastra),- F6 - Next,- F7 F7 F7 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] [Ctrl] [Ctrl] [Ctrl] se poate observa ca meniul inferior se modifica. Pentru a se specificalocatia de memorie care se doreste a fi afisata se foloseste comanda [Ctrl] G [Ctrl] G [Ctrl] G [Ctrl] G urmata de adresa informatul segment : offset.

Daca se doreste afisarea segmentului de date incepand cu primul octet se utilizeaza secventa[Ctrl] G [Ctrl] G [Ctrl] G [Ctrl] G urmata de DS : 0DS : 0DS : 0DS : 0. Trecerea de la o subfereastra la alta se face apasand tasta [Tab].[Tab].[Tab].[Tab].

Page 49: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 1

14

5. Desfăşurarea lucrării5. Desfăşurarea lucrării5. Desfăşurarea lucrării5. Desfăşurarea lucrării

1. Se studiaza arhitectura microprocesorului Intel 8086.

2. Se porneste calculatorul si se intra in contul LAPSTn (n este numarul calculatorului). Selanseaza in executie depanatorul simbolic TD cu comanda:

TD3. Se studiaza comenzile sale si se experimenteaza utilizarea lor.

6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii6. 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 (secunoaste componenta segment: 2000H):

a) 20002H,b) 20010H,c) 20300H,d) 24000H,e) 2FFFFH.

3. Sa se calculeze componentele segment corespunzatoare urmatoarelor adrese fizice (secunoaste componenta offset: 400H):

a) 10400H,b) B0400H,c) 30800H,d) CDE00H,e) FFFF0H.

4. Care dintre urmatoarele adrese fizice apartin segmentului care are componenta segment2400H: a) 33FFFH,

b) 23000H,c) 27890H,d) 33000H,e) 34000H.

Page 50: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

1

Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Instructiuni de transfer. Instructiuni aritmeticeInstructiuni de transfer. Instructiuni aritmeticeInstructiuni de transfer. Instructiuni aritmeticeInstructiuni de transfer. Instructiuni aritmetice

Scopul lucrăriiScopul lucrăriiScopul lucrăriiScopul lucrării

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

1. Elemente de limbaj de asamblare pentru microprocesorul Intel 80861. Elemente de limbaj de asamblare pentru microprocesorul Intel 80861. Elemente de limbaj de asamblare pentru microprocesorul Intel 80861. Elemente de limbaj de asamblare pentru microprocesorul Intel 8086

1.1. Tipuri de date utilizate de microprocesorul Intel 80861.1. Tipuri de date utilizate de microprocesorul Intel 80861.1. Tipuri de date utilizate de microprocesorul Intel 80861.1. Tipuri de date utilizate de microprocesorul Intel 8086

Reprezentarea interna a informatiilor (instructiuni, date, adrese, comenzi, etc.) este realizatain binar. De aceea, tipurile de date elementare (grupurile de biti) utilizate de microprocesorul Intel8086 au urmatoarele dimensiuni si denumiri:

- bitul bitul bitul bitul (bbbbit) = cifra binara,- octetul (BBBByte) = grup de 8 biti,- cuvantul (WWWWord) = grup de 16 biti = 2 octeti (MSB = octetul superior, LSB = octetul

inferior),- dublul-cuvant (DDDDouble-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 utilizateste sirul de date, care permite memorarea tablourilor (vectorilor, matricilor, etc.). Un alt tip compuseste 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 80861.2. Structura unui program in limbaj de asamblare pentru microprocesorul Intel 80861.2. Structura unui program in limbaj de asamblare pentru microprocesorul Intel 80861.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 incontinuare. Programul efectueaza suma a N=5:

DSEG SEGMENT ; segmentul de date

Page 51: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

2

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

DSEG ENDS

STIVA SEGMENT ; segment de stivaDW 40 DUP(?)

VIRF LABEL WORD ; eticheta VIRFSTIVA ENDS

CSEG SEGMENT ; segment de cod (program)

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

START: ; eticheta de inceput a programuluiMOV AX, DSEG ; initializariMOV DS, AXMOV ES, AXMOV AX, STIVA MOV SS, AXMOV SP, OFFSET VIRF ; initializare pointer de stivaMOV AX, 0 ; initializare registre utilizate MOV DX, 0MOV CX, LENGTH TABW ; CX = 5 = lungimea TABWMOV BP, SIZE TABW ; BP = 10 = 5*2 = dimensiunea TABW

NEXT:SUB BP, TYPE TABW ; BP = BP - 2ADD AX, DS: TABW [BP] ; AX = AX + cuvant curent din TABWADC DX, ZERO ; DX = DX + transportul anteriorLOOP NEXT ; CX = CX-1

; daca CX <> 0 salt la NEXT; altfel trece la instruct. urmatoare

MOV WORD PTR REZ, AX ; stocarea LSW la adresa REZMOV 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 ENDSEND START ; sfarsitul programului

O varianta de plasare in memorie a codurilor obtinute in urma asamblarii programuluianterior, reprezentata pe harta memoriei principale, este urmatoarea:

Page 52: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

3

0 0

7 0

0 0

7 0

0 0

7 0

0 0

7 0

0 0

7 0

x x

x x

x x

x x

REZ :

TAB = TABW :

VIRF:

START:

������������

��������������������

��������

:

:

initialSP

SSSTIVA:

DS

CSinitialIP

de stivasegment

de cod

segment

de datesegment

adresa maxima = 0FFFFFH:

adresa minima = 00000H:

0 0

7 0

0 0

7 0

0 0

7 0

0 0

7 0

0 0

7 0

0 0

3 0

0 2

0 0

REZ :

TABW :

VIRF:

START:

������������

��������������������

��������

:

:

STIVA:

finalIP

adresa maxima = 0FFFFFH:

00000H:

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:

finalSP

��������

:

��������

:

��������

: ��������

:

AX = 0, DX = 0, CX = 5, BP = 10

b. Configuratia finala:

AX = 3000H, DX =0002H, CX = 0, BP = 0

REZ = 0002 H : 3000 H = 23000H = 5 * 7000HREZ = XXXX H : XXXX H

1.3. Instructiunile limbajelor de asamblare pentru microprocesorul I80861.3. Instructiunile limbajelor de asamblare pentru microprocesorul I80861.3. Instructiunile limbajelor de asamblare pentru microprocesorul I80861.3. Instructiunile limbajelor de asamblare pentru microprocesorul I8086

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

| Eticheta: | Codul operatiei Operanzi de tip imediat | ;Comentariu | (mnemonica)

Page 53: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

4

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 alteinformatii auxiliare.

Comentariul este optional. El serveste doar la marirea inteligibilitatii programului. Laasamblare textul comentariului este ignorat de catre asamblor.

1.4. Operatorii asamblorului TASM1.4. Operatorii asamblorului TASM1.4. Operatorii asamblorului TASM1.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 cuasamblarea textului sursa.

Operatorii utilizati de catre asamblorul TASM sunt de mai multe tipuri:

1. Operatori modificatori de valori:1. Operatori modificatori de valori:1. Operatori modificatori de valori: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, necesarapentru obtinerea adresei fizice din adresa logica segment (DS) : offset (TABW + BP).

2. Operatori generatori de valori:2. Operatori generatori de valori:2. Operatori generatori de valori:2. Operatori generatori de valori:

a. SEG genereaza (returneaza) valoarea adresei de baza a segmentului in care se aflavariabila/eticheta careia i se aplica.

b. OFFSET genereaza (returneaza) valoarea adresei relative ("offset"-ului) fata de adresa deinceputul 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.

Page 54: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

5

c. TYPE genereaza (returneaza) numarul de octeti ai unui element al variabilei careia i seaplica (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 seaplica (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 inocteti). 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 celmai putin semnificativ (LSB) al unei expresii.

3. Operatori modificatori de atribute:3. Operatori modificatori de atribute:3. Operatori modificatori de atribute:3. Operatori modificatori de atribute:

a. PTR care modifica tipul unei variabile/etichete: BYTE, WORD, DWORD

Exemple:MOV WORD PTR REZ, AXMOV WORD PTR REZ + 2 , DX

In ambele cazuri asamblorul utilizeaza elementele variabilei REZ, declarata initial de tipoctet, sub forma de cuvinte (grupuri de doi octeti). Astfel se obtine compatibilitate cu tipul cuvant alregistrelor AX si DX. b. Operatorul : care modifica segmentul implicit al unei variabile/etichete (utilizat pentruprecizarea 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 calcululadresei adresei fizice din adresa logica segment (DS) : offset (TABW + BP).

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

Page 55: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

6

Tab.1. Asocierile implicite si explicite ale registrelor segment si offset

Tip operatie Registru segmentimplicit

Registre segmentutilizabile explicit

Sursa offset-ului

Incarcarea codurilorinstructiunilor in coada

Q

Operatii cu stiva

Transferuri date, cuexceptiile:

- Siruri sursa

- Siruri destinatie

- Registrul BP

CS

SS

DS

DS

ES

SS

-

-

ES, SS, CS

ES, SS, CS

-

DS, ES, CS

IP

SP

EA (memorie)

SI

DI

EA (memorie)

1.5. Directivele asamblorului TASM1.5. Directivele asamblorului TASM1.5. Directivele asamblorului TASM1.5. Directivele asamblorului TASM

Un program scris in limbaj de asamblare contine alaturi de instructiunile propriu-zise sipseudo-instructiuni (directive), care se adreseaza programului asamblor modificindu-i modul delucru sau permitind specificarea datelor.

1. Directivele care specifica segmentele utilizate sunt:

a. a. a. a. Directiva SEGMENT Directiva SEGMENT Directiva SEGMENT 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. b. b. b. Directiva ENDS Directiva ENDS Directiva ENDS Directiva ENDS - folosita pentru a marca sfirsitul segmentului;

Exemple:DSEG ENDS

Page 56: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

7

declara sfirsitul segmentului de date DSEG,STIVA ENDS

declara sfirsitul segmentului de stiva STIVA,CSEG ENDS

declara sfirsitul segmentului de cod CSEG.

c. c. c. c. Directiva ASSUME Directiva ASSUME Directiva ASSUME Directiva ASSUME - informeaza TASM asupra registrelor de segment prin care vor fiaccesate segmentele logice definite anterior prin directiva SEGMENT (adresele de baza alesegmentelor logice).

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

informeaza asamblorul ca segmentele CSEG, STIVA si DSEG vor avea adresele de baza incarcatein CS, SS, DS si ES.

2. 2. 2. 2. Directiva EQU Directiva EQU Directiva EQU Directiva EQU permite declararea constantelor. Constantele astfel declarate sunt inlocuitecu numere propriu-zise in momentul asamblarii. Pentru ele nu se aloca spatiu de memorie.

Exemplu: ZERO EQU 0Asamblorul inlocuieste in program constanta ZERO cu valoarea numerica 0.

3. Pentru declararea variabilelor se utilizeaza urmatoarele directive:

a. a. a. a. Directiva DB Directiva DB Directiva DB 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. b. b. b. Directiva DWDirectiva DWDirectiva DWDirectiva 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 7000HDW 40 DUP(?)

declara un sir de 40 de cuvinte neinitializate fara nume (simpla alocare)

c. c. c. c. Directiva DDDirectiva DDDirectiva DDDirectiva 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 unuianumit 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:

Page 57: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

8

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 LABELdirectiva LABELdirectiva LABELdirectiva LABEL, eventual precizand si atributul.

Exemple:TAB LABEL BYTE

defineste o eticheta cu numele TAB inaintea variabilei TABW, permitand accesul la variabilaTABW octet cu octet (varianta pentru BYTE PTR !),

VIRF LABEL WORDdefineste eticheta VIRF.

Etichetele sunt (ca si variabilele) nume simbolice de adrese. Ele sunt caracterizate de unanumit offset in cadul unui segment.

In general etichetele identifica instructiunile. In acest caz etichetele pot fi referite in alteinstructiuni pentru executarea salturilor in program. Daca referirile la o eticheta sunt facute in cadrulsegmentului in care ea este definita ("home segment") atunci se spune ca ea are atributul NEAR. Oeticheta 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) seutilizeaza si operatorul:

: : : : Exemple:

START:declara eticheta de inceput a codului executabil

NEXT:declara eticheta NEXT utilizata pentru iteratii

5. Directiva END5. Directiva END5. Directiva END5. Directiva END, utilizata pentru declararea sfarsitului de program (cod).

Exemplu:END START

indica asamblorului ca programul inceput la eticheta START se sfarseste.

6. Directiva RECORD6. Directiva RECORD6. Directiva RECORD6. Directiva RECORD, utilizata pentru definirea inregistrarilor de date. Formatul declaratieide 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:

Page 58: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

9

CHIPS RECORD RAM:7, EPROM:4, ROM:5

defineste o inregistrare cu 16 biti formata din 3 campuri cu numele RAM, EPROM si ROM avandlungimile 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 avandlungimile de 7, 4, si respectiv 5 biti, cu precizarea valorilor initiale ale campurilor.

7. Directiva STRUCT7. Directiva STRUCT7. Directiva STRUCT7. Directiva STRUCT, utilizata pentru definirea structurilor. Formatul declaratiei de definirea 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 STRUCTSTARE DB 0VAL_CRT DW ?

PROCES ENDS

2. Instructiuni de transfer2. Instructiuni de transfer2. Instructiuni de transfer2. Instructiuni de transfer

Instructiunile de transfer intre registre sau intre un registru si memorie realizeaza operatiilede 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, operand2si efectul:

operand1 = operand2

Se observa ca sensul in care se face atribuirea este de la dreapta la stanga (sens utilizat ingeneral pentru scrierea functiilor si a expresiilor matematice). Astfel, se poate spune ca formainstructiunii este:

MOV destinatie, sursa

Page 59: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

10

Exemplu:MOV AX, BX

copiaza in registrul AX valoarea continuta in registrul BX

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

XCHG operand1, operand2si efectul:

temp = operand1operand1= operand2operand2 = 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 luiCX

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

IN acumulator, portsi efectul:

acumulator = port

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

OUT port, acumulatorsi efectul:

port = acumulator

3. Instructiuni aritmetice3. Instructiuni aritmetice3. Instructiuni aritmetice3. Instructiuni aritmetice

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

3.1. Instructiuni aritmetice care utilizeaza 2 operanzi3.1. Instructiuni aritmetice care utilizeaza 2 operanzi3.1. Instructiuni aritmetice care utilizeaza 2 operanzi3.1. Instructiuni aritmetice care utilizeaza 2 operanzi

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

1. Instructiunea de adunare are forma:

ADD operand1, operand2

Page 60: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

11

si efectul: operand1 = operand1 + operand2

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

ADD BX, DXEfect:

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, CXEfect:

0111 1111 1111 1111 B = 7FFF H +0100 0000 0000 0000 B = 4000 H +

1 B = 1 H--------------------------------------------------

(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, DXEfect:

1000 0000 0000 0000 B = 8000 H -1100 0000 0000 0000 B = C000 H--------------------------------------------------

(CF = 1) 1100 0000 0000 0000 B = C000 H

Page 61: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

12

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 -

1 B = 1 H--------------------------------------------------

(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 intre numere fara semn intre numere fara semn intre numere fara semn are forma:

MUL operand

si efectul: - pentru operanzi de 8 biti: AX = AL * operand- pentru operanzi de 16 biti: DX, AX = AX * operand

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

IMUL operand

si efectul: - pentru operanzi de 8 biti: AX = AL * operand- pentru operanzi de 16 biti: DX, AX = AX * operand

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

DIV operand

si efectul: - pentru operanzi de 8 biti: AL = AX / operand (catul)AH = AX MOD operand (restul)

- pentru operanzi de 16 biti: AX = DX, AX / operandDX = DX, AX MOD operand

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

Page 62: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

13

IDIV operand

si efectul: - pentru operanzi de 8 biti: AL = AX / operandAH = AX MOD operand

- pentru operanzi de 16 biti: AX = DX, AX / operandDX = DX, AX MOD operand

3.2. Instructiuni aritmetice care utilizeaza 1 operand3.2. Instructiuni aritmetice care utilizeaza 1 operand3.2. Instructiuni aritmetice care utilizeaza 1 operand3.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 = 1 H--------------------------------------------------

(CF = 1) 0000 0000 0000 0000 B = 0000 HValori 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 SIEfect:

0000 0000 0000 0001 B = 0001 H -0000 0000 0000 0001 B = 1 H--------------------------------------------------

(CF = 0) 0000 0000 0000 0000 B = 0000 H

Valori in urma executiei instructiunii: SI = 0000H, CF = 0.

3. Instructiunea de negare are forma:

Page 63: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

14

NEG operand

si efectul: operand = (0) - operand

Exemplul 1 (initial SI = 0001H):

NEG SIEfect:

(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 DIEfect:

(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 AXEfect:

(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 BXEfect:

(0000 0000 0000 0000 B = 0000 H) - 1000 0000 0000 0000 B = 8000 H

-------------------------------------------------- (CF = 1) 1000 0000 0000 0000 B = 8000 H

Page 64: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

15

Valori in urma executiei instructiunii: BX = 8000H, CF = 1 (transport).

Exemplul 5 (initial CX = 4000H):

NEG CXEfect:

(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 DXEfect:

(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 programe4. Exemple de programe4. Exemple de programe4. Exemple de programe

4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie

Rolul principal al instructiunilor de adunare cu transport si scadere cu imprumut este acelade 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 LSWADC AX, CX ; adunarea MSW

Efectul secventei este:

AX BX +

Page 65: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

16

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 LSWSBB AX, CX ; scaderea MSW

Efectul secventei este:

AX BX -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) 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 invaribila c.

DAT SEGMENTa dw 0a46fhb dw 0dc89hc dw ?, ?

Page 66: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

17

DAT ENDS

ASSUME CS: COD, DS: DATCOD SEGMENT

START:MOV AX, DATMOV DS, AX

mov ax, a ; initializarimov dx, 0

add ax, b ; suma in dubla precizieadc dx, 0

mov c, ax ; memorare rezultatmov [c+2], dx

MOV AH, 4CHINT 21H

COD ENDSEND START

4.2. Alte programe4.2. Alte programe4.2. Alte programe4.2. Alte programe

1. P1. P1. P1. Program de transformare a unui caracter litera mica citit de la tastatura in caracter literarogram de transformare a unui caracter litera mica citit de la tastatura in caracter literarogram de transformare a unui caracter litera mica citit de la tastatura in caracter literarogram de transformare a unui caracter litera mica citit de la tastatura in caracter literamare afisat pe ecran.mare afisat pe ecran.mare afisat pe ecran.mare afisat pe ecran.

data segmentnumeprog 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:datacod segmentstart:

mov ax, datamov ds, axmov dx, offset numeprog ; afisare sir caracteremov ah, 9 ; (nume program)int 21h

mov dx, offset citire ; afisare sir caracteremov ah, 9 ; (mesaj citire)

Page 67: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

18

int 21h

mov ah, 1 ; citire caracter cu ecou peint 21h ; ecran (litera mica)

sub al, 20h ; conversie litera mica -> litera maremov bl, al

mov dx, offset afisare ; afisare sir caracteremov ah, 9 ; (mesaj afisare)int 21h

mov dl, blmov ah, 2 ; afisare caracterint 21h ; (litera mare)

mov ah, 8 ; citire caracter fara ecou peint 21h ; ecran (Enter)mov ah, 4ch ; exitint 21hcod endsend start

2. Program de transformare a unui caracter litera mare citit de la tastatura in caracter litera2. Program de transformare a unui caracter litera mare citit de la tastatura in caracter litera2. Program de transformare a unui caracter litera mare citit de la tastatura in caracter litera2. Program de transformare a unui caracter litera mare citit de la tastatura in caracter literamica afisat pe ecran.mica afisat pe ecran.mica afisat pe ecran.mica afisat pe ecran.

data segmentnumeprog 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:datacod segmentstart:

mov ax, datamov ds, axmov dx, offset numeprog ; afisare sir caracteremov ah, 9 ; (nume program)int 21h

mov dx, offset citire ; afisare sir caracteremov ah, 9 ; (mesaj citire)int 21h

mov ah, 1 ; citire caracter cu ecou pe

Page 68: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

19

int 21h ; ecran (litera mare)

add al, 20h ; conversie litera mare -> litera micamov bl, almov dx, offset afisare ; afisare sir caracteremov ah, 9 ; (mesaj afisare)int 21h

mov dl, blmov ah, 2 ; afisare caracterint 21h ; (litera mica)

mov ah, 8 ; citire caracter fara ecou peint 21h ; ecran (Enter)

mov ah, 4ch ; exitint 21hcod endsend start

5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. Desfasurarea lucrarii

1. Se deschide un editor de texte (Borland C cu comanda BC, Turbo Pascal cu comandaTURBO, etc.).

a) Se editeaza urmatorul textul urmatorului program (exceptand comentariile):

DATA SEGMENT ; nu sunt date de declarat

DATA ENDS

ASSUME CS: COD, DS: DATACOD SEGMENT

START:MOV AX, DATA ; initializare DSMOV DS, AX

MOV AX, 7FFFH ; initializari registre de dateMOV BX, 8000HMOV CX, 4000HMOV DX, C000H

ADD BX, DX ; adunarea LSW

Page 69: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

20

ADC AX, CX ; adunarea MSW

MOV AH, 4CH ; exitINT 21H

COD ENDSEND STARTb) 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 AP21TASM AP21TASM AP21TASM 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 AP21TLINK AP21TLINK AP21TLINK 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.ASMTYPE AP21.MAPTYPE AP21.OBJTYPE AP21.EXE

Se analizeaza efectele.

f) Se lanseaza in executie depanatorul simbolic cu comanda:

TD AP21TD AP21TD AP21TD AP21

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

Page 70: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

21

2. Se editeaza programul de transformare a unui caracter litera mica citit de la tastatura incaracter 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 programulAP22.EXE.

3. Se editeaza programul de transformare a unui caracter litera mare citit de la tastatura incaracter 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 programulAP23.EXE.

6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii

1. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a calcula suma adoua 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 invalorile 10, ..., 15.

3. Sa se scrie un program care sa transforme caracterele 'A', ..., 'F' citite de la tastatura invalorile 10, ..., 15.

4. Sa se scrie un program care sa citeasca de la tastatura valorile 10, ..., 15 (doua cifresuccesive), sa le transforme in caracterele 'A', ..., 'F' si sa le afiseze pe ecran.

7. Intrebari7. Intrebari7. Intrebari7. 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 ?

Page 71: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 2

22

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 ?

Page 72: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

1

Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Instructiuni logice, de deplasare si rotatieInstructiuni logice, de deplasare si rotatieInstructiuni logice, de deplasare si rotatieInstructiuni logice, de deplasare si rotatie

Scopul lucrăriiScopul lucrăriiScopul lucrăriiScopul lucrării

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

1. Operanzii instructiunilor microprocesorului Intel 80861. Operanzii instructiunilor microprocesorului Intel 80861. Operanzii instructiunilor microprocesorului Intel 80861. Operanzii instructiunilor microprocesorului Intel 8086

Microprocesorul Intel 8086 utilizeaza mai multe moduri de adresare a datelor, numitegeneric operanzi (sursa sau destinatie), in functie de locul in care sunt plasati acestia. Operanzii potfi 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 utilizeazasa fie executate mai rapid, nemaifiind necesare transferuri cu memoria sau porturile. Registrele (de 8sau 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 incoada de instructiuni de catre unitatea de interfata odata cu instructiunea. Limitarile operanzilor detip 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 calcululadresei 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).

Page 73: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

2

1.1. Operanzi de tip imediat (adresarea imediata)1.1. Operanzi de tip imediat (adresarea imediata)1.1. Operanzi de tip imediat (adresarea imediata)1.1. Operanzi de tip imediat (adresarea imediata)

Operandul este explicit in codul instructiunii, dupa codul operatiei, aflandu-se in coada deinstructiuni.

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)1.2. Operanzi din registre (adresarea directa la registru)1.2. Operanzi din registre (adresarea directa la registru)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.3. Operanzi din memorie (adresarea la memorie)1.3. Operanzi din memorie (adresarea la memorie)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) declaratacu o directiva. Operandul este continutul variabilei VAR din memorie.

2. Adresare indirecta la memorie prin registru.

Page 74: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

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 dedate (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 offset-ul 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 continutuluiregistrului de baza sau index specificat in codul operatiei si deplasarea care urmeaza in codulinstructiunii 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 laoffset-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 continuturilorregistrelor de baza si index specificate in codul operatiei.

Exemplu. In instructiunea:

Page 75: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

4

ADD AX, [BX] [ SI]

al doilea operand este cuvantul din MP, din segmentul de date curent, aflat la offset-ul egal cu sumacontinuturilor 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 continuturilorregistrelor 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 sumacontinuturilor registrelor BX si SI cu deplasarea MATR (de tip offset).

1.4. Operanzi din porturi de intrare-iesire (adresarea porturilor)1.4. Operanzi din porturi de intrare-iesire (adresarea porturilor)1.4. Operanzi din porturi de intrare-iesire (adresarea porturilor)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 logice2. Instructiuni logice2. Instructiuni logice2. Instructiuni logice

Page 76: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

5

2.1. Instructiuni logice care utilizeaza 2 operanzi2.1. Instructiuni logice care utilizeaza 2 operanzi2.1. Instructiuni logice care utilizeaza 2 operanzi2.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, BXEfect:

0101 0101 0101 0101 B = 5555 H x0110 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, BXEfect:

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

Page 77: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

6

si efectul: operand1 = operand1 XOR operand2

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

XOR AX, BXEfect:

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 operand2.2. Instructiuni logice care utilizeaza 1 operand2.2. Instructiuni logice care utilizeaza 1 operand2.2. Instructiuni logice care utilizeaza 1 operand

Instructiunea care utilizeaza 1 operand (sursa si destinatie) este negarea logica (NOT) abitilor 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 SIEfect:

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

Page 78: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

7

Valoare in urma executiei instructiunii: DI = 0000H.

Exemplul 3 (initial AX = 7FFFH):

NOT AXEfect:

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 BXEfect:

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 CXEfect:

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 DXEfect:

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 rotatie3. Instructiuni de deplasare si rotatie3. Instructiuni de deplasare si rotatie3. Instructiuni de deplasare si rotatie

Page 79: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

8

3.1. Instructiuni de deplasare3.1. Instructiuni de deplasare3.1. Instructiuni de deplasare3.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, 1Efect: 1 1111010 1010 1010 1010 B = AAAA H (<-----)

------------------------------------------------------------0101 0101 0101 0100000 B = 5 5 5 4 H

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

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

SHL AX, CL

Efect: (CL)=41010000 1010 1010 1010 B = AAAA H (<-----)------------------------------------------------------------1010 1010 1010 0000000000000000 B = AAA0 H

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

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):

Page 80: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

9

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, 1Efect: 1

1010 1010 1010 1010000 B = AAAA H (----->)------------------------------------------------------------0000101 0101 0101 0101 B = 5 5 5 5 H

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

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

SHR AX, CLEfect: (CL)=4

1010 1010 1010 1111010 B = AAAA H (----->)------------------------------------------------------------0000000000000000 1010 1010 1010 B = 0AAA H

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

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):

Page 81: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

10

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, 1Efect: 1

1111010 1010 1010 1010 B = AAAA H (<-----) -----------------------------------------------------------0101 0101 0101 0100000 B = 5 5 5 4 H

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

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

SAL AX, CLEfect: (CL)=4 1010000 1010 1010 1010 B = AAAA H (<-----)

------------------------------------------------------------1010 1010 1010 0000000000000000 B = AAA 0 H

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

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

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

SAR operand, 1

Page 82: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

11

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, 1Efect: 1

1010 1010 1010 1010000 B = AAAA H (----->)------------------------------------------------------------1111101 0101 0101 0101 B = D5 5 5 H

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

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

SAR AX, CLEfect: (CL)=4

1010 1010 1010 1111010 B = AAAA H (----->)------------------------------------------------------------1111111111111111 1010 1010 1010 B = FAAA H

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

3.2. Instructiuni de rotatie3.2. Instructiuni de rotatie3.2. Instructiuni de rotatie3.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, 1Efect:

1111010 1010 1010 1010 B = AAAA H (rot. stg. cu 1)

Page 83: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

12

-------------------------------------------------------------------0101 0101 0101 0101111 B = 5 5 5 5 H

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

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

ROL AX, CLEfect:

1010 1010 1010 1010 1010 1010 1010 B = AAAA H (rot. stg. cu CL)----------------------------------------------------------------------

1010 1010 1010 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, 1Efect:

(CF = 1111) 1111010 1010 1010 1010 B = AAAA H (rot. stg. cu 1)--------------------------------------------------------------------

(CF = 1111) 0101 0101 0101 0101111 B = 5 5 5 5 H

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

Exemplul 2 (initial AX = AAAAH si CF = 0):

RCL AX, 1

Efect: (CF = 0000) 1111010 1010 1010 1010 B = AAAA H (rot. stg. cu 1)

-------------------------------------------------------------------- (CF = 1111) 0101 0101 0101 0100000 B = 5 5 5 4 H

Page 84: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

13

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

Exemplul 3 (initial AX = AAAAH, CL = 4 si CF = 1):

RCL AX, CLEfect:

(CF = 1111) 1010 1010 1010 1010 1010 1010 1010 B = AAAA H (rot. stg. cu CL) ----------------------------------------------------------------

(CF = 0000) 1010 1010 1010 1111101 101 101 101 B = AAAD H

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

Exemplul 4 (initial AX = AAAAH, CL = 4 si CF = 0):

RCL AX, CLEfect:

(CF = 0000) 1010 1010 1010 1010 1010 1010 1010 B = AAAA H (rot. stg. cu CL) ----------------------------------------------------------------------

(CF = 0000) 1010 1010 1010 0000101 101 101 101 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 1010000 B = AAAA H (rot. dr. cu 1)-------------------------------------------------------------------0000101 0101 0101 0101 B = 5 5 5 5 H

Page 85: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

14

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

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

ROR AX, CLEfect:

1010 1010 1010 1010 1010 1010 1010 B = AAAA H (rot. dr. cu CL)-------------------------------------------------------------------1010 1010 1010 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, 1Efect:

1010 1010 1010 1010000 (CF = 1111) B = AAAA H (rot. dr. cu 1)------------------------------------------------------------------------

1111101 0101 0101 0101 (CF = 0000) 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 1010000 (CF = 0000) B = AAAA H (rot. dr. cu 1)

------------------------------------------------------------------------0000101 0101 0101 0101 (CF = 0000) B = 5 5 5 5 H

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

Page 86: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

15

Exemplul 3 (initial AX = AAAAH, CL = 4 si CF = 1):

RCR AX, CL Efect:

1010 1010 1010 1010 1010 1010 1010 (CF = 1111) B = AAAA H (rot. dr. cu CL)---------------------------------------------------------------------------0100100100101111 1010 1010 1101 (CF = 1111) B = 5AAA H

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

Exemplul 4 (initial AX = AAAAH, CL = 4 si CF = 0):

RCR AX, CLEfect:

1010 1010 1010 1010 1010 1010 1010 (CF = 0000) B = AAAA H (rot. dr. cu CL) --------------------------------------------------------

1011011011010000 1010 1010 0101 (CF = 1111) B = AAAA H

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

4. Exemple de programe4. Exemple de programe4. Exemple de programe4. Exemple de programe

4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie

Rolul principal al bitului de transport in instructiunile de deplasare si rotatie este acela de apermite 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 ; deplasarea MSWSHL BX, 1 ; deplasarea LSWADC AX, 0 ; adunarea bitului CF la LSW

Efectul secventei este:

1111010 1010 1010 1010 1111000 1000 1000 1000 B = AAAA 8 8 8 8 H/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

--------------------------------------------------------------------------------------------------------- (CF = 1111)0101 0101 0101 0101111 0001 0001 0001 0000000 B = 5 5 5 5 1 1 1 0 H

In urma executiei secventei: AX = 5555H, BX = 1110H, CF = 1 (rezultat 1 5555 1110H).

Page 87: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

16

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 ; deplasarea LSWSHR AX, 1 ; deplasarea MSWADC DX, 0 ; adunarea bitului CF la DXMOV CL, 15 ; pregatire deplasare 15 bitiSHL DX, CL ; deplasare CF pe pozitia MSbADD BX, DX ; adunarea bitului CF la MSW

Efectul secventei este:

1010 1010 1010 1010000 1000 1000 1000 1000000 B = AAAA 8 8 8 8 H \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \---------------------------------------------------------------------------------------------------------

0000101 0101 0101 0101 0000100 0100 0100 0100 (CF = 0000) 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 ; rotirea MSWRCL BX, 1 ; rotirea (LSW,CF)ADC AX, 0 ; adunarea la MSW a bitului CF

; obtinut prin rotirea lui BX

Efectul secventei este:

1111010 1010 1010 1010 1111000 1000 1000 1000 B = AAAA 8 8 8 8 H/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

--------------------------------------------------------------------------------------------------------- (CF = 1111)0101 0101 0101 0101111 0001 0001 0001 0001111 B = 5 5 5 5 1 1 1 1 H

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 ; rotirea cuvantului superior (MSW)RCR BX, 1 ; rotirea cuvantului inferior (LSW) cu CF

; de la rotirea lui AX

Page 88: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

17

ADC DX, 0 ; aducerea in DX a lui CF de la rotirea lui BXROR DX, 1 ; plasarea in DX a lui CF obtinut prin rotirea

; lui BX, pe cea mai semnificativa pozitieADD AX, DX ; adunarea la cuvantul superior a bitului

; CF obtinut prin rotirea lui BX

Efectul secventei este:

1010 1010 1010 1010000 1000 1000 1000 1000000 B = AAAA 8 8 8 8 H \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \---------------------------------------------------------------------------------------------------------

0000101 0101 0101 0101 (CF = ) 0000100 0100 0100 0100 (CF = 0000) 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 catredreapta.

data segmentv dw 0abcdh, 0ef12h

data ends assume cs: cod, ds: datacod segmentst:

mov ax, datamov ds, axmov ax, x ; initializarimov bp, offset vmov ax, ds:[bp]mov bx, ds:[bp+2]mov dx, 0 ; prima deplasareshr ax, 1shr bx, 1adc dx, 0ror dx, 1adc ax, 0mov dx, 0 ; a doua deplasareshr ax, 1shr bx, 1adc dx, 0ror dx, 1adc ax, 0

Page 89: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

18

mov ds:[bp], ax ; stocare rezultatmov ds:[bp+2], bxmov ah, 4chint 21h

cod ends end st

4.2. Alte programe4.2. Alte programe4.2. Alte programe4.2. Alte programe

1. Program de calcul al produsului unei variabile x cu valoarea 7. Rezultatul plasat inmemorie in variabila y.

data segmentx dw 120hy dw ?

data ends assume cs: cod, ds: datacod segmentst:

mov ax, datamov ds, axmov ax, x ; copiere x in AXmov y, ax ; copiere x in y (y = x)shl ax, 1 ; calcul 2xadd y, ax ; adunare 2x la y (y = x+2x = 3x)shl ax, 1 ; calcul 4xadd y, ax ; adunare 4x la y (y = x+2x+4x = 7x)mov ah, 4chint 21h

cod ends end st

2. Program de calcul al produsului unei variabile x cu valoarea 0,75 (=3/4). Rezultatul plasatin memorie in variabila y.

data segmentx dw 120hy dw ?

data ends assume cs: cod, ds: datacod segmentst:

mov ax, datamov ds, ax

; Varianta 1

Page 90: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

19

mov ax, x ; copiere x in AXshr ax, 1 ; calcul x/2mov y, ax ; copiere x/2 in y (y = x/2)shr ax, 1 ; calcul x/4add y, ax ; adunare x/4 la y (y =x/2+x/4= 3x/4)

; Varianta 2mov ax, x ; copiere x in AXmov y, ax ; copiere x in y (y = x)shr ax, 1 ; calcul x/2shr ax, 1 ; calcul x/4sub y, ax ; scadere x/4 din y (y =x-x/4= 3x/4)mov ah, 4chint 21h

cod ends end st

5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. 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 valoarea3,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 fisiercu numele AP33.ASM.

6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii

1. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a deplasa lastanga 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 catredreapta cu 5 pozitii un cuvint din memorie folosind numai registrele de tip octet (AH, AL, BH, BL,CH, CL, DH, DL).

Page 91: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 3

20

7. Intrebari7. Intrebari7. Intrebari7. 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 ?

Page 92: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

1

Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Instructiuni de transfer al comenziiInstructiuni de transfer al comenziiInstructiuni de transfer al comenziiInstructiuni de transfer al comenzii

Scopul lucrăriiScopul lucrăriiScopul lucrăriiScopul lucrării

a) Instructiuni de salt.b) Instructiuni de test.c) Instructiuni iterative.

1. Instructiuni de salt1. Instructiuni de salt1. Instructiuni de salt1. Instructiuni de salt

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

1.1. Instructiunea de salt neconditionat1.1. Instructiunea de salt neconditionat1.1. Instructiunea de salt neconditionat1.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 (obtinutadin pozitie), a urmatoarei instructiuni care va fi executata.

1.2. Instructiuni de salt conditionat1.2. Instructiuni de salt conditionat1.2. Instructiuni de salt conditionat1.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):

JCXZCXZCXZCXZ pozitie

Page 93: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

2

b) Salt conditionat de CF=1 (transport la operatia anterioara):

JCCCC pozitie

c) Salt conditionat de CF=0 (fara transport la operatia anterioara):

JNCNCNCNC pozitie

d) Salt conditionat de ZF=1 (rezultat zero la operatia anterioara):

JEEEE pozitieJZZZZ pozitie

e) Salt conditionat de ZF=0 (rezultat nenul la operatia anterioara):

JNENENENE pozitieJNZNZNZNZ pozitie

f) Salt conditionat de PF=1 (rezultat par la operatia anterioara):

JPPPP pozitieJPEPEPEPE pozitie

g) Salt conditionat de PF=0 (rezultat impar la operatia anterioara):

JNPNPNPNP pozitieJPOPOPOPO pozitie

2. Pentru valori fara semn (naturale)

a) Salt conditionat de (CF=0 AND ZF=0), adica rezultat "mai mare" (> 0) la operatia anterioara:

JAAAA pozitieJNBENBENBENBE pozitie

b) Salt conditionat de CF=0, adica rezultat "mai mare sau egal" (>= 0) la operatia anterioara:

JAEAEAEAE pozitieJNBNBNBNB pozitie

c) Salt conditionat de CF=1, adica rezultat "mai mic" (< 0) la operatia anterioara:

JBBBB pozitieJNAENAENAENAE pozitie

Page 94: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

3

d) Salt conditionat de (CF=1 AND ZF=1), adica rezultat "mai mic sau egal" (<= 0) la operatiaanterioara:

JBEBEBEBE pozitieJNANANANA pozitie

3. Pentru valori cu semn (intregi):

a) Salt conditionat de (SF=OF AND ZF=0), adica rezultat "mai mare" (> 0) la operatia anterioara:

JGGGG pozitieJNLENLENLENLE pozitie

b) Salt conditionat de SF=OF, adica rezultat "mai mare sau egal" (>= 0) la operatia anterioara:

JGEGEGEGE pozitieJNLNLNLNL pozitie

c) Salt conditionat de SF<>OF, adica rezultat "mai mic" (< 0) la operatia anterioara:

JLLLL pozitieJNGENGENGENGE pozitie

d) Salt conditionat de (SF<>OF AND ZF=1), adica rezultat "mai mic sau egal" (<= 0) la operatiaanterioara:

JLELELELE pozitieJNGNGNGNG pozitie

e) Salt conditionat de SF=1 (rezultat negativ la operatia anterioara):

JSSSS pozitie

f) Salt conditionat de SF=0 (rezultat pozitiv la operatia anterioara):

JNSNSNSNS pozitie

g) Salt conditionat de OF=1 (depasire de gama la operatia anterioara):

JOOOO pozitie

h) Salt conditionat de OF=0 (fara depasire de gama la operatia anterioara):

JNONONONO pozitie

Page 95: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

4

Cu ajutorul acestor instructiuni se pot realiza structuri de decizie in program, asemanatoareinstructiunilor if din limbajele de nivel inalt (C, Pascal, etc.).

Exemplul 1 (calculul modulului unei sume):ADD AX, DX ; sumaJGE et1 ; daca AX >= 0, ramane neschimbatNEG 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 nulADD AX, DX ; sumaJZ et1 ; daca AX = 0 saltMOV rez, 'N' ; altfel rezultat nenul

et1: ; instructiunea urmatoare

2. Instructiuni de test2. Instructiuni de test2. Instructiuni de test2. Instructiuni de test

In cazul in care se doreste testarea unor conditii pentru a fi utilizate intr-o instructiune de saltconditionat fara ca rezultatul testului sa fie incarcat intr-un registru sau stocat in memorie se potutiliza instructiunile de test CMP si TEST.

Aceste instructiuni au un efect asemanator cu instructiunile SUB respectiv AND, dar fara carezultatul 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, BXEfect:

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.

Page 96: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

5

2. Instructiunea TEST are forma:

TEST operand1, operand2

si efectul: operand1 AND operand2

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

TEST AX, BXEfect:

0101 0101 0101 0101 B = 5555 H x0110 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 iterative3. Instructiuni iterative3. Instructiuni iterative3. Instructiuni iterative

3.1. Instructiunea iterativa neconditionata3.1. Instructiunea iterativa neconditionata3.1. Instructiunea iterativa neconditionata3.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 saunumarator). Daca continutul acestuia nu devine 0 dupa decrementare, efectul este identicinstructiunii JMP. Daca in urma decrementarii CX devine 0, instructiunea LOOP nu are nici un altefect.

Astfel, efectul instructiunii:

LOOP etich

este echivalent cu al secventei:

DEC CXJNZ etich

Instructiunea LOOP se utilizeaza intr-o structura de program tipica:

Page 97: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

6

MOV CX, nretich: ... ; secventa de

... ; instructiuniLOOP etich

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):

MOV AX, cuvXOR DX, DXMOV CX, 16 ; pentru CX de la 16 la 1

et1: SHL AX, 1 ; CF = MSbJNC et2 ; daca CF = 0 saltINC DX ; altfel (CF=0), numara un 1

et2: LOOP et1 ; repeta

3.2. Instructiuni iterative conditionate3.2. Instructiuni iterative conditionate3.2. Instructiuni iterative conditionate3.2. Instructiuni iterative conditionate

Instructiunile iterative conditionate au formele:

a) Bucla conditionata de rezultat nul (ZF=1):

LOOPZZZZ etichsau LOOPEEEE etich

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

LOOPNZNZNZNZ etichsau LOOPNENENENE etich

Structura tipica in care se utilizeaza instructiunea LOOPconditie:

MOV CX, nretich: ... ; secventa de

... ; instructiuniLOOPconditie etich

permite executia repetata de cel multcel multcel multcel mult nr ori a secventei de instructiuni, deoarece repetarea esteintrerupta in cazul in care conditie este indeplinita.

Astfel, efectul instructiunii:

Page 98: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

7

LOOPconditie etich

este echivalent cu al secventei:

Jconditie etichDEC CXJNZ etich

Exemplu (cautarea bitului 0 cel mai semnificativ in cuv, ciclu cu test final cu dubla conditie):

MOV CX, 15 ; CX = pozitia bitului testatMOV BX, 1 ; BX = masca

et: 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 programe4. Exemple de programe4. Exemple de programe4. Exemple de programe

1. Program de calcul al produsului a doua cifre hexazecimale citite de la tastatura si deafisare a rezultatului pe ecran.

data segmentnumeprog 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:datacod segmentstart:

mov ax, datamov ds, axmov dx, offset numeprog ; afisare sir caracteremov ah, 9 ; (nume program)int 21hmov dx, offset cifra1 ; afisare sir caracteremov ah, 9 ; (mesaj cifra 1)int 21h

mov ah, 1 ; citire caracter cu ecou pe ecran

Page 99: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

8

int 21h ; (citire prima cifra in al)

; conversie caracter -> cifracmp al, 30h ; caracter >= '0' ?jl er1 ; nu => eroarecmp al, 3ah ; da => caracter <= '9' ?jnl urm11 ; nu => continuare cu urmatorul testsub al, 30h ; da => ajustare (caracterul e cifra 0..9)jmp sf1 ; salt la sfirsit conversie

urm11:cmp al, 41h ; caracter >= 'A' ?jl er1 ; nu => eroarecmp al, 47h ; da => litera <= 'F' ?jnl urm12 ; nu => continuare cu urmatorul testsub al, 37h ; da => ajustare (caracterul e cifra A..F)jmp sf1 ; salt la sfirsit conversie

urm12:cmp al, 61h ; caracter >= 'a' ?jl er1 ; nu => eroarecmp al, 67h ; da => litera <= 'f' ?jnl er1 ; nu => continuare cu urmatorul testsub 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 ; afisare sir caracteremov ah, 9 ; (mesaj cifra 2)int 21hmov ah, 1 ; citire caracter cu ecou pe ecranint 21h ; (citire a doua cifra in al)

; conversie caracter -> cifracmp al, 30h ; caracter >= '0' ?jl er2 ; nu => eroarecmp al, 3ah ; da => caracter <= '9' ?jnl urm21 ; nu => continuare cu urmatorul testsub al, 30h ; da => ajustare (caracterul e cifra 0..9)jmp sf2 ; salt la sfirsit conversie

urm21:cmp al, 41h ; caracter >= 'A' ?jl er2 ; nu => eroarecmp al, 47h ; da => litera <= 'F' ?jnl urm22 ; nu => continuare cu urmatorul testsub al, 37h ; da => ajustare (caracterul e cifra A..F)jmp sf2 ; salt la sfirsit conversie

Page 100: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

9

urm22:cmp al, 61h ; caracter >= 'a' ?jl er2 ; nu => eroarecmp al, 67h ; da => litera <= 'f' ?jnl er2 ; nu => continuare cu urmatorul testsub 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-zismov dl, bl ; cifra 1mul dl ; (cifra 2 in al)mov bx, ax ; rezultat in bx

mov dx, offset rezultatmov ah, 9 ; afisare sir caractereint 21h ; (mesaj rezultat)

mov cl, 4 ; separare cifra 1mov al, bl

shr al, cl

; conversie cifra 1 -> caractercmp al, 0ah ; cifra = 0..9 ?jl urm3 ; da => ajustare (urm4)cmp al, 10h ; nu => cifra = A..F ?jnl er3add al, 37h ; da => ajustarejmp sf3

urm3:add al, 30hjmp sf3

er3: sf3: mov dl, al

mov ah, 2 ; afisare cifra 1int 21h

mov al, bl ; separare cifra 2 shl al, cl shr al, cl

; conversie cifra 2 -> caractercmp al, 0ah ; cifra = 0..9 ?jl urm4 ; da => ajustare (urm4)

Page 101: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

10

cmp al, 10h ; nu => cifra = A..F ?jnl er4add al, 37h ; da => ajustarejmp sf4

urm4:add al, 30hjmp sf4

er4: sf4: mov dl, al

mov ah, 2 ; afisare cifra 2int 21h

mov ah, 8 ; citire caracter fara ecou pe ecranint 21h ; (Enter)mov ah, 4ch ; exitint 21hcod endsend start

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

DATA SEGMENTvect DW 8766 H, 5678 H, 0ABC3 H, 0B44 H

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV BX, OFFSET VECTMOV 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] cuMOV [BX], AX ; vect[2]

inord:MOV AH, 4CHINT 21H

COD ENDSEND START

3. Program de ordonare crescatoare a 2 valori dintr-un sir de intregi cu semn.

DATA SEGMENT

Page 102: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

11

vect DW 8766 H, 5678 H, 0ABC3 H, 0B44 HDATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV BX, OFFSET VECTMOV 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] cuMOV [BX], AX ; vect[2]

inord:MOV AH, 4CHINT 21H

COD ENDSEND 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 SEGMENTcuv DW 0e360 H

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV AX, cuv ; incarca cuv in registrul acumulatorXOR 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 pozitieJNC et2 ; salt daca nu s-a obtinut transportINC DX ; incrementare contor daca a fost CF

et2: LOOP et1 ; repetaMOV AH, 4CHINT 21H

COD ENDSEND START

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

Page 103: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

12

DATA SEGMENTcuv DW 0e360 H

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV AX, cuv ; incarca cuv in registrul acumulatorXOR DX, DX ; resetare contor (DX = 0)MOV CX, 17 ; pentru CX de la 17 la 1

et1: DEC CX ; CX = CX - 1JCXZ et2 ; daca CX = 0 salt la et2 (gata)SHL AX, 1 ; altfel deplasare la stanga cu o pozitieJNC et1 ; salt daca nu s-a obtinut transportINC DX ; incrementare contor daca a fost CFJMP et1 ; repeta

et2: MOV AH, 4CHINT 21H

COD ENDSEND START

c) Varianta prin bitul Carry, ciclu cu test final, numar variabil de iteratii:

DATA SEGMENTcuv DW 0e360 H

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV AX, cuv ; incarca cuv in registrul acumulatorXOR DX, DX ; resetare contor (DX = 0)

et1: SHL AX, 1 ; repeta deplasare la stanga cu o pozitieJNC et2 ; salt daca nu s-a obtinut transportINC DX ; incrementare contor daca a fost CF

et2: OR AX, AX ; testeaza AXJNZ et1 ; pana cand AX=0MOV AH, 4CHINT 21H

COD ENDSEND START

Page 104: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

13

d) Varianta prin bitul Carry, ciclu cu test initial, numar variabil de iteratii:

DATA SEGMENTcuv DW 0e360 H

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV AX, cuv ; incarca cuv in registrul acumulatorXOR DX, DX ; resetare contor (DX = 0)

et1: JCXZ et2 ; cat timp CX <> 0SHL CX, 1 ; deplasare la stanga cu o pozitieJNC et1 ; salt daca nu s-a obtinut transportINC DX ; incrementare contor daca a fost CFJMP et1 ; repeta

et2: MOV AH, 4CHINT 21H

COD ENDSEND START

e) Varianta prin mascare si numar fix de iteratii:

DATA SEGMENTcuv DW 0e360 H

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV AX, cuv ; incarca cuv in registrul acumulatorXOR DX, DX ; resetare contor (DX = 0)MOV BX, 1 ; masca = BX = 1

et1: TEST cuv, BX ; repeta test (cuv AND BX)JZ et2INC 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 transportMOV AH, 4CHINT 21H

COD ENDSEND START

Page 105: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 4

14

5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. 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 denumere 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 denumere intregi intr-un fisier cu numele AP43.ASM.

4. Se concepe si editeaza un program de deplasare in dubla precizie a continutului uneivariabile v cu N (=6) pozitii catre dreapta intr-un fisier cu numele AP44.ASM (vezi si lucrarea nr. 3,$4.1.).

6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii

1. Sa se scrie un program care sa calculeze suma in dubla precizie a doua siruri de dublu-cuvinte din memorie.

2. Sa se scrie un program care sa citeasca o cifra N de la tastatura, sa calculeze N! (Nfactorial) si sa afiseze rezultatul pe ecran.

3. Sa se scrie un program care sa citeasca de la tastatura valorile x, y si z, sa calculezeexpresia: E = x! + 0,25y + 5z si sa afiseze rezultatul pe ecran.

7. Intrebari7. Intrebari7. Intrebari7. 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 secventa1altfel secventa2

Page 106: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

1

Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Programarea microprocesorului Intel 8086.Instructiuni pentru lucrul cu siruriInstructiuni pentru lucrul cu siruriInstructiuni pentru lucrul cu siruriInstructiuni pentru lucrul cu siruri

Scopul lucrăriiScopul lucrăriiScopul lucrăriiScopul lucrării

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

1. Instructiuni pentru lucrul cu siruri1. Instructiuni pentru lucrul cu siruri1. Instructiuni pentru lucrul cu siruri1. Instructiuni pentru lucrul cu siruri

Sirurile de date sunt declarate in limbajul de asamblare al microprocesorului Intel 8086 cuajutorul 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 estevorba de 19 octeti reprezentand codurile ASCII ale literelor unui text.

Pentru realizarea unei operatii in mod repetat asupra elementelor consecutive ale unui sir saua doua siruri se utilizeaza instructiuni specializate numite instructiuni pentru lucrul cu siruri.

1.1. Instructiuni pentru lucrul cu siruri cu operanzi expliciti1.1. Instructiuni pentru lucrul cu siruri cu operanzi expliciti1.1. Instructiuni pentru lucrul cu siruri cu operanzi expliciti1.1. Instructiuni pentru lucrul cu siruri cu operanzi expliciti

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

1.2. Instructiuni pentru lucrul cu siruri cu operanzi impliciti1.2. Instructiuni pentru lucrul cu siruri cu operanzi impliciti1.2. Instructiuni pentru lucrul cu siruri cu operanzi impliciti1.2. Instructiuni pentru lucrul cu siruri cu operanzi impliciti

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

Page 107: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

2

Deoarece sirurile de date se afla in memorie s-au stabilit perechi de registre utilizate implicitpentru adresarea datelor curente ale sirurilor. Daca sirul este de tip destinatie, atunci perechea deregistre de adresare este ES : DI. Daca sirul este de tip sursa, atunci perechea de registre de adresareeste DS : SI. De aceea registrul DI poarta numele Destination Index iar registrul SI numele SourceIndex.

Daca datele sunt octeti (Bytes), instructiunea utilizata va avea terminatia BBBB iar daca datelesunt cuvinte (Words), instructiunea utilizata va avea terminatia WWWW.

Actualizarea registrelor de adresare difera in functie de doi parametrii:- tipul datelor sirului (exprimat in numar de octeti: 1 1 1 1 pentru Byte si 2 2 2 2 pentru Word), care

determina valoarea absoluta a actualizarii (modulul actualizarii),- valoarea flag-ului Direction (DF, 1111 pentru sens direct si 0 0 0 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 semnulactualizarii registrelor SI si/sau DI.

Daca notam cu a actualizarea:- pentru o instructiune care lucreaza cu octeti (terminata cu BBBB),

- daca DF = 0: a = + 1+ 1+ 1+ 1- daca DF = 1: a = - 1- 1- 1- 1

- pentru o instructiune care lucreaza cu cuvinte (terminata cu WWWW),- daca DF = 0: a = + 2+ 2+ 2+ 2- daca DF = 1: a = - 2- 2- 2- 2

Instructiunile pentru lucrul cu siruri se pot imparti in instructiuni de transfer si instructiuni decomparatie. 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 siruri2. Instructiuni de transfer pentru lucrul cu siruri2. Instructiuni de transfer pentru lucrul cu siruri2. Instructiuni de transfer pentru lucrul cu siruri

2.1. Instructiunile MOVS, LODS, STOS2.1. Instructiunile MOVS, LODS, STOS2.1. Instructiunile MOVS, LODS, STOS2.1. Instructiunile MOVS, LODS, STOS

Instructiunile de transfer pentru lucrul cu siruri cu operanzi expliciti sunt:- transfer intre doua siruri:

MOVSSIRDEST, SIRSURSA

- transfer din sir in registru (incarcare registru):

LODS AL, SIRSURSA sauLODS AX, SIRSURSA

- transfer din registru in sir (stocare in memorie):

Page 108: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

3

STOS SIRDEST, AL sauSTOS 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 - transfer curent sir - sirSI <-- SI + 1 - actualizare index sir sursaDI <-- DI + 1 - actualizare index sir dest.

b) Daca DF = 1:ES : DI <-- DS : SI - transfer curent sir - sirSI <-- SI - 1 - actualizare index sir sursaDI <-- DI - 1 - actualizare index sir dest.

Page 109: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

4

2. Efectul instructiunii MOVSW este:

a) Daca DF = 0:

ES:DI,DI+1 <-- DS:SI,SI+1 - transfer curent sir-sirSI <-- SI + 2 - actualizare index sir sursaDI <-- DI + 2 - actualizare index sir dest.

b) Daca DF = 1:

ES:DI,DI+1 <-- DS:SI,SI+1 - transfer curent sir-sirSI <-- SI - 2 - actualizare index sir sursaDI <-- DI - 2 - actualizare index sir dest.

3. Efectul instructiunii LODSB este:

a) Daca DF = 0:AL AL AL AL <-- DS : SI - transfer curent sir-acumulatorSI <-- SI + 1 - actualizare index sir sursaDI <-- DI + 1 - actualizare index sir dest.

b) Daca DF = 1:AL AL AL AL <-- DS : SI - transfer curent sir-acumulatorSI <-- SI - 1 - actualizare index sir sursaDI <-- DI - 1 - actualizare index sir dest.

4. Efectul instructiunii LODSW este:

a) Daca DF = 0:AXAXAXAX <-- DS : SI,SI+1 - transfer curent sir-acumulatorSI <-- SI + 2 - actualizare index sir sursaDI <-- DI + 2 - actualizare index sir dest.

b) Daca DF = 1:AX AX AX AX <-- DS : SI,SI+1 - transfer curent sir-acumulatorSI <-- SI - 2 - actualizare index sir sursaDI <-- DI - 2 - actualizare index sir dest.

5. Efectul instructiunii STOSB este:

a) Daca DF = 0:ES : DI <-- ALALALAL - transfer curent acumulator-sirSI <-- SI + 1 - actualizare index sir sursaDI <-- DI + 1 - actualizare index sir dest.

b) Daca DF = 1:

Page 110: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

5

ES : DI <-- ALALALAL - transfer curent acumulator-sirSI <-- SI - 1 - actualizare index sir sursaDI <-- DI - 1 - actualizare index sir dest.

6. Efectul instructiunii STOSW este:

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

b) Daca DF = 1:ES : DI,DI+1 <-- AXAXAXAX - transfer curent acumulator-sirSI <-- SI - 2 - actualizare index sir sursaDI <-- DI - 2 - actualizare index sir dest.

2.2. Prefixul REP2.2. Prefixul REP2.2. Prefixul REP2.2. Prefixul REP

Pentru a reduce timpul de executie in cazul repetarii de N>1 ori a unei instructiuni pentrulucrul cu siruri s-a introdus prefixul REP. Punand acest prefix in fata uneia dintre instructiunilepentru lucrul cu siruri, numita generic instrsir:

REP instrsir

efectul ei devine echivalent cu al secventei:

etich: instrsirLOOP etich

(necesitand preincarcarea in registrul CX a numarului de repetari).

3. Instructiuni de comparatie pentru lucrul cu siruri3. Instructiuni de comparatie pentru lucrul cu siruri3. Instructiuni de comparatie pentru lucrul cu siruri3. Instructiuni de comparatie pentru lucrul cu siruri

3.1. Instructiunile CMPS si SCAS3.1. Instructiunile CMPS si SCAS3.1. Instructiunile CMPS si SCAS3.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:

Page 111: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

6

SCAS SIRDEST, AL sauSCAS 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 esteincarcat intr-un registru sau stocat in memorie). De aceea ele sunt folosite in cazul in care se dorestetestarea unor conditii.

1. Efectul instructiunii CMPSB este:

a) Daca DF = 0:CMP(ES : DI),(DS : SI)- comparatie valori curente sir-sirSI <-- SI + 1 - actualizare index sir sursaDI <-- DI + 1 - actualizare index sir destinatie

b) Daca DF = 1:CMP(ES : DI),(DS : SI)- comparatie valori curente sir-sirSI <-- SI - 1 - actualizare index sir sursaDI <-- 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 + 2DI <-- DI + 2

b) Daca DF = 1:CMP(ES : DI,DI+1),(DS : SI,SI+1)

Page 112: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

7

SI <-- SI - 2DI <-- DI - 2

3. Efectul instructiunii SCASB este:

a) Daca DF = 0:CMP(ES : DI),AL - comparatie valori curente sir-registruSI <-- SI + 1 - actualizare index sir sursaDI <-- DI + 1 - actualizare index sir destinatie

b) Daca DF = 1:CMP(ES : DI), AL - comparatie valori curente sir-registruSI <-- SI - 1 - actualizare index sir sursaDI <-- DI - 1 - actualizare index sir destinatie

4. Efectul instructiunii SCASW este:

a) Daca DF = 0:CMP(ES : DI,DI+1),AXSI <-- SI + 2DI <-- DI + 2

b) Daca DF = 1:CMP(ES : DI,DI+1),AX SI <-- SI - 2DI <-- DI - 2

3.2. Prefixele REPZ, REPE, REPNZ si REPNE3.2. Prefixele REPZ, REPE, REPNZ si REPNE3.2. Prefixele REPZ, REPE, REPNZ si REPNE3.2. Prefixele REPZ, REPE, REPNZ si REPNE

Pentru a reduce timpul de executie in cazul unei repetari de N>1 ori a unei instructiuni decomparatie pentru lucrul cu siruri, se poate folosi unul dintre prefixele: REPZZZZ, REPEEEE, REPNZNZNZNZ,REPNENENENE.

Punand unul dintre aceste prefixe, numit generic REPconditie, in fata uneia dintreinstructiunile de comparatie pentru lucrul cu siruri, numita generic instrsir:

REPconditie instrsir

efectul ei devine echivalent cu al secventei:

etich: instrsirLOOPconditie etich

Page 113: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

8

4. Exemple de programe4. Exemple de programe4. Exemple de programe4. Exemple de programe

4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie4.1. Calcule in dubla precizie

1. Copierea unui sir de octeti sirsursa intr-un alt sir de octeti sirdest:

DATA SEGMENTsirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70Hsirdest DB 8 DUP(?)N EQU 8

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AXCLD ; fortare DI = 0 (sens direct)MOV SI, OFFSET sirsursa ; pregatirea adresei primului

; octet din sirsursaMOV DI, OFFSET sirdest ; pregatirea adresei primului

; octet din sirdestMOV CX, N ; numarul de elemente

; ale sirului sirsursaet: MOVSB ; copiere octet curent

; si actualizare SI si DILOOP et ; repetare de N oriMOV AH, 4CH ; exitINT 21H

COD ENDSEND START

2. Copierea unui sir de cuvinte sirsursa intr-un alt sir de cuvinte sirdest:

DATA SEGMENTsirsursa DW 0, 1000H, 2000H, 3000H, 4000H, 5000Hsirdest DW 6 DUP(?)

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AX

CLD ; fortare DI = 1 (sens invers)

Page 114: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

9

MOV SI, OFFSET sirsursaADD SI, M ; M = 2*(N-1) este deplasarea de

; la primul pana la ultimul; cuvant din sirsursa

MOV DI, OFFSET sirdest ; pregatirea adresei primului; cuvant din sirdest

ADD DI, M ; M = 2*(N-1) este deplasarea de; la primul pana la ultimul; cuvant din sirdest

MOV CX, N ; numarul de elemente; ale sirului sirsursa

et: MOVSW ; copiere cuvint curentLOOP et ; repetare de N oriMOV AH, 4CH ; exitINT 21H

COD ENDSEND START

3. Incarcarea succesiva a octetilor unui sir sirsursa in registrul acumulator AL pentru negareaoctetilor si stocarea lor in sirul sirdest:

DATA SEGMENTsirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70Hsirdest DB 8 DUP(?)N EQU 8

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AXCLD ; fortare DI = 0 (sens direct)MOV SI,OFFSET sirsursaMOV DI, OFFSET sirdestMOV CX, N

et: LODSB ; incarcare octet curent in ALNEG AL ; negare continut ALSTOSB ; stocare continut AL in octet

; curent si actualizare DILOOP et ; repetare de N oriMOV AH, 4CH ; exitINT 21H

COD ENDSEND START

4. Copierea unui sir de cuvinte sirsursa intr-un alt sir de cuvinte sirdest:

Page 115: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

10

DATA SEGMENTsirsursa DW 0, 1000H, 2000H, 3000H, 4000H, 5000Hsirdest DW 6 DUP(?)N EQU 6

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AXCLD ; fortare DI = 0 (sens direct)MOV SI, OFFSET sirsursaMOV DI, OFFSET sirdestMOV CX, NREP MOVSW ; copiere cuvint curent

; repetata de N oriMOV AH, 4CH ; exitINT 21H

COD ENDSEND START

5. Compararea unui sir de octeti sirsursa cu un alt sir de octeti sirdest si semnalarea diferenteilor prin variabila rez:

Varianta 1.

DATA SEGMENTsirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70Hsirdest DB 0, 10H, 20H, 30H, 40H, 50H, 50H, 70HN EQU 8

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AXCLD ; fortare DI = 0 (sens direct)MOV SI, OFFSET sirsursaMOV DI, OFFSET sirdestMOV CX, NMOV rez, 1 ; initializare rez cu 1

; (siruri identice)et1: CMPSB ; comparare octet curent

JE et2 ; continuare daca octetul curent

Page 116: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

11

; este identicMOV rez, 0 ; modificare rez in 0

; (siruri diferite)JMP et3 ; oprire daca octetul curent

; nu este identicet2: LOOP et1 ; repetare de N oriet3: MOV AH, 4CH ; exit

INT 21HCOD ENDS

END START

Varianta 2.

DATA SEGMENTsirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70Hsirdest DB 8 DUP(?)N EQU 8

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AXCLD ; fortare DI = 0 (sens direct)MOV SI, OFFSET sirsursaMOV DI, OFFSET sirdestMOV CX, NMOV 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 sirsursaJE et1 ; continuare daca ultimii octeti comparati

; sunt identiciMOV rez, 0 ; rez = 0 (siruri diferite) daca ultimii

; octeti comparati sunt diferitiet1: MOV AH, 4CH ; exit

INT 21HCOD ENDS

END START

6. Compararea octetilor unui sir de octeti sirdest cu un octet aflat in acumulator sisemnalarea pozitiei primului octet care difera in poz:

Page 117: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

12

DATA SEGMENTsirdest DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70HN EQU 8

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AXCLD ; fortare DI = 0 (sens direct)MOV DI, OFFSET sirdestMOV CX, NREPZ SCASB ; comparare octet curentMOV poz, AL ; stocare pozitie octet care

; diferaMOV AH, 4CH ; exitINT 21H

COD ENDSEND START

7. Compararea cuvintelor unui sir de cuvinte sirdest cu un cuvant aflat in acumulator sisemnalarea pozitiei primului cuvant care este identic in poz:

DATA SEGMENTsirdest DW 0, 1000H, 2000H, 3000H, 4000H, 5000H, 6000HN EQU 7

DATA ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATA ; initializare DSMOV DS, AXCLD ; fortare DI = 0 (sens direct)MOV DI, OFFSET sirdestMOV CX, NREPNZ SCASB ; comparare octet curent MOV poz, AL

; stocare pozitie cuvant identic; cu cel din acumulator

MOV AH, 4CH ; exitINT 21H

COD ENDSEND START

Page 118: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

13

5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. Desfasurarea lucrarii5. Desfasurarea lucrarii

1. Se editeaza urmatorul program de comparare a doua siruri de octeti sir1 si sir2, si desemnalare a diferentei lor prin variabila rez, intr-un fisier cu numele AP51.ASM:

DATA SEGMENTsir1 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 ENDSASSUME CS: COD, DS: DATACOD SEGMENTSTART:

MOV AX, DATAMOV DS, AXMOV CX, SIZE sir1MOV SI, OFFSET sir1MOV DI, OFFSET sir2MOV rez, 'I' ; siruri identiceREPZ CMPSBJCXZ et1MOV rez, 'D' ; siruri diferite

et1:MOV AH, 4CHINT 21H

COD ENDSEND 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 seregaseste intr-un sir de cuvinte sir si sa semnaleze gasirea lui in variabila rez, intr-un fisier cunumele AP52.ASM.

6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii6. Teme si exercitii

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

Page 119: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 5

14

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

7. Intrebari7. Intrebari7. Intrebari7. Intrebari

1. Care sunt perechile de registre utilizate implicit la adresare de instructiunile pentru lucrulcu 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 efectulprefixului REP ?

4. Care sunt asemanarile si care sunt deosebirile intre efectul instructiunii LOOPE si efectulprefixului REPE ?

Page 120: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

1

Conectarea Conectarea Conectarea Conectarea memoriei memoriei memoriei memoriei principaleprincipaleprincipaleprincipalela la la la microprocesorul Intel 8086microprocesorul Intel 8086microprocesorul Intel 8086microprocesorul Intel 8086

Scopul Scopul Scopul Scopul lucrăriilucrăriilucrăriilucrării

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. 1. 1. 1. Interfatarea Interfatarea Interfatarea Interfatarea microprocesorului Intel 8086 cu bus-microprocesorului Intel 8086 cu bus-microprocesorului Intel 8086 cu bus-microprocesorului Intel 8086 cu bus-urile in mod minimurile in mod minimurile in mod minimurile in mod minim

1.1. 1.1. 1.1. 1.1. Interfata Interfata Interfata Interfata microprocesorului Intel 8086 cu bus-microprocesorului Intel 8086 cu bus-microprocesorului Intel 8086 cu bus-microprocesorului Intel 8086 cu bus-urileurileurileurile

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 uneiastfel de UCP cu microprocesorul Intel 8086 (in mod minim) este prezentata in figura 1.

STB OE

LATCHI 8282

DI

AD 0-15

A 16-19

BHE DO

16

ALE

DT/ R

DEN

A

OE

T/R

B 0-7 0-7

M/ IO

RD

WRUCP

I 8086

BUFFERI 8286

16

20A 0-19

D 0-15 (BD)

(BA)BHE

4

8

8

4

INTA

INTR

NMI

(BC)

M/ IO

RD

WR

INTA

INTR

NMI

Vcc

MN/MX

("1")

CLK

READY

RESET

GEN.CEASI 8284A

Vcc

GENERATOR

DE STARI

WAIT

RDYRES

HLDA

HOLD

HLDA

HOLDprotocol cerere-confirmare cedare bus-uri

protocol cerere-confirmare acceptare intr.

mod minim

optional pentrubus de dateincarcat

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) estenecesara folosirea unor buffere pentru date (separatoare de magistrala). Transferul prin buffereste validat de semnalul DEN\ iar sensul transferului este selectat prin semnalul DT/R\.

Page 121: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

2

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 UCPS5 = 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. 1.2. 1.2. 1.2. Ciclurile Ciclurile Ciclurile Ciclurile masina de bus la masina de bus la masina de bus la masina de bus la sisteme cu sisteme cu sisteme cu sisteme cu microprocesor Intel 8086microprocesor Intel 8086microprocesor Intel 8086microprocesor 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 carelogica 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.

Page 122: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

3

Figurile 2 si 3 prezinta formele de unda ale semnalelor care participa la realizareaciclurilor de citire (RD) si de scriere (WR) a datelor/ instructiunilor sau de citire a vectorului deintrerupere (INTA).

CLK

T1 T2 T3 T4TW

A/ D 0-15

ALE

A 0-15 noua adresa memorata de latch de la care se face citirea datelor

momentulinchiderii latch-ului

A 0-15 D 0-15citire date:

RD / INTA comanda citire date

momentuldeschiderii

DT/ R validare sens receptie

DEN validare bus date

BHE, A / S16-19 3-7 BHE , A 16-19S 3-7

WAIT

READY

READY ultimul moment in care se poate facetranzitia in "1" pentru a nu apare T W

UCP inactiva in starea

4anterioara lui T

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

Page 123: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

4

CLK

T1 T2 T3 T4TW

A/ D 0-15

ALE

A 0-15 noua adresa memorata de latch la care se face scrierea datelor

momentulinchiderii latch-ului

A 0-15 D 0-15scriere date:

WR comanda scriere date

momentuldeschiderii

DT/ R validare sens transmisie

DEN validare bus date

BHE, A / S16-19 3-7 BHE , A 16-19S 3-7

WAIT

READY

READY ultimul moment in care se poate facetranzitia in "1" pentru a nu apare T W

UCP inactiva in starea

4anterioara lui T

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

In perioada T1 microprocesorul lanseaza pe liniile A0-19 adresa fizica a locatiei pe carevrea sa o acceseze. Datorita multiplexarii in timp realizata de UCP pe liniile A/D0-15 estenecesara separarea adreselor de date (demultiplexarea) prin memorarea adreselor pe perioadeleT2-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) carevalideaza transferul datelor prin intermediul liniilor A/D0-15 (pe post de D0-15) in perioadeleT3-4.

In perioadele in care coada interna de stocare a instructiunilor (Q) este plina iar unitateainterna 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/D0-15 se genereaza data anterioara (daca ciclul anterior a fost "WR") sau este in impedanta mare(daca ciclul anterior a fost "RD").

1. 1. 1. 1. Decodificarea Decodificarea Decodificarea Decodificarea adreselor adreselor adreselor adreselor memoriei memoriei memoriei memoriei principale principale principale principale si si si si selectia selectia selectia selectia circuitelor de circuitelor de circuitelor de circuitelor de memoriememoriememoriememoriela la la la microprocesorul Intel 8086microprocesorul Intel 8086microprocesorul Intel 8086microprocesorul Intel 8086

Memoria principala in sistemele cu microprocesor (UCP) este realizata cu elementesemiconductoare (ROM, RAM), conectarea acestora facindu-se prin intermediul bus-urilor deadrese (BA), de comenzi (BC) si de date (BD).

Page 124: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

5

Largimea in numar de biti a BA determina capacitatea maxima a memoriei directadresabile de catre UCP. Multimea adreselor posibile este 0 .. 2n-1, daca pe BA exista n linii deadresa A0 .. An-1. Aceasta multime (A) se numeste spatiul adreselor. Multimea locatiilor fizicein 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 intrareamemoriei fizice, dimensiunea acesteia din urma fiind in general mai mica decit dimensiuneaspatiului adreselor. Se poate spune ca operatia de adresare aloca unei adrese din A un elementdin 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) esteD7 , M = A iar fT este functia identica.

D7 D7

MSb LSb

D0 D0

D1 D1

. . .

. . .

. . .

0:

1:

i:

LSB

MSB������ ���

������

:

:

:

2 -1:n

adresa data

b = 8 biti

cuvint de 16 biti

octet

j:

j+1:

(2 -1) 20

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 zoneide cuvint multi-octet.

Microprocesorul Intel 8086 are d = 16 biti pe BD si n = 20 biti pe BA. Spatiul adreselorlui (A) contine 220 elemente.

Organizarea memoriei ca o succesiune de octeti este utilizata si pentru microprocesoarecu 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 pecuvinte de 16 biti dupa caz). Metoda uzuala (folosita si in schema din figura 2) este separareamemoriei fizice in doua "blocuri" sau "bancuri" de memorie, organizate fiecare pe cite 8 biti, laadrese 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 ajutorula doua semnale, unul special generat de catre BC (BHE\ = Bus High Enable) si respectiv cel maiputin semnificativ bit (LSb) al BA (A0). Plasarea bancului "HIGH" la adrese pare sau impare

Page 125: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

6

depinde de conventia utilizata pentru microprocesorul respectiv, la Intel 8086 corespunzindadreselor impare (pentru care A0="1").

In figura 2 este reprezentata divizarea memoriei in cele doua blocuri (HIGH si LOW).

FFFFF: FFFFE:

A 1-19

D 8-15 D 0-7BHE A 0

0:1:2:3:

2K+1: 2K:

0:1:2:3:

2K: 2K+1:

FFFFF: FFFFE:

:

:

:

::

:

1 MB 512KB 512KB

High (superior) Low (inferior)

19

8 8

Spatiul adreselor Subspatiile adreselor

Bancul adreselor impare Bancul adreselor pare

(BDH) (BDI)

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) estecontinutul 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. 2. 2. 2. Exemplu de Exemplu de Exemplu de Exemplu de conectare a conectare a conectare a conectare a memoriei memoriei memoriei memoriei principale la principale la principale la principale la microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului Intel 8086microprocesorului Intel 8086

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

01000 H

F8000 H

FFFFF H

F7FFF H

00FFF H

32K x 8b

4K x 8bRAM

R0M

8CI-(1K x 4b)

4CI-(8K x 8b)

00000 H

zonaneutilizata

(disponibila)1M x 8b

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

Schema electrica de principiu corespunzatoare este data in figura 4.

Page 126: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

7

0 1 2 3 4 5 6 7

ABC E1 E2

E3

M/ IO

NC

DCD74LS138

A 0-12

O 0-7

8

ROM

R/W

BC

BA

BD

CS

O 0-7

8

OE

ROM

RD

0,L0,H

CSROM-0

BHEA 0

13

A 1-13

CSA 0-12

O 0-7

8

ROM

CS

O 0-7

8

OE

ROM

RD

1,H 1,L

BHEA 0

13

A 1-13

CS

WR

0,L0,H

BHEA 0

10

A 1-10

A14-16 A17-19

A 0-9RAM RAM

CS

I/O 0-3

4 4

CS CS

I/O 0-3

I/O 0-3

4 4

I/O 0-3

0 1 2 3 4 5 6 7

ABCE1 E2

E3

NC

DCD

A11-13 A17-19 A14-16M/ IO

R/W

CS

WR

1,L1,H

BHEA 0

10

A 1-10 A 0-9RAM RAM

CS

I/O 0-3

4 4

CS CS

I/O 0-3

I/O 0-3

4 4

I/O 0-3

D 12-15

D 0-3

CSROM-1

CSRAM-0

CSRAM-1

D 8-11

D 4-7

D 12-15

D 0-3

D 8-11

D 4-7

D 8-15

D 0-7

D 8-15

D 0-7

CS

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 aforma "grupuri" de 1Kx8b.

Iesirile ROM si RAM se leaga in paralel la BD, ceea ce impune activarea la un momentdat 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 deselectie 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 (ChipSelect) de selectie a fiecarui CI de memorie. Ambele CI ale unui grup RAM sint validate decatre un semnal provenit de la acelasi circuit OR.

Datorita functiei de decodificare a circuitelor DCD pentru ROM si respectiv pentruRAM, numai o singura iesire este activa la un moment dat, ceea ce asigura activarea unei singurecapsule (grup RAM) de memorie pe fiecare bloc al BD si inactivarea celorlalte. Circuiteleinactivate prezinta impedanta mare la iesire.

Decodificatoarele (DCD) realizeaza functia de translatare fT : A --> M, alocand adreselorlogice 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, respectivA1 .. 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 , respectivAna+1 .. An-1,), care in exemplu sint: A14 .. A19, respectiv A11 .. A19.

Page 127: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

8

Dintre acestea cel mai putin semnificative mo, respectiv ma vor fi necesaredecodificatoarelor 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 deadresa 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 incazul decodificarii numite completa sau neprecizate in cazul decodificarii incomplete. Inexemplu 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) asociateschemei, 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 ........ 1 0 0 ........ 0

1 ........ 1F8000 - FBFFF H CS\ROM-0

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

1 ........ 1FC000 - FFFFF H CS\ROM-1

Tab.2 Tabelul de decodificare al memoriei RAM:

M/IO A19 .. A12 A11 A10 .. A1 Subspatiu adrese Iesire activa

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

1 ........ 100000 - 007FF H CS\RAM-0

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

1 ........ 100800 - 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 seobtine o "multiplicare virtuala" de 2N ori a locatiei).

Multiplicarea virtuala a unei locatii de memorie in spatiul adreselor care apare in cazuldecofdificarii incomplete face ca locatia sa poata fi accesata ("atinsa") la mai multe adresediferite si are dezavantajul pierderii unei cantitati din spatiul adreselor disponibile pentru altecircuite.

Page 128: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

9

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 inselectia circuitelor RAM, atunci pentru a accesa (citi sau scrie) locatia 200 H, de exemplu, s-arputea 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 RAMpeste memoria ROM ar fi aceea in care decodificatorul de RAM ar avea pe intrarea E1\ iesireaunei 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 liniilede 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 fiaccesata utilizind adresele:

200 H, 10200 H, .. , x0200 H, F0200 H

Page 129: Arhitectura Microprocesoarelor Lucrarea de Laborator

ARHITECTURA MICROPROCESOARELORLUCRAREA DE LABORATOR NR. 6

10

3. 3. 3. 3. Desfasurarea Desfasurarea Desfasurarea Desfasurarea lucrariilucrariilucrariilucrarii

1. Se da urmatoarea harta de utilizare a memoriei principale a unui microprocesor Intel8086:

FFFFF H

RAM

R0M

00000 H

zonaneutilizata

(disponibila)1M x 8b

RAM

a) Daca memoria ROM este realizata cu 8 circuite de dimensiune 8Kx8b, iar memoriaRAM cu 4 circuite de dimensiune 16Kx8b, sa se determine dimensiunile zonelor de memorieROM 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 8086ca la pct. 1.

a) Daca memoria ROM are dimensiunea de 128Kx8b si este realizata cu 4 circuite, iarmemoria RAM are dimensiunea de 32Kx8b si este realizata cu 8 circuite, sa se determinedimensiunile 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 8086ca la pct. 1.

a) Daca memoria ROM are dimensiunea de 256Kx8b si este realizata cu circuite dedimensiune 32Kx8b, iar memoria RAM are dimensiunea de 128Kx8b si este realizata cu circuitede 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).