Documente Academic
Documente Profesional
Documente Cultură
ANEXA NR. 1
a x a = a i a+a = a
(idempotena)
a x 0 = 0 i a+1 = 1
(elementele neutre)
a\\ = a
(dubla negaie)
a(a + b) i a + a x b = a
(absorbia)
(a+b)\ = a\ x b\ i (a x b)\ = a\ + b\ (relatiile de Morgan)
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Operaiile x i + pot fi ilustrate cu ajutorul tabelului de adevr:
a
0
0
1
1
b
0
1
0
1
axb
a+b
a\
0
0
0
1
0
1
1
1
1
1
0
0
a2
0
1
0
1
a1 + a2
0
1
1
0
Notaiile utilizate pentru operaiile anterioare sunt: x pentru AND, + pentru OR, + pentru
XOR si \ pentru NOT.
2. Baze de numeratie
Reprezentarea unui numr n baza B este:
(N)B = cn-1 ............ c0 . c-1 ................ c-m
parte ntreag
parte fracionar
unde ci {0, ... , B-1}, i = n-1, ... , -m.
Numrul N scris in baza B ca mai sus, are n baza obisnuita 10 valoarea:
N = cn-1 Bn-1 + ...... + c1 B1 + c0 B0 . c-1 B-1 + c-2 B-2 + ..... + c-m B-m
Valoarea unui numar N scris in baza 10 este de exemplu:
N = zn-1 10n-1 + ...... + z1 101 + z0 100 . z-1 10-1 + z-2 10-2 + ..... + z-m 10-m
Numarul scris N scris in baza 2:
(N)2 = bn-1 ......... b0 . b-1 ............. b-m
are n baza obisnuita 10 valoarea:
N = bn-1 2n-1 + ...... + b1 21 + b0 20 . b-1 2-1 + b-2 2-2 + ..... + b-m 2-m
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Deoarece informatia digitala este memorata sub forma binara, baza de numeratie utilizata
este 2. Cifrele in baza 2 se numesc biti.
Valorile obisnuite din baza 10 trebuie deci echivalate in baza 2 pentru efectuarea unor
calcule. De aceea este importanta cunoasterea echivalentei valorilor zecimale cu valori binare. In
tabelul 1 sunt date echivalentele primelor 32 de valori zecimale intregi in binar.
Tab.1. Echivalenta valorilor zecimale (0..31), binare si hexazecimale
Valoare
Propriu-zisa
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
in baza 10 (zecimala)
Valoare in baza 2
(binara)
Valoare in baza 16
(hexa-zecimala)
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
1 0000
1 0001
1 0010
1 0011
1 0100
1 0101
1 0110
1 0111
1 1000
1 1001
1 1010
1 1011
1 1100
1 1101
1 1110
1 1111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
21
21 + 20
22
22
+ 20
2
1
2 +2
22 + 21 + 20
23
23
+ 20
3
1
2
+2
23
+ 21 + 20
23 + 22
23 + 22
+ 20
3
2
1
2 +2 +2
23 + 22 + 21 + 20
24
24
+ 20
4
1
2
+2
24
+ 21 + 20
4
2
2
+2
24
+ 22
+ 20
24
+ 22 + 21
24
+ 22 + 21 + 20
4
3
2 +2
24 + 23
+ 20
4
3
1
2 +2
+2
24 + 23
+ 21 + 20
4
3
2
2 +2 +2
24 + 23 + 22
+ 20
24 + 23 + 22 + 21
24 + 23 + 22 + 21 + 20
Pe de alta parte, pentru usurinta scrierii valorilor care au un numar mare de cifre binare, se
utilizeaza baza 16. Cifrele in baza 16 se numesc cifre hexa-zecimale, sau mai scurt cifre hexa.
Convenim sa utilizam terminatia B pentru valori binare si terminatia H pentru valori hexazecimale, valorile zecimale fiind scrise obisnuit.
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Conversia unui numr din baza 2 n baza B=2m se efectueaz astfel: se mparte numrul
scris n binar n grupe de cifre de cte m bii i se reprezint fiecare grup printr-o cifr n baza B.
Astfel, deoarece 16 este 24, rezulta ca se pot grupa 4 cifre binare pentru a forma 1 cifra hexazecimala.
Exemplu:
0111 1111 B = 7 F H
=
=
=
in baza 10
Aproximativa
1K
2K
4K
8K
16 K
32 K
64 K
128 K
256 K
512 K
1M
(zecimala)
Ca putere a lui 2
20
21
22
23
24
25
26
27
28
29
210
211
212
213
214
215
216
217
218
219
220
Valoare in baza 2
(binara)
Valoare in baza 16
(hexa-zecimala)
1
10
100
1000
1 000
10 0000
100 0000
1000 0000
1 0000 0000
10 0000 0000
100 0000 0000
1000 0000 0000
1 0000 0000 0000
10 0000 0000 0000
100 0000 0000 0000
1000 0000 0000 0000
1 0000 0000 0000 0000
10 0000 0000 0000 0000
100 0000 0000 0000 0000
1000 0000 0000 0000 0000
1 0000 0000 0000 0000 0000
1
2
4
8
10
20
40
80
100
200
400
800
1000
2000
4000
8000
10000
20000
40000
80000
100000
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Produsul cu 100 = 102 inseamna adaugare a 2 zerouri in partea dreapta sau deplasarea cu 2
cifre la stanga.
Produsul cu 10n in baza 10 inseamna deci deplasarea cu n cifre (pozitii) la stanga.
Tot astfel, in baza 2 produsul cu 2n inseamna deplasarea cu n pozitii (biti) la stanga, iar in
baza 16 produsul cu 16n inseamna deplasarea cu n pozitii (biti) la stanga.
Un caz special: produsul cu 10 H = 10000 B = 16 = 24 este echivalent in baza 16 cu
deplasarea cu 1 pozitie (cifra hexa) catre stanga, iar in baza 2 cu deplasarea cu 4 pozitii (biti) catre
stanga.
Exemplu:
(hexa-zecimal)
3A H x
10
0 H=
_______
3A0
0 H
(binar)
=
=
(zecimal)
0011 1010 B x
1 0000 B
=
__________________
0011 1010 0000 B
=
16
=
58 x
_____
928
E2H+
A1 H
--------(1) 8 3 H
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Transportul apare atunci cand la o operatie de adunare pe n biti valoarea exacta a rezultatului
depaseste n biti, sau cand la o operatie de scadere pe n biti este necesar imprumutul de la al n-1-lea
bit. Daca se neglijeaza transportul, operatiile aritmetice cu valori reprezentate pe n biti pot fi
descrise grafic pe un cerc:
0
2-1
1
n-3
n-1
n-2
n-2
2 +2
n-1
2 +1
n-1
n-1 2 -1
00H
01H 02H
20H
A1H
C0H
40H
E2H
83H
80H
80H
7FH
Fig. 2. Cercul valorilor naturale (intregi fara semn) reprezentabile cu 8 biti pentru exemplul 1
Pentru exemplul 2 anterior (n = 16) acest cerc devine:
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
0000H
FFFFH
0001H 0002H
FFFEH
E641H
2000H
B6A1H
C000H
4000H
9CE2H
8001H 7FFFH
8000H
Fig. 3. Cercul valorilor naturale (intregi fara semn) reprezentabile cu 16 biti pentru exemplul
2
2n.
226+
161
--------387=1x256+131
De asemenea, pe datele din exemplul 2 (n = 16, 2n = 216 = 65536 = 10000H = 1 0000 0000
0000 0000 B) se observa ca:
9CE2HB 6 A1 H
-------------(-1) E 6 4 1 H
4016246753
------------ 03409=-1x65536+62127
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
2 n-1
(multimea
valorilor
reprezentabile
cu n biti)
0
2 n-1 2 n
2 2n -1 2 2n
(multimea numerelor naturale)
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Gama dinamic pentru reprezentarea C1 este +/- (2n-1 - 2-m) (la fel ca n cazul reprezentrii
MS).
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
1) Se adaug 1 la reprezentarea binar n C1 alui (-N).
2) Se scade din 2n-1 valoarea zecimala lui N i apoi se reprezint n binar (ca numr fr
semn).
Exemplu (pentru n = 8 i m = 0):
(103
103)
0110 0111 B
103 C2 =
a) Din C1:
1001 1000 B +
(-103
-103)
-103 C2 =
1B
-----------------1001 1001 B
= 67 H
= 98 H +
1H
--------= 99 H
b) Prin scadere:
(-103
-103)
-103 C2 = 1 0000 0000 B 0110 0111 B
------------------1001 1001 B
= 100 H 67 H
--------= 99 H
= 28 - 103
= 153
Asadar C2 pe 8 biti al valorii zecimale 103 este valoarea zecimala 153 = 256 - 103.
Daca se efectueaza o operatie asupra a doua valori reprezentate in C2 pe n biti rezultatul
exact poate depasi gama de reprezentare pe n biti (adunarea a doua valori pozitive de n biti poate
avea ca rezultat valori negative de n biti iar adunarea a doua valori negative de n biti poate avea ca
rezultat valori pozitive de n biti).
Exemplul 1 (pentru n = 8):
1110 0010 B + E 2 H +
adica: - 1 E H +
1001 0001 B
91H
-6FH
------------------ ------------------(transport = 1) 0111 0011 B
7 3 H (depasire = 1)
-8DH
Pentru interpretarea corecta a rezultatului trebuie semnalata asadar depasirea de gama. Acest
lucru se face printr-un bit indicator numit Overflow Flag (indicator de depasire). Rezultatul obtinut,
73 H, se interpreteaza ca -8D H, valoare care nu poate fi reprezentata pe 8 biti in C2.
Exemplul 2 (pentru n = 16):
1001 1100 1110 0010 B +
9CE2H+
adica: - 6 3 1 E H +
1011 0110 1010 0001 B
B 6 A1 H
-495FH
----------------------------------------------------------(imprumut = 1) 1110 0110 0100 0001 B
5 3 8 3 H (depasire = 1)
+5383H
Reprezentarea in C2 a valorilor intregi de n biti poate fi descrisa grafic ca in figura 5.
10
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
-1
1
n-3
n-2
-2
+
n-1
n-2
n-1
(FFH)
-02H-01H
00H 01H
02H
20H
(depasire)
91H(-67H)
(C0H)
-40H
E2H(-1EH)
(80H)
-7FH
80H 7FH
40H
73H
Fig. 6. Cercul valorilor intregi (cu semn) reprezentabile cu 8 biti pentru exemplul 1
11
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Pentru exemplul 2 anterior (n = 16) acest cerc devine:
0000H
FFFFH
0001H 0002H
FFFEH
E641H
2000H
B6A1H
C000H
4000H
9CE2H
8001H 7FFFH
8000H
Fig. 7. Cercul valorilor intregi (cu semn) reprezentabile cu 16 biti pentru exemplul 2
12
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Tab.3. Echivalenta valorilor de 8 biti fara semn (naturale) cu cele cu semn (intregi)
in diferite moduri de reprezentare (MS, C1, C2)
fara
zecimal
0
1
2
3
4
5
6
...
...
63
64
65
...
...
127
128
129
...
...
191
192
193
...
...
250
251
252
253
254
255
Valoarea
semn a
binar
0000 0000
0000 0001
0000 0010
0000 0011
0000 0100
0000 0101
0000 0110
...
...
0011 1111
0100 0000
0100 0001
...
...
0111 1111
1000 0000
1000 0001
...
...
1011 1111
1100 0000
1100 0001
...
...
1111 1110
1111 1110
1111 1100
1111 1101
1111 1110
1111 1111
numarului in
hexazecimal
00
01
02
03
04
05
06
...
...
3F
40
41
...
...
7F
80
81
...
...
BF
C0
C1
...
...
FA
FB
FC
FD
FE
FF
Valoarea
codului binar
(MS)
0
1
2
3
4
5
6
...
...
63
64
65
...
...
127
0
1
...
...
-63
-64
-65
...
...
-122
-123
-124
-125
-126
-127
13
ARHITECTURA MICROPROCESOARELOR
ANEXA NR. 1
Tab.4. Echivalenta valorilor de 16 biti fara semn (naturale) cu cele cu semn (intregi)
in diferite moduri de reprezentare (MS, C1, C2)
fara
zecimal
0
1
2
3
4
5
6
...
...
16383
16384
16385
...
...
32767
32768
32769
...
...
49151
49152
49153
...
...
65531
65532
65533
65534
65535
65536
Valoarea
semn a numarului
binar
0000 0000 0000 0000
0000 0000 0000 0001
0000 0000 0000 0010
0000 0000 0000 0011
0000 0000 0000 0100
0000 0000 0000 0101
0000 0000 0000 0110
...
...
0011 1111 1111 1111
0100 0000 0000 0000
0100 0000 0000 0001
...
...
0111 1111 1111 1111
1000 0000 0000 0000
1000 0000 0000 0001
...
...
1011 1111 1111 1111
1100 0000 0000 0000
1100 0000 0000 0001
...
...
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1110
1111 1111 1111 1111
in
hexa
0000
0001
0002
0003
0004
0005
0006
...
...
3FFF
4000
4001
...
...
7FFF
8000
8001
...
...
BFFF
C000
C001
...
...
FFFA
FFFB
FFFC
FFFD
FFFE
FFFF
Valoarea
codului binar
(MS)
0
1
2
3
4
5
6
...
...
16383
16384
16385
...
...
32767
0
-1
...
...
- 16383
- 16384
- 16385
...
...
-122
-123
-124
-125
-126
-127
14
=
=
=
=
=
=
registru general
registru general de 8 biti: AL, AH, BL, BH, CL, CH, DL, DH
registru general de 16 biti: AX, BX, CX, DX, SP, BP, SI, DI
bitul n al registrului R
registru acumulator: AL, AH, AX
registru segment: CS, DS, SS, ES
M
M8
M16
M32
Mn
=
=
=
=
=
info
MSb(info)
LSb(info)
etich
= R, M sau D
= cel mai semnificativ bit al valorii info
= cel mai putin semnificativ bit al valorii info
(flag)
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
2. Instructiuni de transfer
2.1. Instructiuni de transfer generale
1. Atribuire (Move)
MOV R, R'
R <-- R'
MOV R, M
R <-- M
MOV M, R
M <-- R
MOV R, D
R <-- D
MOV M, D
M <-- D
MOV SR,R16SR <-- R16 (SR cu exceptia lui CS)
MOV SR,M16
SR <-- M16 (SR cu exceptia lui CS)
MOV R16,SRR16 <-- SR (SR cu exceptia lui CS)
MOV M16,SR
M16 <-- SR (SR cu exceptia lui CS)
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
2. Permutare (Exchange)
XCHG R, R'
R <--> R'
XCHG M
M <--> R
XCHG AX, DX
XCHG TAB [SI][DI+20], AX
PUSH SI
PUSH DS
PUSH VAR2
POP DX
POP ES
POP VAR1
\_ notatie prescurtata:
/ STIVA <-- R16
\_ notatie prescurtata:
/ R16 <-- STIVA
AX, BX
DX, VAR1
TAB [SI][DI], BX
AL, 20H
TAB [SI+2][DI], 1200H
ES, AX
DS, DATASEGBASE
AX, SS
DATASEGBASE, DS
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
A <-- PORT(D8)
A <-- PORT(DX)
IN AL, 0FAH
IN AX, DX
2. Sriere in port
OUT D8, A
OUT DX, A
PORT(D8) <-- A
PORT(DX) <-- A
OUT 44, AX
OUT DX, AL
LAHF
SF,ZF,AF,PF,CF
SAHF
3
Mnemonica
Operatie (efect)
Indicatori afectati
-
Exemplu de instructiune
PUSHF
Tot registrul F
POPF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
ADD
ADD
ADD
ADD
ADD
CX, DX
AL, TAB [SI+1]
[BX], DX
CL, 10H
[SI], 1000H
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
ADC
ADC
ADC
ADC
ADC
CL, DL
AX, TAB
[DI], DL
CX, 1000H
VAR2, 10H
3. Adunare cu 1 (Increment)
INC R
R <-- R + 1
INC M
M <-- M + 1
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
INC CL
INC CNTR
3. Instructiuni aritmetice
3.1. Instructiuni de adunare
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
SUB
SUB
SUB
SUB
SUB
AX, CX
AX, TAB [BX]
DS : TAB [BP], CL
AH, 10H
VAR1, 2
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
SBB
SBB
SBB
SBB
SBB
BX, DX
BH, VAR1
VAR2, CX
CX, 1000H
TAB [SI+2], 4
3. Scadere cu 1 (Decrement)
DEC R
R <-- R + 1
DEC M
M <-- M + 1
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
DEC CL
DEC TAB [SI]
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
NEG AX
NEG TAB [BX+2]
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
OF,SF,ZF,AF,PF,CF
CMP
CMP
CMP
CMP
CMP
AH, CL
AX, VAR1
VAR2, DX
AX, 0
VAR1, 0
5
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
MUL
MUL
MUL
MUL
IMUL
IMUL
IMUL
IMUL
BL
CX
VAR1
TAB [SI]
DH
BX
VAR2
TAB [DI]
nedefiniti
DIV DL
nedefiniti
DIV CX
nedefiniti
DIV VAR1
nedefiniti
DIV VAR2
nedefiniti
IDIV DH
nedefiniti
IDIV BX
6
Mnemonica
IDIV M8
IDIV M16
Operatie (efect)
AL <--AX/M8
AH <-- AX mod R8
AX <--DX,AX/M16
DX <-- DX,AX mod R8
(cit)
(rest)
(cit)
(rest)
Indicatori afectati
Exemplu de instructiune
nedefiniti
nedefiniti
IDIV [DI]
CBW
CWD
NOT AX
NOT VAR1
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
AND
AND
AND
AND
AND
CX, DX
BX, TAB [BX-2]
VAR1, AL
BX, 10H
[BX], 10H
7
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
OR
OR
OR
OR
OR
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
XOR
XOR
XOR
XOR
XOR
BX, AX
BX, [SI]
[DI-4], CX
BL, 3
VAR2, 5
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
CF=0,OF=0,(AF),SF,ZF,PF
TEST
TEST
TEST
TEST
TEST
CH, DL
AX, TAB [DI-2]
[DI], BX
DL, 10
DS : [BP], 1
AL, CH
CL, TAB
VAR1, DH
AX, 100H
DX, 1000H
CF=MSb(R),OF,SF,ZF,(AF),PF
CF=MSb(M), OF,SF,ZF,(AF),PF
CF=R1616-CL sau R816-CL,OF,SF,ZF,(AF),PF
CF=M1616-CL sau M816-CL,OF,SF,ZF,(AF),PF
SHL
SHL
SHL
SHL
AL, 1
VAR1, 1
BX, CL
TAB [SI], CL
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
SAL
SAL
SAL
SAL
AX, 1
VAR2, 1
DX, CL
[SI], CL
CF=LSb(R),OF,SF,ZF,(AF),PF
CF=LSb(M),OF,SF,ZF,(AF),PF
CF=RCL-1,OF,SF,ZF,(AF),PF
CF=MCL-1,OF,SF,ZF,(AF),PF
SHR
SHR
SHR
SHR
BX, 1
[BX], 1
AH, CL
DS : [BP], CL
SAR
SAR
SAR
SAR
CX, 1
[SI], 1
AL, CL
VAR2, CL
CF= MSb(R),OF
CF= MSb(M),OF
CF= R1616-CL sau R816-CL,OF
CF= M1616-CL sau M816-CL,OF
ROL
ROL
ROL
ROL
DL, 1
[DI+2], 1
DH, CL
VAR1, CL
CF= LSb(R),OF
CF= LSb(M),OF
CF= RCL-1,OF
CF= MCL-1,OF
ROR
ROR
ROR
ROR
BX, 1
TAB [BX], 1
AL, CL
[SI] [DI], CL
9
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
CF= MSb(R),OF
CF= M15, OF
CF= R16-CL, OF
CF= M16-CL, OF
RCL
RCL
RCL
RCL
CX, 1
TAB [SI], 1
BL, CL
[SI] [BX], CL
CF= R15, OF
CF= M15, OF
CF= R16-CL,OF
CF= M16-CL,OF
RCR
RCR
RCR
RCR
CL, 1
VAR1, 1
AX, CL
VAR2, CL
10
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
LODS AX,M16
initial SI = EA(M8)
- daca DF=0: AL <-- (SI)
actualizare SI cu 1
- daca DF=1: AL <-- (SI)
actualizare SI cu -1
initial SI = EA(M16)
- daca DF=0: AX <-- (SI+1,SI)
actualizare SI cu 2
- daca DF=1: AX <-- (SI+1,SI)
actualizare SI cu -2
STOS SIRB, AL
STOS SIRW, AX
STOS M16,AX'
initial DI = EA(M8)
- daca DF=0: (DI) <-- AL
actualizare DI cu 1
- daca DF=1: (DI) <-- AL
actualizare DI cu -1
initial DI = EA(M16)
- daca DF=0: (DI+1,DI) <-- AX
actualizare DI cu 2
- daca DF=1: (DI+1,DI) <-- AX
actualizare DI cu -2
11
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
MOVSB
MOVSW
LODSB
LODSW
Exemplu de instructiune
STOSB
STOSW
7. Prefixul de repetare
REP transfsir
transfsir
CX <-- CX-1
- daca CX#0 se reia transfsir
- daca CX=0 se trece la instructiunea urmatoare
REP MOVSB
REP MOVSW
REP STOSB
CF,OF,SF,ZF,AF,PF
Exemplu de instructiune
CMPS SIRW1, SIRW2
13
SCAS AX,M16
initial SI = EA(M8)
- daca DF=0: AL - (SI)
actualizare SI cu 1
- daca DF=1: AL - (SI)
actualizare SI cu -1
initial SI = EA(M16)
- daca DF=0: AX - (SI+1,SI)
actualizare SI cu 2
- daca DF=1: AX - (SI+1,SI)
actualizare SI cu -2
CF,OF,SF,ZF,AF,PF
CF,OF,SF,ZF,AF,PF
Operatie (efect)
Indicatori afectati
CMPSB
Exemplu de instructiune
CMPSW
REPZ compsir
Mnemonica
REPNE compsir
compsir
CX <-- CX-1
- daca (CX#0 si ZF=1) se reia compsir
- daca (CX=0 sau ZF=0) se trece la instructiunea urmatoare
compsir
CX <-- CX-1
- daca (CX#0 si ZF=1) se reia compsir
- daca (CX=0 sau ZF=0) se trece la instructiunea urmatoare
Operatie (efect)
Indicatori afectati
compsir
CX <-- CX-1
- daca (CX#0 si ZF=0) se reia compsir
CMPSW
SCASB
SCASW
REPE CMPSW
REPZ SCASB
Exemplu de instructiune
REPNE CMPSB
15
REPNZ compsir
REPNZ SCASW
JMP ET1
JMP AX
JMP OFFS
JMP ET2
JMP ADRLOG
= salt la etich
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
CALL etich
STIVA <-- IP
IP <-- IP + DEPL(etich)
CALL ET3
CALL CX
CALL OFF
CALL ET FAR
CALL ADRLOGICA
RET
RET 4
Operatie (efect)
Indicatori afectati
-
Exemplu de instructiune
RET
17
RET 8
Conditie de salt
JZ REZNUL
Interpretare conditie
rezultat ALU cu transport
rezultat ALU fara transport
rezultat ALU nul
rezultat ALU nul
rezultat ALU nenul
rezultat ALU nenul
rezultat ALU cu numar par de 1
rezultat ALU cu numar par de 1
rezultat ALU cu numar impar de 1
rezultat ALU cu numar impar de 1
contor nul
Interpretare conditie
(CF=0) si (ZF=0)
(CF=0) si (ZF=0)
(CF=0)
JNB
JB
JNAE
JBE
JNA
etich
etich
etich
etich
etich
(CF=0)
(CF=1)
(CF=1)
(CF=1) sau (ZF=1)
(CF=1) sau (ZF=1)
etich
etich
(SF=0)
(SF=1)
JO
JNO
etich
etich
(OF=1)
(OF=0)
JG
JNLE
JGE
JNL
JL
JNGE
JLE
JNG
etich
etich
etich
etich
etich
etich
etich
etich
(SF=OF) si (ZF=0)
(SF=OF) si (ZF=0)
(SF=OF)
(SF=OF)
(SF<>OF)
(SF<>OF)
(SF<>OF) sau (ZF=1)
(SF<>OF) sau (ZF=1)
Mnemonica
Operatie (efect)
Indicatori afectati
Exemplu de instructiune
LOOP RELUARE
19
LOOPE OPNOU
LOOPZ NOUTEST
LOOPNE REV
LOOPNZ BUCLA1
INT 21H
IRET
Exemplu de instructiune
= transport = 1
CF
STC
20
CF
CLC
CF
CMC
DF
STD
DF
CLD
IF
STI
IF
CLI
UCP intra in starea HALT (din care iese prin: NMI sau RESET sau INTR si IF)
HLT
WAIT
NOP
nici o operatie
21
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Microprocesorul Intel 8086 lucreaza cu date de 16 biti, numite cuvinte de date. Transferurile
intre UE si UI sau intre microprocesor si MP sau IO se fac in general sub forma de cuvinte de date
de 16 biti. De aceea bus-ul intern prin care comunica UE si UI al microprocesorului Intel 8086 este
de 16 biti.
Pentru compatibilitate cu microprocesoarele care lucrau cu date de 8 biti, si Intel 8086 poate
transfera valori sub forma unor octeti (date de 8 biti). De aceea locatiile MP si ale IO sunt octeti.
Microprocesorul Intel 8086 poate lucra cu maximum 1 M octeti de MP, adica poate genera
cel mult 1 M de adrese distincte. Deoarece 1M = 216 , inseamna ca adresele la microprocesorul Intel
8086 sunt reprezentabile cu 20 de biti.
In figura 1 este prezentata schema bloc a unui sistem cu microprocesor I8086.
Microprocesorul Intel 8086 comunica cu exteriorul (MP si IO) prin 3 bus-uri sau magistrale:
- bus-ul de date (BD), care are 16 biti;
- bus-ul de adrese (BA), care are 20 biti;
- bus-ul de comenzi (BC).
microcalculator
microprocesor I8086
UE
date
UIB
= memorie
date, adrese
MP
I/O
date
echipamente
periferice
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Unitate de Executie
UE
Unitate de Interfata
UI
20
16 biti
offset
8 biti
AX
BX
CX
DX
bus intern
AH
BH
CH
DH
DI
SI
BP
SP
16
registre de date
ALU
16
DECODIFICARE
COD OPERATIE
SI COMANDA
20
adresa fizica
16
INTERFATA
16
BUS-URI
busuri externe
4
A16-19
16
AD0-15
BC
instructiuni
comenzi
16
segment
date, comenzi
16 operanzi
16
rezultat
16
16
REGISTRE
TEMPORARE
16
CS
DS
ES
SS
IP
16
registre de adresare
16
16
16
16
AL
BL
CL
DL
1 2 3 4 5 6
8
BA+BD
multiplexate
in timp
reg. Flag-uri
16
2. Registrele temporare (RT), care preiau operanzii de pe bus-ul intern si ii ofera unitatii
ALU. Impreuna cu ALU formeaza un automat RALU.
3. Registrul de flag-uri F (biti indicatori de stare a ultimei operatii ALU), actualizat de catre
ALU.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Unitatea de interfata cu bus-urile (UI) se compune din:
1. Blocul de interfata intre bus-uri, care face toate transferurile la cererea UE:
- cicluri de scriere in MP sau IO (dinspre UCP catre exterior);
- cicluri de citire din MP sau IO (dinspre exterior catre UCP).
2. Coada de asteptare a codurilor de instructiune (Q), care:
- este incarcata cu coduri de instructiune (ciclu FETCH) de catre blocul de interfata atunci
cind UE nu cere transferuri de date;
- este inactiva (UCP executa cicluri inactive de bus) daca este plina si nu se cer transferuri;
- este stearsa complet (resetata) daca instructiunea curenta este de salt.
3. Blocul de calcul al adreselor fizice incluzand:
- registrele segment, care contin componenta sement a adresei locatiei MP accesate;
- registrul indicator al instructiunii curente (IP), care contine componenta offset a adresei
instructiunii curente;
- unitatea de deplasare-adunare pentru calculul adresei fizice din componentele segment si
offset.
1. Registrele de date se deosebesc prin faptul ca jumatatile (de capacitate 8 biti) lor pot fi
accesate (citite sau scrise) separat. Aceasta inseamna ca fiecare registru de date poate fi folosit ca un
registru de 16 biti sau ca 2 registre de 8 biti :
- AX (acumulator) de 16 biti, poate fi accesat ca AH si AL, ambele de 8 biti;
- BX (baza in adresarea datelor) de 16 biti, poate fi accesat ca BH si BL, ambele de 8 biti;
- CX (contor) de 16 biti, poate fi accesat ca CH si CL, ambele de 8 biti;
- DX (date) de 16 biti, poate fi accesat ca DH si DL, ambele de 8 biti.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Registrele de date sunt utilizate in majoritatea instructiunilor aritmetice si logice. Majoritatea
instructiunilor aritmetice utilizeaza in acelasi mod toate registrele.
Exista si instructiuni aritmetice pentru care anumite registre generale au intrebuintari
speciale, prezentate in continuare:
AX
- operatii de intrare/iesire pe 16 biti, implicit in inmultiri si impartiri pe 16 biti;
AL
- operatii de intrare/iesire pe 8 biti, implicit in translatii, aritmetica BCD, inmultiri si
impartiri pe 8 biti;
AH
- implicit in inmultiri si impartiri pe 8 biti;
BX
- operatii cu memoria - adresare indirecta, implicit in translatii;
CX
- implicit in operatii cu siruri sau bucle;
CL
- operatii de deplasare sau rotatie cu mai mult de 1 pozitie;
DX
- operatii de intrare/iesire - adresare indirecta, implicit in inmultiri si impartiri pe 16
biti.
Registrele pointer contin componente offset ale adreselor din stiva (adresele relative in
segmentul de stiva curent). Registrul BP poate fi utilizat si pentru adresarea in cadrul altor segmente.
Registrele index contin componente offset ale adreselor variabilelor (adresele relative in
segmentul de date curent). Ele sunt utilizate ca registre de adresare in instructiunile de transfer sau
prelucrare de siruri de octeti (caractere). In acest ultim caz SI contine adresa relativa curenta a sirului
destinatie in cadrul segmentului de date curent (DS), iar DI contine adresa relativa curenta a sirului
sursa in cadrul segmentului de date suplimentar (ES).
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
- SS (Stack Segment) - contine componenta segment a adreselor datelor din segmentul stiva.
T S Z X A X P X C
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
- ZF (Zero Flag) - indicatorul de zero - este 1 daca rezultatul operatiei a fost zero.
- SF (Sign Flag) - indicatorul de semn - este 1 daca cel mai semnificativ bit al rezultatului
(MSb) este 1, adica in reprezentarea numerelor in complement fata de 2 (C2) rezultatul este negativ
(are semn -).
- OF (Overflow Flag) - indicatorul de depasire aritmetica (a gamei de valori posibil de
reprezentat) - este 1 daca dimensiunea rezultatului depaseste capacitatea locatiei de destinatie si a
fost pierdut un bit (indica la valorile cu semn faptul ca se "altereaza" semnul).
- IF (Interrupt Flag) - indicatorul de validare a intreruperilor - prin valoarea lui 1 permite
UCP sa recunoasca cererile de intrerupere externe mascabile. Prin valoarea 0 intreruperile externe
mascabile vor fi invalidate. Acest indicator nu afecteaza intreruperile interne sau pe cele externe
nemascabile.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
00000H
segmente
de date
(DS=ES=0)
suprapuse
:
:
000FFH
00100H
:
:
10000H
segmente
partial
suprapuse
segment
de stiva
(SS=10H)
:
:
10100H
zona
neacoperita
cu segmente
segmente
disjuncte
:
:
0F0000H
:
:
0FFFFFH
segment
de cod
(CS=F000H)
Adresa fizica este o valoare de 20 biti care identifica unic o locatie din spatiul de adresare.
Adresa fizica poate fi in domeniul 0H ... 0FFFFFH.
Pentru ca programele sa fie relocabile, microprocesorul foloseste insa o adresa logica pentru
a calcula adresa fizica.
Adresa logica consta dintr-o componenta segment de 16 biti si o componenta offset de 16
biti. Din componenta segment microprocesorul poate calcula adresa de baza (de inceput) a
segmentului prin inmultirea cu 10 H = 10000 B.
Adresa fizica se calculeaza adunand la adresa de baza a segmentului componenta offset. De
aceea componenta offset se mai numeste si deplasare, adresa relativa sau adresa efectiva, iar adresa
fizica se mai numeste si adresa absoluta.
Notatia consacrata pentru adresa logica este urmatoarea:
segment : offset
Calculul adresei fizice se face cu formula:
segment * 10 H + offset
8
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
unde: segment * 10 H
este adresa de baza a segmentului,
offset este adresa relativa la baza segmentului:
Deoarece inmultirea cu 10 H = 10000 B este echivalenta cu deplasarea cu o cifra
hexazecimala la stanga, respectiv cu deplasarea cu 4 cifre binare (biti) la stanga, rezulta ca adresa
fizica se calculeaza prin deplasarea cu 4 biti la stanga a segmentului si adunarea cu offset-ul, asa
cum este ilustrat in exemplul din figura 5.
Adresa
logica
1A30H : 0124H
15
0
Segmentul
1 A 3 0
0 1
15
2 4
0
Offset-ul
0 1
Adresa
fizica
1A424H
Baza segmentului
2 4
1 A 4 2 4
Spre memorie
BAZA
SEGMENT
F000H
ADRESA
LOGICA
ADRESA
FIZICA
FFFF0H
BAZA
SEGMENT
FFF0H
OFFSET
FFF0H
F0000H
F0001H
F0002H
F0003H
:
FFFEDH
FFFEEH
FFFEFH
FFFF0H
FFFF1H
FFFF2H
OFFSET
00F0H
Fig. 6. Adresa logica (16 biti + 16 biti) si adresa fizica (20 biti)
Aceeasi locatie poate fi accesata (citita sau scrisa) prin diferite adrese logice. De exemplu,
din adresa logica F000H : FFF0H se calculeaza adresa fizica F000H * 10H + FFF0H = FFFF0H, iar
din adresa logica FFF0H : 00F0H se calculeaza adresa fizica FFF0H *10H + F0H = FFFF0H.
Unitatea de interfata cu magistrala (UI) obtine adresa logica a unei locatii de memorie diferit
in functie de modul de adresare a memoriei.
Structura pe segmente a memoriei UCP Intel 8086 face posibila scrierea unor programe care
sunt independente de pozitia lor in memorie, adica sint relocabile dinamic.
Pentru ca un program sa fie relocabil dinamic trebuie sa fie scris astfel incat sa nu altereze
registrele sale segment si sa nu faca transferuri directe la o locatie in afara segmentului de cod.
Aceasta permite programului sa fie mutat oriunde in memoria disponibila, atita timp cit registrele
segment sunt actualizate cu noua adresa de baza.
9
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
10
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
O alta caracteristica a limbajului de asamblare este faptul ca referintele simbolice (etichete,
variabile) sunt cele ale unor elemente din memorie (corespund unor adrese).
Procesul prin care se ajunge de la punerea unei probleme pe care trebuie sa o rezolve
microprocesorul la crearea unui program care sa indeplineasca corect cerintele acelei probleme se
numeste dezvoltare a acelui program.
11
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
Executia poate fi obtinuta fie ca o comanda data sistemului de operare din linia de comanda,
fie prin lansarea in executie dintr-un mediu specializat. Un astfel de mediu specializat este
depanatorul simbolic, care permite executia instructiune cu instructiune cu urmarirea resurselor
(registre, flag-uri, memorie, adrese, stiva, etc.).
Exemple de programe utilizate in loborator pentru dezvoltarea unui program:
- EDIT
= editor de texte pentru sistemul de operare MS-DOS,
- BC
= mediu de dezvoltare pentru programe scrise in C, C ++, utilizabil ca editor de texte,
- TURBO
= mediu de dezvoltare pentru programe scrise in Pascal, utilizabil ca editor de texte,
- TASM
= asamblor,
- TLINK
= editor de legaturi,
- TD
= depanator simbolic.
12
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
cs:0000 > B83454
mov ax,5434
cs:0003 8ED8
mov ds,ax
cs:0005 A10000
mov ax,[0000]
cs:0008 8B1E0200
mov bx,[0002]
cs:000C 03060400
add ax,[0004]
cs:0010 A30800
mov [0008],ax
cs:0013
131E0600
adc
bx,[0006]
cs:0017
891E0A00
mov [000A],bx
cs:001B B44C
mov ah,4C
cs:001D CD21
int
21
ds:0000 CD 20 FF 9F 00 9A F0 FE ds:0008 1D F0 E0 01 45 1B AA 01 - _ E _ _
ds:0010 45 1B 89 02 A0 15 12 07 E _ _ _ _
ds:0018 01 01 01 00 02 FF FF FF _ __ _
F1-Help
F2-Bkpt
F3-Mod
F4-Here
F5-Zoom
F6-Next
F7-Trace
F8-Step
F1
F2
F3
F4
F5
F6
F7
F8
ax 0000
c=0
bx 0000
z=0
cx 0000
s=0
dx 0000
o=0
si 0000
p=0
di 0000
a=0
bp 0000
i= 1
sp 0000
d=0
ds 5424
ss 5434
cs 5435
ip 0000
ss:0002 0000
ss:0000 > A286
F9-Run
F10-Menu
F9
F10
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 1
5. Desfurarea lucrrii
1. Se studiaza arhitectura microprocesorului Intel 8086.
2. Se porneste calculatorul si se intra in contul LAPSTn (n este numarul calculatorului). Se
lanseaza in executie depanatorul simbolic TD cu comanda:
TD
3. Se studiaza comenzile sale si se experimenteaza utilizarea lor.
6. Teme si exercitii
1. Sa se calculeze adresele fizice corespunzatoare urmatoarelor adrese logice:
a) 1205H : 709H,
b) ABCDH : 89ABH,
c) FFF0H : 0FFH,
d) 3333H : 4444H,
e) 8000H : 8000H.
2. Sa se calculeze componentele offset corespunzatoare urmatoarelor adrese fizice (se
cunoaste componenta segment: 2000H):
a) 20002H,
b) 20010H,
c) 20300H,
d) 24000H,
e) 2FFFFH.
3. Sa se calculeze componentele segment corespunzatoare urmatoarelor adrese fizice (se
cunoaste componenta offset: 400H):
a) 10400H,
b) B0400H,
c) 30800H,
d) CDE00H,
e) FFFF0H.
2400H:
4. Care dintre urmatoarele adrese fizice apartin segmentului care are componenta segment
a) 33FFFH,
b) 23000H,
c) 27890H,
d) 33000H,
e) 34000H.
14
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
1.2. Structura unui program in limbaj de asamblare pentru microprocesorul Intel 8086
Un exemplu de program in limbaj de asamblare pentru microprocesorul Intel 8086 este dat in
continuare. Programul efectueaza suma a N=5:
DSEG
SEGMENT
; segmentul de date
1
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
TAB
TABW
REZ
ZERO
LABEL BYTE
; eticheta TAB
DW 5 DUP(7000H) ; sirul de cuvinte (tabloul) TABW
DB ? , ? , ? , ?; sirul de octeti (tabloul) REZ
EQU 0
; constanta ZERO
DSEG
ENDS
STIVA
SEGMENT
DW 40 DUP(?)
LABEL WORD
ENDS
VIRF
STIVA
CSEG SEGMENT
; segment de stiva
; eticheta VIRF
; segment de cod (program)
; sfarsitul programului
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
adresa minima = 00000H:
TAB = TABW :
00000H:
0 0
7 0
0 0
DS
7 0
0 0
7 0
0 0
7 0
0 0
segment
de date
7 0
0 0
7 0
x x
REZ :
3 0
x x
0 2
STIVA:
0 0
STIVA:
SS
:
:
segment
de stiva
VIRF:
SP
final
VIRF:
IP
initial
7 0
0 0
x x
x x
SP initial
0 0
7 0
0 0
7 0
0 0
7 0
0 0
REZ :
TABW :
CS
START:
:
START:
:
segment
de cod
IP
final
b.
Fig. 1. Harta memoriei asociata programului de adunare a N = 5 numere de 16 biti din memorie, cu rezultat pe 32 de biti.
a. Configuratia initiala:
b. Configuratia finala:
AX = 0, DX = 0, CX = 5, BP = 10
REZ = XXXX H : XXXX H
AX = 3000H, DX =0002H, CX = 0, BP = 0
REZ = 0002 H : 3000 H = 23000H = 5 * 7000H
| Eticheta: |
Codul operatiei
(mnemonica)
| ;Comentariu |
3
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
unde intre | | sunt cuprinse elementele optionale.
Cimpul eticheta este facultativ si reprezinta numele simbolic al adresei din memorie la care
se afla codul numeric al unei instructiuni.
Mnemonica codului de operatie este numele simbolic al instructiunii.
Cimpul operanzi poate contine doi operanzi, unul sau nici unul, in functie de tipul
instructiunii. Operanzii pot fi datele asupra carora actioneaza instructiunea, adrese sau alte
informatii auxiliare.
Comentariul este optional. El serveste doar la marirea inteligibilitatii programului. La
asamblare textul comentariului este ignorat de catre asamblor.
Exemplu:
ADD AX, DS: TABW [BP]
Asamblorul utilizeaza registrul BP pentru a calcula adresa efectiva TABW + BP, necesara
pentru obtinerea adresei fizice din adresa logica segment (DS) : offset (TABW + BP).
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
c. TYPE genereaza (returneaza) numarul de octeti ai unui element al variabilei careia i se
aplica (1 pentru octeti, 2 pentru cuvinte si 4 pentru dublu-cuvinte).
Exemplu:
SUB BP, TYPE TABW
Asamblorul inlocuieste TYPE TABW cu 2.
d. LENGTH genereaza (returneaza) numarul de elemente pe care le are variabila careia i se
aplica (lungimea, ex. LENGTH TABW = 5).
Exemplu:
MOV CX, LENGTH TABW
Asamblorul inlocuieste LENGTH TABW cu 5.
e. SIZE genereaza (returneaza) numarul de octeti alocat unei variabile (dimensiunea in
octeti). Se observa ca TYPE*LENGTH = SIZE.
Exemplu:
MOV BP, SIZE TABW
Asamblorul inlocuieste SIZE TABW cu 2*5 = 10.
f. HIGH si LOW genereaza (returneaza) octetul cel mai semnificativ (MSB), respectiv cel
mai putin semnificativ (LSB) al unei expresii.
Asocierile implicite (subintelese) ale registrelor utilizate pentru adresare: BX, SI, DI, SP, BP
si IP cu registrele segment, ca si posibilitatile utilizarii operatorului : pentru a modifica explicit
aceste asocieri sunt date in tabelul 1.
5
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Tab.1. Asocierile implicite si explicite ale registrelor segment si offset
Tip operatie
Registru segment
implicit
Registre segment
utilizabile explicit
Sursa offset-ului
CS
IP
SS
SP
DS
ES, SS, CS
EA (memorie)
DS
ES, SS, CS
SI
ES
DI
SS
DS, ES, CS
EA (memorie)
Incarcarea codurilor
instructiunilor in coada
Q
Operatii cu stiva
Transferuri date, cu
exceptiile:
- Siruri sursa
- Siruri destinatie
- Registrul BP
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
declara sfirsitul segmentului de date DSEG,
STIVA ENDS
declara sfirsitul segmentului de stiva STIVA,
CSEG ENDS
declara sfirsitul segmentului de cod CSEG.
c. Directiva ASSUME - informeaza TASM asupra registrelor de segment prin care vor fi
accesate segmentele logice definite anterior prin directiva SEGMENT (adresele de baza ale
segmentelor logice).
Exemplu:
ASSUME CS: CSEG, DS: DSEG, SS: STIVA, ES: DSEG
informeaza asamblorul ca segmentele CSEG, STIVA si DSEG vor avea adresele de baza incarcate
in CS, SS, DS si ES.
2. Directiva EQU permite declararea constantelor. Constantele astfel declarate sunt inlocuite
cu numere propriu-zise in momentul asamblarii. Pentru ele nu se aloca spatiu de memorie.
Exemplu:
ZERO EQU 0
Asamblorul inlocuieste in program constanta ZERO cu valoarea numerica 0.
3. Pentru declararea variabilelor se utilizeaza urmatoarele directive:
a. Directiva DB (Define Byte) declara octeti sau siruri de octeti.
Exemplu:
REZ DB ? , ? , ? , ?
declara o variabila REZ de tip sir de octeti formata din 4 octeti neinitializati
b. Directiva DW (Define Word) declara cuvinte sau siruri de cuvinte.
Exemple:
TABW DW 5 DUP(7000H)
declara o variabila TABW de tip sir de cuvinte formata din 5 cuvinte identice initializate cu 7000H
DW 40 DUP(?)
declara un sir de 40 de cuvinte neinitializate fara nume (simpla alocare)
c. Directiva DD (Define Double-word) declara dublu-cuvinte sau siruri de dublu-cuvinte.
Variabilele sint definite ca rezidente la o anumita adresa relativa (offset) in cadrul unui
anumit segment si sunt caracterizate de tipul datelor.
Se observa ca pentru rezervarea memoriei variabilelor neinitializate se utilizeaza operatorul:
? = rezervare zona de memorie pentru variabila neinitializata
iar pentru precizarea valorilor multiple ale variabilelor se utilizeaza operatorul:
7
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Etichetele sunt (ca si variabilele) nume simbolice de adrese. Ele sunt caracterizate de un
anumit offset in cadul unui segment.
In general etichetele identifica instructiunile. In acest caz etichetele pot fi referite in alte
instructiuni pentru executarea salturilor in program. Daca referirile la o eticheta sunt facute in cadrul
segmentului in care ea este definita ("home segment") atunci se spune ca ea are atributul NEAR. O
eticheta poate fi referita intr-o instructiune a altui segment logic daca poarta atributul FAR.
Atributele etichetelor se stabilesc la definirea acestora.
Pentru declararea etichetelor in segmentul de program (etichete adrese de instructiuni) se
utilizeaza si operatorul:
:
Exemple:
START:
declara eticheta de inceput a codului executabil
NEXT:
declara eticheta NEXT utilizata pentru iteratii
5. Directiva END,
END utilizata pentru declararea sfarsitului de program (cod).
Exemplu:
END START
indica asamblorului ca programul inceput la eticheta START se sfarseste.
6. Directiva RECORD,
RECORD utilizata pentru definirea inregistrarilor de date. Formatul declaratiei
de definire a unei inregistrari este:
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
CHIPS RECORD RAM:7, EPROM:4, ROM:5
defineste o inregistrare cu 16 biti formata din 3 campuri cu numele RAM, EPROM si ROM avand
lungimile de 7, 4, si respectiv 5 biti.
Exemplul 2:
CHIPS RECORD RAM:7=4, EPROM:4=2, ROM:5=0
defineste o inregistrare cu 16 biti formata din 3 campuri cu numele RAM, EPROM si ROM avand
lungimile de 7, 4, si respectiv 5 biti, cu precizarea valorilor initiale ale campurilor.
7. Directiva STRUCT
STRUCT, utilizata pentru definirea structurilor. Formatul declaratiei de definire
a unei structuri este:
nume_structura
STRUCT
nume_structura
ENDS
unde:
numele campurilor (nume_camp, ...) sunt unice;
|,... | indica repetarea optionala a lui nume_camp {DB | DW | DD} expresie
Exemplu:
PROCES
STRUCT
STARE
DB
VAL_CRT
DW
PROCES
ENDS
0
?
2. Instructiuni de transfer
Instructiunile de transfer intre registre sau intre un registru si memorie realizeaza operatiile
de atribuire (copiere) si de permutare. Operatii de transfer pot fi realizate si intre registre si porturi.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Exemplu:
MOV AX, BX
copiaza in registrul AX valoarea continuta in registrul BX
3. Instructiuni aritmetice
Instructiunile aritmetice ale microprocesorului Intel 8086 utilizeaza 1 sau 2 operanzi.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
si efectul:
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Valori in urma executiei instructiunii: BX = C000H, CF = 1 (imprumut).
AX = AL * operand
DX, AX = AX * operand
AX = AL * operand
DX, AX = AX * operand
AL = AX / operand (catul)
AH = AX MOD operand
(restul)
- pentru operanzi de 16 biti:
AX = DX, AX / operand
DX = DX, AX MOD operand
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
IDIV operand
si efectul:
AL = AX / operand
AH = AX MOD operand
AX = DX, AX / operand
DX = DX, AX MOD operand
operand = operand + 1
operand = operand - 1
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
NEG operand
si efectul:
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
Valori in urma executiei instructiunii: BX = 8000H, CF = 1 (transport).
Exemplul 5 (initial CX = 4000H):
NEG CX
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 0100 0000 0000 0000 B
= 4000 H
-------------------------------------------------(CF = 1) 1100 0000 0000 0000 B
= C000 H
Valori in urma executiei instructiunii: CX = C000H, CF = 1 (transport).
Exemplul 6 (initial DX = 0C000H):
NEG DX
Efect:
(0000 0000 0000 0000 B
= 0000 H)
- 1100 0000 0000 0000 B
= C000 H
-------------------------------------------------(CF = 1) 0100 0000 0000 0000 B
= 4000 H
Valori in urma executiei instructiunii: DX = 4000H, CF = 1 (transport).
4. Exemple de programe
4.1. Calcule in dubla precizie
Rolul principal al instructiunilor de adunare cu transport si scadere cu imprumut este acela
de a permite efectuarea calculelor in dubla precizie (pe 32 biti).
1. Adunarea a doua valori de 32 biti - perechile de registre (AX, BX), respectiv (CX, DX):
Initial: AX = 7FFFH, BX = 8000H, CX = 4000H si DX = 0C000H.
ADD BX, DX; adunarea LSW
ADC AX, CX
; adunarea MSW
Efectul secventei este:
AX BX +
15
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
CX DX
-----------AX BX
adica:
0111 1111 1111 1111
1000 0000 0000 0000 B
= 7FFF 8000 H +
0100 0000 0000 0000
1100 0000 0000 0000 B
= 4000 C000 H
(CF = 1)
-------------------------------------------------------------------------------------------(CF = 0) 1100 0000 0000 0000
0100 0000 0000 0000 B
= C000 4000 H
In urma executiei secventei: AX = C000H, BX = 4000H, CF = 0 (rezultat C000 4000 H).
2. Scaderea a doua valori de 32 biti - perechile de registre (AX, BX), respectiv (CX, DX):
Initial: AX = 7FFFH, BX = 8000H, CX = 4000H si DX = 0C000H.
SUB BX, DX ; scaderea LSW
SBB AX, CX ; scaderea MSW
Efectul secventei este:
AX BX CX DX
-----------AX BX
adica:
Valori in urma executiei instructiunii: AX = 3FFEH, BX = C000H, CF = 0 (rezultat 3FFE C000 H).
3. Calculul sumei in dubla precizie a variabilelor de tip cuvant a si b. Rezultatul este plasat in
varibila c.
DAT SEGMENT
a dw 0a46fh
b dw 0dc89h
c dw ?, ?
16
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
DAT ENDS
ASSUME CS: COD, DS: DAT
COD SEGMENT
START:
MOV AX, DAT
MOV DS, AX
mov ax, a
mov dx, 0
; initializari
add ax, b
adc dx, 0
mov c, ax
mov [c+2], dx
; memorare rezultat
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
int
21h
mov ah, 1
int 21h
sub
mov
al, 20h
bl, al
mov
dl, bl
mov ah, 2
int 21h
mov
int
mov
int
cod
end
ah, 8
21h
ah, 4ch
21h
ends
start
; afisare caracter
; (litera mare)
; citire caracter fara ecou pe
; ecran (Enter)
; exit
2. Program de transformare a unui caracter litera mare citit de la tastatura in caracter litera
mica afisat pe ecran.
data segment
numeprog
db 25 dup(0ah),'Transformare caracter$'
citire
db 2 dup(0ah),0dh,' Introduceti litera mare $'
afisare
db 2 dup(0ah),0dh,' Litera mica este: $'
data ends
assume cs:cod, ds:data
cod segment
start:
mov ax, data
mov ds, ax
mov dx, offset numeprog ; afisare sir caractere
mov ah, 9
; (nume program)
int 21h
mov dx, offset citire
mov ah, 9
int 21h
mov
ah, 1
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
int
21h
add
al, 20h
; conversie litera mare -> litera mica
mov
bl, al
mov dx, offset afisare
; afisare sir caractere
mov ah, 9
; (mesaj afisare)
int 21h
mov
dl, bl
mov ah, 2
int 21h
; afisare caracter
; (litera mica)
mov ah, 8
int 21h
; exit
5. Desfasurarea lucrarii
1. Se deschide un editor de texte (Borland C cu comanda BC, Turbo Pascal cu comanda
TURBO, etc.).
a) Se editeaza urmatorul textul urmatorului program (exceptand comentariile):
DATA SEGMENT
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV
MOV
MOV
MOV
AX, 7FFFH
BX, 8000H
CX, 4000H
DX, C000H
ADD BX, DX
; initializare DS
; initializari registre de date
; adunarea LSW
19
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
ADC AX, CX
; adunarea MSW
; exit
COD ENDS
END START
b) Se salveaza fisierul editat cu numele AP21.ASM. Se iese din editor (cu comanda [ Alt ] X)
si se da comanda:
DIR AP21.*
urmarindu-se efectul.
c) Se realizeaza asamblarea fisierului editat cu comanda:
TASM AP21
Se urmaresc mesajele de pe ecran si se corecteaza eventualele erori (reintrand in editor).
Se da comanda:
DIR AP21.*
si se urmareste efectul.
d) Se realizeaza editarea de legaturi cu comanda:
TLINK AP21
Se urmaresc mesajele de pe ecran si se corecteaza eventualele erori.
Se da comanda:
DIR AP21.*
si se urmareste efectul.
e) Se dau succesiv comenzile:
TYPE AP21.ASM
TYPE AP21.MAP
TYPE AP21.OBJ
TYPE AP21.EXE
Se analizeaza efectele.
f) Se lanseaza in executie depanatorul simbolic cu comanda:
TD AP21
Se executa pas cu pas programul (apasand tasta F7) urmarindu-se in special continuturile
registrelor AX, BX, CX, DX si a flagului Carry (CF).
20
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
2. Se editeaza programul de transformare a unui caracter litera mica citit de la tastatura in
caracter litera mare afisat pe ecran (vezi $4.2.) intr-un fisier cu numele AP22.ASM.
Se parcurg etapele 1.a) ... 1.f) pentru acest program si se lanseaza in executie programul
AP22.EXE.
3. Se editeaza programul de transformare a unui caracter litera mare citit de la tastatura in
caracter litera mica afisat pe ecran (vezi $4.2.) intr-un fisier cu numele AP23.ASM.
Se parcurg etapele 1.a) ... 1.f) pentru acest program si se lanseaza in executie programul
AP23.EXE.
6. Teme si exercitii
1. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a calcula suma a
doua cuvinte, aflate in registrele AX si DX, folosind numai registrele de tip octet (AH, AL, BH, BL,
CH, CL, DH, DL).
2. Sa se scrie un program care sa transforme caracterele 'a', ..., 'f' citite de la tastatura in
valorile 10, ..., 15.
3. Sa se scrie un program care sa transforme caracterele 'A', ..., 'F' citite de la tastatura in
valorile 10, ..., 15.
4. Sa se scrie un program care sa citeasca de la tastatura valorile 10, ..., 15 (doua cifre
succesive), sa le transforme in caracterele 'A', ..., 'F' si sa le afiseze pe ecran.
7. Intrebari
1. Care sunt tipurile operanzilor instructiunilor microprocesorului Intel 8086 ?
2. Care sunt modurile de adresare a memoriei ?
3. Care sunt modurile de adresare a porturilor ?
4. Care este diferenta intre negarea aritmetica (NEG) si negarea logica (NOT) ?
5. Care este diferenta intre deplasarea aritmetica la dreapta (SAR) si deplasarea logica la
dreapta (SHR) ?
6. Care este diferenta intre deplasarea logica si rotatia fara CF ?
5. Ce sunt directivele asamblorului TASM ?
6. Care sunt directivele pentru specificarea segmentelor ?
21
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 2
7. Care sunt directivele pentru declararea constantelor si variabilelor?
8. Care sunt diferentele intre constante si variabile ?
9. Cum se definesc inregistrarile de date ?
10. Cum se definesc structurile ?
22
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Operanzii din registre permit, datorita plasarii lor interne, ca instructiunile care ii utilizeaza
sa fie executate mai rapid, nemaifiind necesare transferuri cu memoria sau porturile. Registrele (de 8
sau 16 biti) pot fi operanzi sursa, operanzi destinatie sau operanzi sursa si destinatie.
Operanzii de tip imediat sunt date constante de 8 sau 16 biti continute in codul instructiunii,
dupa codul operatiei. Accesul la acesti operanzi este destul de rapid, deoarece ei sunt incarcati in
coada de instructiuni de catre unitatea de interfata odata cu instructiunea. Limitarile operanzilor de
tip imediat se datoreaza faptului ca ei pot fi doar valori constante si pot servi doar ca operanzi sursa.
Operanzii din memorie sunt accesati mai lent, deoarece sunt necesare: mai intai calculul
adresei efective a operandului (EA = offset-ul), apoi calculul adresei fizice si in final transferul lor.
Formula generala de calcul pentru EA (offset) este:
EA = (BX / BP)* + (SI / DI)* + (D8 / D16)*
unde: * indica un termen optional, iar
/ separa variantele unui termen.
Observatie: spatiul de adrese al porturilor este 0...FFFFH (64ko).
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Operandul este in memoria principala (MP), la offset-ul aflat in registru de baza (BX, BP)
sau index (SI, DI) specificat in codul instructiunii, in codul operatiei.
Exemplul 1. In instructiunea:
ADD AX, [BX]
al doilea operand este perechea de octeti (cuvantul) din memoria principala, din segmentul curent de
date (specificat de DS), aflat la offset-ul continut in registrul BX.
Exemplul 2. In instructiunea:
ADD [SI], AL
primul operand este octetul din MP, din segmentul de date curent (specificat de DS), aflat la offsetul continut in registrul SI.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
ADD AX, [BX] [ SI]
al doilea operand este cuvantul din MP, din segmentul de date curent, aflat la offset-ul egal cu suma
continuturilor registrelor BX si SI.
2. Instructiuni logice
4
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
si efectul:
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Valoare in urma executiei instructiunii: DI = 0000H.
Exemplul 3 (initial AX = 7FFFH):
NOT AX
Efect:
0111 1111 1111 1111 B
= 7FFF H \
-------------------------------------------------1000 0000 0000 0000 B
= 8000 H
Valoare in urma executiei instructiunii: AX = 8000H.
Exemplul 4 (initial BX = 8000H):
NOT BX
Efect:
1000 0000 0000 0000 B
= 8000 H \
-------------------------------------------------0111 0111 0111 0111 B
= 7FFF H
Valoare in urma executiei instructiunii: BX = 7FFFH.
Exemplul 5 (initial CX = 4000H):
NOT CX
Efect:
0100 0000 0000 0000 B
= 4000 H \
-------------------------------------------------1100 0000 0000 0000 B
= C000 H
Valoare in urma executiei instructiunii: CX = C000H.
Exemplul 6 (initial DX = 0C000H):
NOT DX
Efect:
1100 0000 0000 0000 B
= C000 H \
-------------------------------------------------0011 1111 1111 1111 B
= 3FFF H
Valoare in urma executiei instructiunii: DX = 3FFFH.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
sau
SHL operand, CL
respectiv
1
= AAAA H (<-----)
1010 1010 1010 1010 B
-----------------------------------------------------------0101 0101 0101 0100
0B
=5554H
(CL)=4
= AAAA H (<-----)
1010 1010 1010 1010 B
-----------------------------------------------------------1010 1010 1010 0000 B
= AAA0 H
Se observa ca deplasarea logica la stanga cu n pozitii are acelasi efect cu inmultirea cu 2n.
Astfel, pentru primul exemplu avem (n = 1, 2n = 21 = 2):
8
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
AAAA H * 2 H = 1 5 5 5 4 H
iar pentru al doilea (n = 4, 2n = 24 = 16 = 10 H):
AAAA H * 10 H = AAAA0 H
Se observa de asemenea ca in primul caz rezultatul corect este continut in CF (1) si AX
(5554H), pe cand in al doilea caz se pierd primii biti ai rezultatului.
2. Instructiunea de deplasare logica la dreapta are forma:
SHR operand, 1
si efectul:
sau
SHR operand, CL
respectiv
1
1010 1010 1010 1010 B
= AAAA H (----->)
-----------------------------------------------------------0101 0101 0101 0101 B
=5555H
(CL)=4
1010 1010 1010 1010 B
= AAAA H (----->)
-----------------------------------------------------------0000 1010 1010 1010 B
= 0AAA H
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
AAAA H : 2 H = 5 5 5 5 H
iar pentru al doilea (n = 4, 2n = 24 = 16 = 10 H):
AAAA H : 10 H = AAA H
sau
SAL operand, CL
respectiv
1
= AAAA H (<-----)
1010 1010 1010 1010 B
----------------------------------------------------------0101 0101 0101 0100
0B
= 5554H
(CL)=4
= AAAA H (<-----)
1010 1010 1010 1010 B
-----------------------------------------------------------1010 1010 1010 0000 B
= AAA 0 H
10
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
si efectul:
sau
SAR operand, CL
respectiv
1
= AAAA H (----->)
1010 1010 1010 1010 B
-----------------------------------------------------------1101 0101 0101 0101 B
= D5 5 5 H
(CL)=4
1010 1010 1010 1010 B
= AAAA H (----->)
-----------------------------------------------------------1111 1010 1010 1010 B
= FAAA H
sau
ROL operand, CL
respectiv
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
------------------------------------------------------------------0101 0101 0101 0101
1B
= 5555H
Valori in urma executiei instructiunii: AX = 5555H, CF = 1.
Exemplul 2 (initial AX = AAAAH si CL = 4):
ROL AX, CL
Efect:
1010 1010 1010 1010 B
= AAAA H (rot. stg. cu CL)
---------------------------------------------------------------------1010 1010 1010 1010 B
= AAAA H
Valori in urma executiei instructiunii: AX = AAAAH, CF = 0.
sau
RCL operand, CL
respectiv
12
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Valori in urma executiei instructiunii: AX = 5554H, CF = 1.
Exemplul 3 (initial AX = AAAAH, CL = 4 si CF = 1):
RCL AX, CL
Efect:
(CF = 1) 1010 1010 1010 1010 B
= AAAA H (rot. stg. cu CL)
---------------------------------------------------------------= AAAD H
(CF = 0) 1010 1010 1010 1101 B
Valori in urma executiei instructiunii: AX = AAADH, CF = 0.
Exemplul 4 (initial AX = AAAAH, CL = 4 si CF = 0):
RCL AX, CL
Efect:
= AAAA H (rot. stg. cu CL)
(CF = 0) 1010 1010 1010 1010 B
---------------------------------------------------------------------(CF = 0) 1010 1010 1010 0101 B
= AAA5 H
Valori in urma executiei instructiunii: AX = AAA5H, CF = 0.
3. Instructiunile de rotatie la dreapta fara CF au forma:
ROR operand, 1
si efectul:
sau
ROR operand, CL
respectiv
Efect:
1010 1010 1010 1010
0B
= AAAA H (rot. dr. cu 1)
------------------------------------------------------------------0101 0101 0101 0101 B
=5555H
13
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Valori in urma executiei instructiunii: AX = 5555H, CF = 0.
Exemplul 2 (initial AX = AAAAH si CL = 4):
ROR AX, CL
Efect:
1010 1010 1010 1010 B
= AAAA H (rot. dr. cu CL)
------------------------------------------------------------------1010 1010 1010 1010 B
= AAAA H
Valori in urma executiei instructiunii: AX = AAAAH, CF = 1.
sau
RCR operand, CL
respectiv
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
Exemplul 3 (initial AX = AAAAH, CL = 4 si CF = 1):
RCR AX, CL
Efect:
1010 1010 1010 1010 (CF = 1) B = AAAA H (rot. dr. cu CL)
--------------------------------------------------------------------------0101 1010 1010 1101 (CF = 1) B = 5AAA H
Valori in urma executiei instructiunii: AX = 5AAAH, CF = 1.
Exemplul 4 (initial AX = AAAAH, CL = 4 si CF = 0):
RCR AX, CL
Efect:
1010 1010 1010 1010 (CF = 0) B = AAAA H (rot. dr. cu CL)
-------------------------------------------------------1010 1010 1010 0101 (CF = 1) B = AAAA H
Valori in urma executiei instructiunii: AX = AAAAH, CF = 1.
4. Exemple de programe
4.1. Calcule in dubla precizie
Rolul principal al bitului de transport in instructiunile de deplasare si rotatie este acela de a
permite efectuarea calculelor in dubla precizie (pe 32 biti).
1. Deplasarea cu o pozitie la stanga a unei valori de 32 biti - perechea de registre (AX, BX):
Initial: AX = AAAAH si BX = 8888H.
SHL AX, 1
SHL BX, 1
ADC AX, 0
; deplasarea MSW
; deplasarea LSW
; adunarea bitului CF la LSW
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
2. Deplasarea cu o pozitie la dreapta a unei valori de 32 biti - perechea de registre (AX, BX):
Initial: AX = AAAAH si BX = 8888H.
SHR BX, 1
SHR AX, 1
ADC DX, 0
MOV CL, 15
SHL DX, CL
ADD BX, DX
;
;
;
;
;
;
deplasarea LSW
deplasarea MSW
adunarea bitului CF la DX
pregatire deplasare 15 biti
deplasare CF pe pozitia MSb
adunarea bitului CF la MSW
; rotirea MSW
; rotirea (LSW,CF)
; adunarea la MSW a bitului CF
; obtinut prin rotirea lui BX
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
ADC DX, 0
ROR DX, 1
ADD AX, DX
;
;
;
;
;
; initializari
; prima deplasare
; a doua deplasare
17
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
cod
end
mov ds:[bp], ax
mov ds:[bp+2], bx
mov ah, 4ch
int 21h
ends
st
; stocare rezultat
; copiere x in AX
; copiere x in y (y = x)
; calcul 2x
; adunare 2x la y (y = x+2x = 3x)
; calcul 4x
; adunare 4x la y (y = x+2x+4x = 7x)
2. Program de calcul al produsului unei variabile x cu valoarea 0,75 (=3/4). Rezultatul plasat
in memorie in variabila y.
data segment
x dw 120h
y dw ?
data ends
assume cs: cod, ds: data
cod
segment
st:
mov ax, data
mov ds, ax
; Varianta 1
18
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
mov ax, x
shr ax, 1
mov y, ax
shr
ax, 1
add y, ax
; Varianta 2
mov ax, x
mov y, ax
shr ax, 1
shr
ax, 1
sub y, ax
mov ah, 4ch
int 21h
cod
ends
end
st
; copiere x in AX
; calcul x/2
; copiere x/2 in y (y = x/2)
; calcul x/4
; adunare x/4 la y (y =x/2+x/4= 3x/4)
; copiere x in AX
; copiere x in y (y = x)
; calcul x/2
; calcul x/4
; scadere x/4 din y (y =x-x/4= 3x/4)
5. Desfasurarea lucrarii
1. Se editeaza programul de calcul al produsului unei variabile x cu valoarea 7 (vezi $4.2.)
intr-un fisier cu numele AP31.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
2. Se concepe si editeaza un program de calcul al produsului unei variabile z cu valoarea
3,25 intr-un fisier cu numele AP32.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
3. Se concepe si editeaza un program de calcul al expresiei e = (2x + 1)(x/2 - 1) intr-un fisier
cu numele AP33.ASM.
6. Teme si exercitii
1. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a deplasa la
stanga cu 5 pozitii un cuvint din memorie folosind numai registrele de tip octet (AH, AL, BH, BL,
CH, CL, DH, DL).
2. Sa se scrie un program care sa utilizeze calculul in dubla precizie pentru a roti catre
dreapta cu 5 pozitii un cuvint din memorie folosind numai registrele de tip octet (AH, AL, BH, BL,
CH, CL, DH, DL).
19
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 3
7. Intrebari
1. Care sunt tipurile de operanzi ai instructiunilor microprocesorului Intel 8086 ?
2. Care sunt modurile de adresare a memoriei principale ?
3. Care sunt modurile de adresare a porturilor ?
4. Care este diferenta intre negatia logica (NOT) si cea aritmetica (NEG) ?
5. Care este diferenta intre deplasarea logica la dreapta (SHR) si cea aritmetica (SAR) ?
6. Care este diferenta intre deplasarile logice si rotatiile fara CF ?
7. Care este diferenta intre rotatiile fara CF si rotatiile cu CF ?
20
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
1. Instructiuni de salt
Instructiunile de salt pot fi de salt neconditionat si de salt conditionat.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
b) Salt conditionat de CF=1 (transport la operatia anterioara):
JC
C pozitie
c) Salt conditionat de CF=0 (fara transport la operatia anterioara):
JNC
NC pozitie
d) Salt conditionat de ZF=1 (rezultat zero la operatia anterioara):
JE
E pozitie
JZ
Z pozitie
e) Salt conditionat de ZF=0 (rezultat nenul la operatia anterioara):
JNE
NE pozitie
JNZ
NZ pozitie
f) Salt conditionat de PF=1 (rezultat par la operatia anterioara):
JP
P pozitie
JPE
PE pozitie
g) Salt conditionat de PF=0 (rezultat impar la operatia anterioara):
JNP
NP pozitie
JPO
PO pozitie
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
d) Salt conditionat de (CF=1 AND ZF=1), adica rezultat "mai mic sau egal" (<= 0) la operatia
anterioara:
JBE
BE pozitie
JNA
NA pozitie
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
Cu ajutorul acestor instructiuni se pot realiza structuri de decizie in program, asemanatoare
instructiunilor if din limbajele de nivel inalt (C, Pascal, etc.).
Exemplul 1 (calculul modulului unei sume):
ADD AX, DX
; suma
JGE et1
; daca AX >= 0, ramane neschimbat
NEG AX
; altfel AX = - AX
et1:
MOV rez, AX
; variabila rez ia valoarea AX
Exemplul 2 (indicarea prin 'O" rezultatul nul si prin 'N' rezultatul nenul al unei sume):
MOV rez, 'O' ; rezultat presupus nul
ADD AX, DX
; suma
JZ
et1
; daca AX = 0 salt
MOV rez, 'N' ; altfel rezultat nenul
et1:
; instructiunea urmatoare
2. Instructiuni de test
In cazul in care se doreste testarea unor conditii pentru a fi utilizate intr-o instructiune de salt
conditionat fara ca rezultatul testului sa fie incarcat intr-un registru sau stocat in memorie se pot
utiliza instructiunile de test CMP si TEST.
Aceste instructiuni au un efect asemanator cu instructiunile SUB respectiv AND, dar fara ca
rezultatul sa fie incarcat intr-un registru sau stocat in memorie.
operand1 - operand2
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
3. Instructiuni iterative
3.1. Instructiunea iterativa neconditionata
Instructiunea iterativa simpla are forma:
LOOP pozitie
unde pozitie poate fi o eticheta, un registru, o variabila, etc.
Prima operatie efectuata in acest caz este decrementarea registrului CX (contor sau
numarator). Daca continutul acestuia nu devine 0 dupa decrementare, efectul este identic
instructiunii JMP. Daca in urma decrementarii CX devine 0, instructiunea LOOP nu are nici un alt
efect.
Astfel, efectul instructiunii:
LOOP etich
este echivalent cu al secventei:
DEC CX
JNZ etich
Instructiunea LOOP se utilizeaza intr-o structura de program tipica:
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
MOV CX, nr
etich: ...
...
LOOP etich
; secventa de
; instructiuni
et1:
et2:
sau
sau
etich: ...
...
LOOPconditie etich
; secventa de
; instructiuni
permite executia repetata de cel mult nr ori a secventei de instructiuni, deoarece repetarea este
intrerupta in cazul in care conditie este indeplinita.
Astfel, efectul instructiunii:
6
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
LOOPconditie etich
este echivalent cu al secventei:
Jconditie etich
DEC CX
JNZ etich
Exemplu (cautarea bitului 0 cel mai semnificativ in cuv, ciclu cu test final cu dubla conditie):
et:
4. Exemple de programe
1. Program de calcul al produsului a doua cifre hexazecimale citite de la tastatura si de
afisare a rezultatului pe ecran.
data segment
numeprog
db 25 dup(0ah),'Calculul produsului a doua valori $'
cifra1
db 2 dup(0ah),0dh,' Prima valoare: $'
cifra2
db 2 dup(0ah),0dh,' A doua valoare: $'
eroarecifra
db 2 dup(0ah),0dh,' Valorile nu sunt cifre hexa ! $'
rezultat
db 2 dup(0ah),0dh,' Rezultatul: $'
data ends
assume cs:cod, ds:data
cod segment
start:
mov ax, data
mov ds, ax
mov dx, offset numeprog ; afisare sir caractere
mov ah, 9
; (nume program)
int 21h
mov dx, offset cifra1
; afisare sir caractere
mov ah, 9
; (mesaj cifra 1)
int 21h
mov
ah, 1
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
int
21h
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
urm22:cmp al, 61h
; caracter >= 'a' ?
jl er2
; nu => eroare
cmp al, 67h
; da => litera <= 'f' ?
jnl er2
; nu => continuare cu urmatorul test
sub al, 57h ; da => ajustare (caracterul e cifra a..f)
jmp sf2
er2:mov dx, offset eroarecifra
mov ah, 9
; afisare sir caractere
int 21h
; (mesaj eroare)
sf2:
; calcul propriu-zis
mov dl, bl
mul dl
mov bx, ax
mov dx, offset rezultat
mov ah, 9
int 21h
mov cl, 4
mov
al, bl
shr al, cl
; cifra 1
; (cifra 2 in al)
; rezultat in bx
; afisare sir caractere
; (mesaj rezultat)
; separare cifra 1
mov
al, cl
al, cl
al, bl
; separare cifra 2
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
cmp al, 10h
jnl er4
add al, 37h
jmp sf4
urm4:add al, 30h
jmp sf4
er4:
sf4:
mov dl, al
mov ah, 2
int 21h
mov
int
mov
int
cod
end
ah, 8
21h
ah, 4ch
21h
ends
start
; afisare cifra 2
; citire caracter fara ecou pe ecran
; (Enter)
; exit
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
vect DW 8766 H, 5678 H, 0ABC3 H, 0B44 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET VECT
MOV AX, [BX]
; AX ia valoarea vect[0]
CMP AX, [BX+2]
; AX (vect[0]) e comparat cu vect[2]
JL inord
; daca vect[0] < vect[1] atunci sunt
; in ordine crescatoare (salt)
XCHG AX, [BX+2]
; altfel se permuta vect[0] cu
MOV [BX], AX
; vect[2]
inord:MOV AH, 4CH
INT 21H
COD ENDS
END START
4. Program de calcul al numarului de biti egali cu 1 din cuvintul cuv in registrul DX.
a) Varianta prin bitul Carry, ciclu cu test final, numar fix = 16 iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
MOV CX, 16
; pentru CX de la 16 la 1
et1:
SHL AX, 1
; deplasare la stanga cu o pozitie
JNC et2
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
et2:
LOOP et1
; repeta
MOV AH, 4CH
INT 21H
COD ENDS
END START
b) Varianta prin bitul Carry, ciclu cu test initial, numar fix de iteratii:
11
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
MOV CX, 17
; pentru CX de la 17 la 1
et1:
DEC CX
; CX = CX - 1
JCXZ et2
; daca CX = 0 salt la et2 (gata)
SHL AX, 1
; altfel deplasare la stanga cu o pozitie
JNC et1
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
JMP et1
; repeta
et2: MOV AH, 4CH
INT 21H
COD ENDS
END START
c) Varianta prin bitul Carry, ciclu cu test final, numar variabil de iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
et1:
SHL AX, 1
; repeta deplasare la stanga cu o pozitie
JNC et2
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
et2: OR AX, AX
; testeaza AX
JNZ et1
; pana cand AX=0
MOV AH, 4CH
INT 21H
COD ENDS
END START
12
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
d) Varianta prin bitul Carry, ciclu cu test initial, numar variabil de iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
et1:
JCXZ et2
; cat timp CX <> 0
SHL CX, 1
; deplasare la stanga cu o pozitie
JNC et1
; salt daca nu s-a obtinut transport
INC DX
; incrementare contor daca a fost CF
JMP et1
; repeta
et2:
MOV AH, 4CH
INT 21H
COD ENDS
END START
e) Varianta prin mascare si numar fix de iteratii:
DATA SEGMENT
cuv
DW 0e360 H
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, cuv
; incarca cuv in registrul acumulator
XOR DX, DX
; resetare contor (DX = 0)
MOV BX, 1
; masca = BX = 1
et1: TEST cuv, BX
; repeta test (cuv AND BX)
JZ et2
INC DX
; daca rezultatul testului e nenul, s-a
; gasit un 1 si se incrementeaza contorul
et2: SHL BX, 1
; deplasarea mastii cu o pozitie la stg.
JNC et1
; salt daca a fost transport
MOV AH, 4CH
INT 21H
COD ENDS
END START
13
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 4
5. Desfasurarea lucrarii
1. Se editeaza programul de ordonare crescatoare a 2 valori dintr-un sir de numere naturale
(vezi $4.) intr-un fisier cu numele AP41.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
2. Se concepe si editeaza un program de ordonare crescatoare a N (=4) valori dintr-un sir de
numere naturale intr-un fisier cu numele AP42.ASM.
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
3. Se concepe si editeaza un program de ordonare crescatoare a N (=4) valori dintr-un sir de
numere intregi intr-un fisier cu numele AP43.ASM.
4. Se concepe si editeaza un program de deplasare in dubla precizie a continutului unei
variabile v cu N (=6) pozitii catre dreapta intr-un fisier cu numele AP44.ASM (vezi si lucrarea nr. 3,
$4.1.).
6. Teme si exercitii
1. Sa se scrie un program care sa calculeze suma in dubla precizie a doua siruri de dublucuvinte din memorie.
2. Sa se scrie un program care sa citeasca o cifra N de la tastatura, sa calculeze N! (N
factorial) si sa afiseze rezultatul pe ecran.
3. Sa se scrie un program care sa citeasca de la tastatura valorile x, y si z, sa calculeze
expresia: E = x! + 0,25y + 5z si sa afiseze rezultatul pe ecran.
7. Intrebari
1. Care sunt instructiunile de salt conditionat pentru valori de orice tip ?
2. Care sunt instructiunile de salt conditionat pentru valori naturale ?
3. Care sunt instructiunile de salt conditionat pentru valori intregi ?
4. Cum se poate realiza utilizand instructiuni de salt o structura de program de forma:
daca conditie atunci
secventa1
altfel
secventa2
14
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
Scopul lucrrii
a) Instructiuni de transfer pentru lucrul cu siruri.
b) Instructiuni de comparatie pentru lucrul cu siruri.
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
Deoarece sirurile de date se afla in memorie s-au stabilit perechi de registre utilizate implicit
pentru adresarea datelor curente ale sirurilor. Daca sirul este de tip destinatie, atunci perechea de
registre de adresare este ES : DI. Daca sirul este de tip sursa, atunci perechea de registre de adresare
este DS : SI. De aceea registrul DI poarta numele Destination Index iar registrul SI numele Source
Index.
Daca datele sunt octeti (Bytes), instructiunea utilizata va avea terminatia B iar daca datele
sunt cuvinte (Words), instructiunea utilizata va avea terminatia W.
Actualizarea registrelor de adresare difera in functie de doi parametrii:
- tipul datelor sirului (exprimat in numar de octeti: 1 pentru Byte si 2 pentru Word), care
determina valoarea absoluta a actualizarii (modulul actualizarii),
- valoarea flag-ului Direction (DF, 1 pentru sens direct si 0 pentru sens invers), care
precizeaza sensul in care se face actualizarea.
Prin conventia Intel s-a stabilit sensul direct sensul crescator al adreselor iar sensul invers
sensul descrescator al adreselor. De aceea putem spune ca valoarea flag-ului DF reprezinta semnul
actualizarii registrelor SI si/sau DI.
Daca notam cu a actualizarea:
- pentru o instructiune care lucreaza cu octeti (terminata cu B),
- daca DF = 0:
a= +1
- daca DF = 1:
a= -1
- pentru o instructiune care lucreaza cu cuvinte (terminata cu W),
a= +2
- daca DF = 0:
a= -2
- daca DF = 1:
Instructiunile pentru lucrul cu siruri se pot imparti in instructiuni de transfer si instructiuni de
comparatie. O instructiune de lucru cu siruri este doua sarcini de realizat:
- operatia propriu-zisa (transfer sau comparatie) asupra datelor curente,
- actualizarea registrelor de adresare corespunzatoare (SI si/sau DI) pentru urmatoarea
executie a instructiunii (pregatirea urmatoarelor date).
sau
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
STOS SIRDEST, AL sau
STOS SIRDEST, AX
ES : DI <-- DS : SI
SI <-- SI - 1
DI <-- DI - 1
b) Daca DF = 1:
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
2. Efectul instructiunii MOVSW este:
a) Daca DF = 0:
ES:DI,DI+1 <-- DS:SI,SI+1 - transfer curent sir-sir
SI <-- SI + 2
- actualizare index sir sursa
DI <-- DI + 2
- actualizare index sir dest.
b) Daca DF = 1:
ES:DI,DI+1 <-- DS:SI,SI+1 - transfer curent sir-sir
SI <-- SI - 2
- actualizare index sir sursa
DI <-- DI - 2
- actualizare index sir dest.
3. Efectul instructiunii LODSB este:
a) Daca DF = 0:
AL <-- DS : SI
SI <-- SI + 1
DI <-- DI + 1
AL <-- DS : SI
SI <-- SI - 1
DI <-- DI - 1
b) Daca DF = 1:
b) Daca DF = 1:
4
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
ES : DI <-- AL
SI <-- SI - 1
DI <-- DI - 1
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
SCAS SIRDEST, AL sau
SCAS SIRDEST, AX
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
SI <-- SI - 2
DI <-- DI - 2
3. Efectul instructiunii SCASB este:
a) Daca DF = 0:
CMP(ES : DI),AL - comparatie valori curente sir-registru
SI <-- SI + 1
- actualizare index sir sursa
DI <-- DI + 1
- actualizare index sir destinatie
b) Daca DF = 1:
CMP(ES : DI), AL - comparatie valori curente sir-registru
SI <-- SI - 1
- actualizare index sir sursa
DI <-- DI - 1
- actualizare index sir destinatie
4. Efectul instructiunii SCASW este:
a) Daca DF = 0:
CMP(ES : DI,DI+1),AX
SI <-- SI + 2
DI <-- DI + 2
b) Daca DF = 1:
CMP(ES : DI,DI+1),AX
SI <-- SI - 2
DI <-- DI - 2
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
4. Exemple de programe
4.1. Calcule in dubla precizie
1. Copierea unui sir de octeti sirsursa intr-un alt sir de octeti sirdest:
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 8 DUP(?)
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
; pregatirea adresei primului
; octet din sirsursa
MOV DI, OFFSET sirdest
; pregatirea adresei primului
; octet din sirdest
MOV CX, N
; numarul de elemente
; ale sirului sirsursa
et:
MOVSB
; copiere octet curent
; si actualizare SI si DI
LOOP et
; repetare de N ori
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
2. Copierea unui sir de cuvinte sirsursa intr-un alt sir de cuvinte sirdest:
DATA SEGMENT
sirsursa DW 0, 1000H, 2000H, 3000H, 4000H, 5000H
sirdest DW 6 DUP(?)
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
MOV SI, OFFSET sirsursa
ADD SI, M
MOV DI, OFFSET sirdest
ADD DI, M
MOV CX, N
et:
MOVSW
LOOP et
MOV AH, 4CH
INT 21H
COD ENDS
END START
3. Incarcarea succesiva a octetilor unui sir sirsursa in registrul acumulator AL pentru negarea
octetilor si stocarea lor in sirul sirdest:
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 8 DUP(?)
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI,OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
et:
LODSB
; incarcare octet curent in AL
NEG AL
; negare continut AL
STOSB
; stocare continut AL in octet
; curent si actualizare DI
LOOP et
; repetare de N ori
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
4. Copierea unui sir de cuvinte sirsursa intr-un alt sir de cuvinte sirdest:
9
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
DATA SEGMENT
sirsursa DW 0, 1000H, 2000H, 3000H, 4000H, 5000H
sirdest DW 6 DUP(?)
N
EQU 6
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
REP MOVSW
; copiere cuvint curent
; repetata de N ori
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
5. Compararea unui sir de octeti sirsursa cu un alt sir de octeti sirdest si semnalarea diferentei
lor prin variabila rez:
Varianta 1.
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 0, 10H, 20H, 30H, 40H, 50H, 50H, 70H
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
MOV rez, 1
; initializare rez cu 1
; (siruri identice)
et1:
CMPSB
; comparare octet curent
JE et2
; continuare daca octetul curent
10
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
MOV rez, 0
JMP et3
et2:
et3:
LOOP et1
MOV AH, 4CH
INT 21H
COD ENDS
END START
; este identic
; modificare rez in 0
; (siruri diferite)
; oprire daca octetul curent
; nu este identic
; repetare de N ori
; exit
Varianta 2.
DATA SEGMENT
sirsursa DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
sirdest DB 8 DUP(?)
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV SI, OFFSET sirsursa
MOV DI, OFFSET sirdest
MOV CX, N
MOV rez, 1
; initializare rez cu 1
; (siruri identice)
REPZ CMPSB
; repetare (de max. N ori) daca octetul
; curent al sirului sirsursa este identic
; cu octetul curent al sirului sirdest
MOV AX, ES:[DI] ; copiere ultim octet comparat din sirdest
; in acumulator
CMP AX, [SI]
; comparatie cu oct. similar din sirsursa
JE et1
; continuare daca ultimii octeti comparati
; sunt identici
MOV rez, 0
; rez = 0 (siruri diferite) daca ultimii
; octeti comparati sunt diferiti
et1:
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
6. Compararea octetilor unui sir de octeti sirdest cu un octet aflat in acumulator si
semnalarea pozitiei primului octet care difera in poz:
11
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
DATA SEGMENT
sirdest DB 0, 10H, 20H, 30H, 40H, 50H, 60H, 70H
N
EQU 8
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV DI, OFFSET sirdest
MOV CX, N
REPZ SCASB
; comparare octet curent
MOV poz, AL
; stocare pozitie octet care
; difera
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
7. Compararea cuvintelor unui sir de cuvinte sirdest cu un cuvant aflat in acumulator si
semnalarea pozitiei primului cuvant care este identic in poz:
DATA SEGMENT
sirdest DW 0, 1000H, 2000H, 3000H, 4000H, 5000H, 6000H
N
EQU 7
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
; initializare DS
MOV DS, AX
CLD
; fortare DI = 0 (sens direct)
MOV DI, OFFSET sirdest
MOV CX, N
REPNZ SCASB
; comparare octet curent
MOV poz, AL
; stocare pozitie cuvant identic
; cu cel din acumulator
MOV AH, 4CH
; exit
INT 21H
COD ENDS
END START
12
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
5. Desfasurarea lucrarii
1. Se editeaza urmatorul program de comparare a doua siruri de octeti sir1 si sir2, si de
semnalare a diferentei lor prin variabila rez, intr-un fisier cu numele AP51.ASM:
DATA SEGMENT
sir1
DB 'Triunghiul echilateral are toate laturile congruente.'
sir2
DB 'Triunghiul echilateral are toate laturile congruente.'
sir3
DB 'Triunghiul echilateral are toate unghiurile congruente.'
rez DB ?
DATA ENDS
ASSUME CS: COD, DS: DATA
COD SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV CX, SIZE sir1
MOV SI, OFFSET sir1
MOV DI, OFFSET sir2
MOV rez, 'I'
; siruri identice
REPZ CMPSB
JCXZ et1
MOV rez, 'D'
; siruri diferite
et1:
MOV AH, 4CH
INT 21H
COD ENDS
END START
Se parcurg etapele 1.a) ... 1.f) de la lucrarea nr. 2 pentru acest program.
2. Se concepe si editeaza un program care sa determine daca valoarea unui cuvant cuv se
regaseste intr-un sir de cuvinte sir si sa semnaleze gasirea lui in variabila rez, intr-un fisier cu
numele AP52.ASM.
6. Teme si exercitii
1. Sa se scrie un program care sa citeasca de la tastatura doua sir de caractere (incheiate de
exemplu prin punct), sa determine daca sirurile sunt identice sau nu si sa afiseze un mesaj
corespunzator pe ecran.
13
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 5
2. Sa se scrie un program care sa citeasca de la tastatura un sir de caractere (incheiat de
exemplu prin punct) si inca un caracter pe care sa il compare cu sirul citit anterior, sa determine daca
sirul contine caracterul si daca da pe ce pozitie, si sa afiseze mesaje rezultatele pe ecran
7. Intrebari
1. Care sunt perechile de registre utilizate implicit la adresare de instructiunile pentru lucrul
cu siruri ?
2. Care sunt registrele utilizate implicit de instructiunile pentru lucrul cu siruri LODS,
STOS si SCAS ?
3. Care sunt asemanarile si care sunt deosebirile intre efectul instructiunii LOOP si efectul
prefixului REP ?
4. Care sunt asemanarile si care sunt deosebirile intre efectul instructiunii LOOPE si efectul
prefixului REPE ?
14
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
("1")
MN/MX
HOLD
HLDA
NMI
INTR
Vcc
CLK
GEN.CEAS
I 8284A
RES
INTA
M/ IO
READY
RESET
RDY
UCP
I 8086
A 16-19
AD
0-15
WAIT
NMI
INTR
INTA
M/ IO
RD
WR
BHE
GENERATOR
DE STARI
HOLD
HLDA
(BC)
RD
WR
DI
DO
LATCH
I 8282
STB
OE
20
4
8
BHE
A
0-19
(BA)
ALE
16
DT/ R
DEN
mod minim
T/R
OE BUFFER
I 8286
A
B
0-7
0-7
optional pentru
bus de date
incarcat
16
0-15
(BD)
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Semnificatiile pinilor in mod minim sunt urmatoarele:
AD0-15
- adrese in T1/date in T2 , T3 , TW , T4 multiplexate in timp (BA+BD - I/O);
A0 este analog BHE\, validind bus-ul inferior ("Low") de date D0-7 - BDI (O);
trec in impedanta inalta (Z) in ciclurile "INTA" sau la cedarea bus-urilor
A16-19/ S3-6 - adrese (BA - O) / semnale de stare a UCP in T2-4 (BC - O);
S6 = "0" indica ocuparea bus-urilor de catre UCP
S5 = IF = starea flag-ului de intrerupere ("0" = inhibata,"1" = validata)
S4
S3
- indica registrul segment curent utilizat pentru adresare:
"0"
"0"
"Alternate Data"
"0"
"1"
"Stack"
"1"
"0"
"Code or None"
"1"
"1"
"Data"
BHE\ / S7
- comanda validare bus superior ("High") de date D8-15 - BDH (O)
/ semnal de stare a UCP in T2-4 (BC - I);
BHE\ A0
Transfer
"0"
"0"
D0-15
"0"
"1"
D8-15
"1"
"0"
D0-7
"1"
"1"
inhibat
ALE
- comanda de memorare a liniilor de adresa A0-15 ("latch"-uire pentru
RD\
- comanda de citire de pe BD ("0" = citire din memorie/porturi - O);
WR\
- comanda de scriere pe BD ("0" = scriere in memorie/porturi - O);
M/IO\
- comanda de selectie memorie/porturi ("0" = porturi; "1" = memorie - O);
DT / R\
- comanda sensului transferului datelor ("0" = receptie; "1" = transmisie - O);
DEN\
- comanda de validare date ("0" = validare - O);
NMI
- comanda intrerupere nemascabila ("1" = intrerupere - I);
INTR
- comanda (cerere) intrerupere mascabila ("1" = cerere intrerupere - I);
INTA\
- comanda (confirmare) acceptare intrerupere mascabila (semnal "RD" pentru
intrerupator in ciclurile de intrerupere "INTA 1,2" - O);
HOLD
- comanda (cerere) de cedare a busurilor catre alta UC "master" (I);
HLDA
- comanda (confirmare) a acceptarii cedarii bus-urilor catre UC "master" (O);
CLK
- semnal de tact (ceas) necesar operatiilor interne secventiale (I);
READY
- comanda (semnalarea) starii "gata" de transfer a memoriei (incheierea starii de
asteptare TW ("WAIT") - I);
RESET
- comanda de resetare a circuitului.
MN / MX\
- comanda modului ("1" = mod minim - I);
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Figurile 2 si 3 prezinta formele de unda ale semnalelor care participa la realizarea
ciclurilor de citire (RD) si de scriere (WR) a datelor/ instructiunilor sau de citire a vectorului de
intrerupere (INTA).
T
1
T
2
T
3
T
4
T
W
CLK
A/ D
ALE
BHE, A
0-15
0-15
/S
16-19 3-7
momentul
deschiderii
citire date:
0-15
0-15
momentul
inchiderii latch-ului
BHE , A
16-19
RD / INTA
3-7
DT/ R
DEN
READY
WAIT
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
T
1
T
2
T
3
T
4
T
W
CLK
A/ D
ALE
BHE, A
0-15
0-15
/S
16-19 3-7
scriere date:
0-15
momentul
deschiderii
0-15
momentul
inchiderii latch-ului
BHE , A
16-19
3-7
WR
DT/ R
DEN
READY
WAIT
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Largimea in numar de biti a BA determina capacitatea maxima a memoriei direct
adresabile de catre UCP. Multimea adreselor posibile este 0 .. 2n-1, daca pe BA exista n linii de
adresa A0 .. An-1. Aceasta multime (A) se numeste spatiul adreselor. Multimea locatiilor fizice
in care sunt memorate date de b biti (in general b=8) va fi numita spatiul memoriei (M).
In sistemele simple, adresele generate de UCP pe BA coincid cu adresele la intrarea
memoriei fizice, dimensiunea acesteia din urma fiind in general mai mica decit dimensiunea
spatiului adreselor. Se poate spune ca operatia de adresare aloca unei adrese din A un element
din M prin functia de translatare: fT : A --> M, iar in cazul cel mai simplu fT este functia identica.
In figura 1 este reprezentata memoria principala ca o multime de cuvinte cu b=8 biti
(octeti), in care cel mai putin semnificativ bit (LSb) este D0 , cel mai semnificativ bit (MSb) este
D7 , M = A iar fT este functia identica.
adresa
data
0:
1:
D7
D
7
i:
MSb
. . .
. . .
D1
D
1
D0
D
0
:
. . .
j:
:
LSB
j+1:
MSB
2 n-1:
20
(2 -1)
LSb octet
cuvint de 16 biti
b = 8 biti
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
depinde de conventia utilizata pentru microprocesorul respectiv, la Intel 8086 corespunzind
adreselor impare (pentru care A0="1").
In figura 2 este reprezentata divizarea memoriei in cele doua blocuri (HIGH si LOW).
Spatiul adreselor
Subspatiile adreselor
Bancul adreselor impare
Bancul adreselor pare
512KB
512KB
1:
0:
3:
2:
:
:
2K+1:
2K:
1 MB
0:
1:
2:
3:
:
2K:
2K+1:
FFFFF:
:
FFFFE:
FFFFF:
FFFFE:
8
19
A
1-19
D 8-15
(BDH)
High (superior)
BHE
D 0-7
(BDI)
Low (inferior)
1M x 8b
8CI-(1K x 4b)
zona
neutilizata
(disponibila)
R0M
00000 H
00FFF H
01000 H
4K x 8b
F7FFF H
F8000 H
32K x 8b
4CI-(8K x 8b)
FFFFF H
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
BC
M/ IO
BA A17-19 A14-16
ABC
E1 DCD E2
E3
74LS138
01234567
A17-19
A0
BHE
A0
BHE
CSROM-1
NC
M/ IO
ABC
E1 DCD E2
E3
01234567
A0
BHE
A0
BHE
CSRAM-1
NC
CSRAM-0
CSROM-0
13
CS
CS
A
A
1-13 0-12
ROM0,HROM0,L
BD
A11-13 A14-16
13
CS
CS
A
A1-13 0-12
ROM1,H ROM1,L
10
CS CS CS CS
A
A
1-10 0-9
RAM0,H RAM0,L
10
CS CS CS CS
A
A
1-10 0-9
RAM1,H RAM1,L
O0-7
OE
O0-7 RD
O0-7
OE
O0-7 RD
R/W
I/O0-3 I/O0-3 I/O0-3 I/O0-3 WR
D8-15
D0-7
D8-15
D0-7
R/W
I/O0-3 I/O0-3 I/O0-3 I/O0-3 WR
4
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Dintre acestea cel mai putin semnificative mo, respectiv ma vor fi necesare
decodificatoarelor pentru a genera semnalele de selectie CS\ROM 0 .. CS\ROM (2mo-1) ,
respectiv CS\RAM 0 .. CS\RAM (2ma-1). In exemplul considerat mo = ma = 1. Asadar bitii de
adresa A14, respectiv A11 sunt utilizati in acest scop.
Restul liniilor de adresa (Ano+mo+1 .. An-1, respectiv Ana+ma+1 .. An-1) au valori fixe in
cazul decodificarii numite completa sau neprecizate in cazul decodificarii incomplete. In
exemplu s-a considerat o decodificare completa si deci A15 .. A19 pentru ROM, respectiv A12 ..
A19 pentru RAM, au valori fixate (A15 .. A19 = "1" pentru ROM, respectiv A12 .. A19 = "0"
pentru RAM).
Acest lucru se poate urmari si in tabelele de decodificare (tabelele 1 si 2) asociate
schemei, indicat a fi construite in etapa de proiectare a unor astfel de scheme.
Tab.1 Tabelul de decodificare al memoriei ROM:
M/IO
A19 .. A15
A14
A13 .. A1
Subspatiu adrese
Iesire activa
1 ........ 1
0 ........ 0
1 ........ 1
F8000 - FBFFF H
CS\ROM-0
1 ........ 1
0 ........ 0
1 ........ 1
FC000 - FFFFF H
CS\ROM-1
A19 .. A12
A11
A10 .. A1
Subspatiu adrese
Iesire activa
0 ........ 0
0 ........ 0
1 ........ 1
00000 - 007FF H
CS\RAM-0
0 ........ 0
0 ........ 0
1 ........ 1
00800 - 00FFF H
CS\RAM-1
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
Spre exemplu, daca decodificatorul pentru memoria RAM ar avea intrarile E1\ si E2\
puse la masa ("0"), iar liniile de adresa A12-A19 (8 biti ai adresei) nu ar avea nici un rol in
selectia circuitelor RAM, atunci pentru a accesa (citi sau scrie) locatia 200 H, de exemplu, s-ar
putea folosi adresele:
200 H, 1200 H, 2200 H, .. , xx200 H, .. , FF200 H
care ar fi in acest caz echivalente.
Dar, asa cum am spus, in acest caz s-ar pierde zona de memorie 1000 H - FFFFF H, in
care ar fi multiplicata de 28 = 256 ori zona 0 - FFF h.
In plus, in acest caz nu s-ar mai putea face deosebire intre memoria RAM si cea ROM la
operatiile de citire si s-ar naste conflicte (scurtcircuite) electrice.
O situatie posibila pentru decodificare incompleta fara suprapunerea memoriei RAM
peste memoria ROM ar fi aceea in care decodificatorul de RAM ar avea pe intrarea E1\ iesirea
unei porti OR cu doua intrari pe care sa fie conectate liniile de adresa A12 - A13, pe intrarea E2\
iesirea unei porti OR cu doua intrari pe care sa fie conectate liniile de adresa A14 - A15, iar liniile
de adresa A16-A19 (4 biti ai adresei) nu ar avea nici un rol in selectia circuitelor RAM.
Astfel, multiplicarea s-ar face doar de 24 = 16 ori iar locatia de adresa 200 H ar putea fi
accesata utilizind adresele:
200 H, 10200 H, .. , x0200 H, F0200 H
ARHITECTURA MICROPROCESOARELOR
LUCRAREA DE LABORATOR NR. 6
3. Desfasurarea lucrarii
1. Se da urmatoarea harta de utilizare a memoriei principale a unui microprocesor Intel
8086:
00000 H
RAM
1M x 8b
zona
neutilizata
(disponibila)
RAM
R0M
FFFFF H
a) Daca memoria ROM este realizata cu 8 circuite de dimensiune 8Kx8b, iar memoria
RAM cu 4 circuite de dimensiune 16Kx8b, sa se determine dimensiunile zonelor de memorie
ROM si RAM.
b) Sa se determine adresele de inceput si de sfarsit ale zonelor de memorie de la 1.a).
c) Sa se alcatuiasca tabelele de decodificare pentru circuitele de la 1.a).
d) Sa se proiecteze decodificatoarele corespunzatoare tabelelor de la 1.c).
e) Sa se completeze schema electrica de principiu pentru memoria principala de la pct.
1.a).
2. Se da aceeasi harta de utilizare a memoriei principale a unui microprocesor Intel 8086
ca la pct. 1.
a) Daca memoria ROM are dimensiunea de 128Kx8b si este realizata cu 4 circuite, iar
memoria RAM are dimensiunea de 32Kx8b si este realizata cu 8 circuite, sa se determine
dimensiunile circuitelor de memorie ROM si RAM.
b) Sa se determine adresele de inceput si de sfarsit ale zonelor de memorie de la 2.a).
c) Sa se alcatuiasca tabelele de decodificare pentru circuitele de la 2.a).
d) Sa se proiecteze decodificatoarele corespunzatoare tabelelor de la 2.c).
e) Sa se completeze schema electrica de principiu pentru memoria principala de la pct.
2.a).
3. Se da aceeasi harta de utilizare a memoriei principale a unui microprocesor Intel 8086
ca la pct. 1.
a) Daca memoria ROM are dimensiunea de 256Kx8b si este realizata cu circuite de
dimensiune 32Kx8b, iar memoria RAM are dimensiunea de 128Kx8b si este realizata cu circuite
de dimensiune 8Kx8b, sa se determine numarul circuitelor de memorie ROM si RAM.
b) Sa se determine adresele de inceput si de sfarsit ale zonelor de memorie de la 3.a).
c) Sa se alcatuiasca tabelele de decodificare pentru circuitele de la 3.a).
d) Sa se proiecteze decodificatoarele corespunzatoare tabelelor de la 3.c).
e) Sa se completeze schema electrica de principiu pentru memoria principala de la pct.
3.a).
10