Documente Academic
Documente Profesional
Documente Cultură
P.Lucrare.02.A
Coninut
1.
Introducere ......................................................................................................................2
1.1.
Scop .........................................................................................................................2
2. Setul de instructiuni al microprocesorului 8086 ..........................................................3
3. Moduri de adresare la microprocesorul 8086...............................................................3
3.1.
Adresarea imediata ..................................................................................................3
3.2.
Adresarea registru ....................................................................................................3
3.3.
Moduri de adresare pentru date aflate (sau care se doresc a fi plasate) in memorie
4
3.3.1.
Adresarea directa .............................................................................................4
3.3.2.
Adresarea indirecta (prin registru) ....................................................................5
3.3.3.
Adresarea indexata...........................................................................................6
4. Tipuri de instructiuni al microprocesorului 8086.........................................................6
4.1.
Instruciuni pentru transerul de date .........................................................................6
4.1.1.
Instructiuni de uz general..................................................................................6
4.1.2.
Instruciuni de transfer intrare/ieire .................................................................7
4.2.
Instruciuni aritmetice................................................................................................7
4.3.
Instructiuni pentru operatii cu biti ..............................................................................9
4.3.1.
Instruciuni logice ..............................................................................................9
4.3.2.
Instruciuni de deplasare i de rotire (SHL, SAL, SHR i SAR) ......................10
4.3.3.
Instruciunile de rotire ROR, ROL, RCR, RCL ................................................11
4.4.
Instruciuni de salt...................................................................................................11
4.4.1.
Instruciuni de salt condiionat ........................................................................11
4.4.2.
Instruciuni de salt necondiionat (CALL, RET i JMP) ...................................14
4.4.3.
Instructiuni pentru controlul iteraiilor ..............................................................15
4.5.
Instruciuni pentru controlul procesorului ................................................................15
4.6.
Instruciuni pe iruri ................................................................................................16
5. Aplicaii ..........................................................................................................................16
Lista de figuri
Figura 2. 1 Deplasare logic la dreapta .................................................................................11
Figura 2. 2 Deplasare aritmetic la dreapta ...........................................................................11
1. Introducere
1.1.
Scop
L.2 - 2/17
destinatie, sursa
3.1.
Adresarea imediata
Adresarea imediata este cel mai simplu mod de adresare. Data este o constanta care se
afla in memoria program, imediat dupa codul instructiunii.
Exemple :
mov
AL, 3
mov
BX, 12FCh
3.2.
Adresarea registru
AX, BX
mov
DL, AL
L.2 - 3/17
Aceasta permite ca instructiunea sa fie scurta si sa se execute foarte rapid (datorita vitezei
sporite de accesare a registrelor interne ale microprocesorului). Din acest motiv, registrele
sunt cel mai bun loc de plasare a variabilelor foarte des utilizate.
3.3.
Exista in principal trei moduri adresare pentru accesarea datelor in memorie: adresarea
directa, adresarea indirecta si adresarea indexata.
Modurile de adresare reprezinta, in acest caz, diferite modalitati de a specifica adresa datei,
mai exact a ofsetului acesteia. Reamintim ca ofsetul (sau deplasamentul) reprezinta
distanta, in octeti, de la inceputul unui segment pana la locatia de memorie in care este
continuta data.
Ofsetul datei din memorie va fi calculat de unitatea de executie pe baza modului de adresare
specificat in instructiune, iar rezultatul se numeste adresa efectiva.
Uzual, datele se pot afla (sau se doresc a fi plasate), in memorie, in segmente de date (Data
Segment) sau de stiva (Stack Segment).
De retinut ca, pentru a se asigura localizarea datelor in memorie, fiecare aplicatie trebuie sasi defineasca de la inceput adresele de baza ale segmentelor. Reamintim ca adresa de baza
a segmentului de date curent este continuta in registrul DS, iar cea a segmentului de stiva
curent este continuta in registrul SS.
In continuare, pentru simplificarea prezentarii, se presupune ca adresele de baza ale
segmentelor au fost stabilite, iar segmentul care va fi utilizat implicit este segmentul de date.
DS
offset
mov AL,[100h]
[100h]
AL
Este mai comod ca offset-ul sa se specifice printr-un nume simbolic, reprezentand numele
unei variabile simple, ca in exemplul urmator.
L.2 - 4/17
2)
mov
alfa, AL
DS
offset
mov alfa, AL
alfa
AL
3)
Variabilele pot desemna date reprezentate in memorie pe unul sau mai multi octei,
dupa cum sunt declarate. Sa luam urmatorul exemplu, in care variabila este de tip cuvant
(doi octeti).
mov
beta, AX
DS
offset
mov beta, AX
beta
AX
[BX], AX
L.2 - 5/17
DS
offset
mov [BX], AX
AX
[BX]
AL, depl[SI]
DS
depl
[SI] +
mov depl[SI], AL
AL
4.1.
Sintaxele instrucilor:
mov destinaie, surs;
L.2 - 6/17
<acumulator>, <adres_port>;
unde:
<acumulator> -registrul AX pentru transfer pe 16 bii sau AL pentru transfer pe 8 bii
<adresa_port> - o adres exprimabil pe 8 bii sau registrul DX
Dac adresa portului este mai mare dect 255 atunci adresa portului se transmite prin
registrul DX.
Exemple:
direct, prin adresa fizica (daca adresa este exprimabila pe un octet) sau nume simbolic
IN
AL, 12h
OUT 33h, AL
AL,DX
OUT DX,AL
4.2.
Instruciuni aritmetice
Exist mai multe instruciuni care permit efectuarea de operaii aritmetice, pintr care vom
enumera: add, inc, sub, dec, neg, cmp, mul, imul, div i idiv.
add destinaie, surs;
L.2 - 7/17
inc destinaie;
dec destinaie;
neg destinaie;
mul surs;
imul surs;
div surs;
L.2 - 8/17
Exemple:
MOV AX, 9
MOV BX,3
ADD AL, BL
; ncarca AX cu
; ncarc BX cu
; adun partea low a registrului BX
; la partea low a registrului AX
;, iar rezultatul e pstrat n AL:
0009h
0003h
0ch
; load ax
;nmulire fr semn
0903h
001bh
;ncarc AX
;scade AH din AL
3883h
al=4bh
4.3.
; ncarc AL
; AND cu valoare imediat
;
;
L.2 - 9/17
00110101
11111011
-----------00110001
11111000
-----------00110000
;exemplu pentru OR
MOV AL, 35h
OR AL, 08h
;ncarc AL
;OR cu valoare imediat
;
; rezultat
00110101
00001000
-----------00000111
;ncarc AL
;xor cu valoare imediat
;
;rezultat
00110101
00001000
-----------00111101
b)
XOR AX,AX
TEST <parametru_1>,<parametru_2>
Exemple:
TEST AL, 00010000b
destinaie, <parametru>;
= deplasarea "logic", biii se copiaz n
locaiile nvecinate (la stnga sau la dreapta), iar pe
locurile rmase libere se pune 0 logic
SAL/ SAR
destinaie, <parametru>;
= deplasarea "aritmetic", se consider
c operandul conine un numr cu semn, iar prin
deplasare la stnga i la dreapta se obine o multiplicare
i respectiv o divizare cu puteri ale lui doi.
Parametrul specific numrul de poziii binare cu care se face deplasare; acest parametru
poate fi 1 sau dac numrul de pai este mai mare atunci se indica prin registrul CL.
La deplasarea la dreapta se dorete meninerea semnului operandului, de aceea bitul mai
semnificativ (semnul) se menine i dup deplasare. La deplasarea la stnga acest lucru nu
este necesar, de aceea instruciunile SHL i SAL reprezint aceeai instruciune.
L.2 - 10/17
n Figura 2. 1Figura 2. 2, (n care n=8 sau 16), s-a reprezentat o deplasare logic i o
deplasare aritmetic la dreapta. Bitul care iese din operand este nscris n indicatorul de
transport CF.
0
Dn
....
Dn-1
D1
D0
CF
SHR
....
Dn-1
D1
D0
CF
SAR
Dn
...............
D1
D0
CF
ROR
Dn
................
D1
D0
CF
RCR
destinaie, <parametru>
Exemple:
; un numr stocat n AX este nmulit cu 10
SHL AX, 1
MOV BX, AX
SHL AX, 1
SHL AX, 1
ADD AX, BX
4.4.
;*2
;
;*4
;*8
; * 10
Instruciuni de salt
L.2 - 11/17
mnemonic etichet
unde mnemonic este un cod pentru condiia testat, iar eticheta indic eticheta instruciunii la
care se face saltul.
Instruciunile de salt testeaz starea unuia sau mai multor indicatori n cadrul condiiei.
Urmtoarele dou tabele prezint instruciunile de salt condiionat utilizate dup o operaie
de comparare a dou numere.
Instruciunea
Condiia
JC
JNC
JZ
JNZ
JS
JNS
JO
JNO
JP
JNP
CF=1
CF=0
ZF=1
ZF=0
SF=1
SF=0
OF=1
OF=0
PF=1
PF=0
Instruciuni
echivalente
JB,JNAE
JNB,JAE
JE
Explicaii
salt dac a fost un transport
salt dac nu a fost un transport
salt dac rezultatul este zero
salt dac rezultatul nu este zero
salt dac rezultatul este negativ
salt dac rezultatul este pozitiv
salt la depire de capacitate
salt daca nu este depire
salt dac rezultatul este par
salt dac rezultatul nu este par
Condiie
>
>=
Indicatori
testai
CF=0,ZF=0
CF=0
Instruciuni
echivalente
JNBE
JNB,JNC
JA
JAE
JB
JBE
JE
JNE
<
<=
=
!=
CF=1
CF=1 sau ZF=1
ZF=1
ZF=0
JNAE,JC
JNA
JZ
JNZ
Explicaii
salt la mai mare
salt la mai mare sau
egal
salt la mai mic
salt la mai mic sau egal
salt la egal
salt la diferit
Condiie
JG
>
JGE
>=
Indicatori
Instruciuni
testai
echivalente
SF=OF
sau JNLE
ZF=0
SF=OF
JNL
L.2 - 12/17
Explicaii
salt la mai mare
salt la mai mare sau
egal
JL
JLE
<
<=
JE
JNE
=
!=
SF!=OF
SF!=OF
ZF=1
ZF=1
ZF=0
JNGE
sau JNG
JZ
JNZ
Observaie: relaiile de ordine (mai mic, mai mare, etc.) se stabilesc ntre primul i al doilea
parametru al operaiei de comparare.
Exemplul 1. Stocarea n memorie, n ordine cresctoare, a dou numere fr semn, reprezentate pe 16
bii. Se cere ca numrul de valoare mai mic se se ncarce la adresa mai mic. Offset-ul primului
numr este n BX ; cel de-al doilea numr este coninut n registrul DI
MOV AX,[BX]
CMP AX,[DI]
JBE DONE
XCHG AX,[DI]
MOV [BX],AX
DONE:
.......
.......
Exemplul 2. Secven de decizii. Se execut trei grupuri diferite de instruciuni, fiecare corespunznd
uneia dintre situaiile : AL este mai mic, egal sau mai mare decat 10. Coninutul registrului AL se
considera numr far semn.
CMP AL, 10
JAE AE10
; Compara AL cu 10 .
........
AE10:
A10:
Exemplul 3.
; daca (CX<-20) atunci DX=30 altfel DX=20
CMP CX, -20
JL
LESS
MOV DX, 20
JMP CONT
LESS:
MOV DX, 30
CONT:
Exemplul 4.
ADD
JO
AX, BX
OVERFLOW
OVERFLOW:
L.2 - 13/17
[<constant>]
unde:
<adresa>
<constanta> -
Exemplu:
a)
CALL MY_PROC
MOV AX,BX
..........
MY_PROC
MOV CL,6
..........
RET
..........
;Apeleaz procedura
;Aici se va reveni dup execuia procedurii
;start procedur
;Prima instruciune a procedurii
; (urmtoarele instruciuni)
;Revenire la instruciunea imediat urmtoare celei de apelare.
b) n exemplul urmtor sunt ilustrate schematic dou apeluri de procedur. Procedura 2 este
apelat n corpul procedurii 1.
....
....
PROC_2 ....
....
----- RET
|
.... <-------.... <----------------....
|
....
------------- RET
L.2 - 14/17
Pentru instruciunea LOOP se execut bucla att timp ct valoarea din registrul CX nu este
0, condiia de terminare a ciclului este CX=0, adic contorul ajunge la 0. Pentru instruciunea
LOOPZ n plus ciclul se ncheie i n cazul n care ZF=0. La instruciunea LOOPNZ ieirea
din bucl se face pentru ZF=1.
Exemplu:
MOV CX, 100
; ncarc n registrul CX cu constanta 100
et1:
.....
; aici ncepe grupul de instruciuni ce urmeaz a fi repetat
.....
LOOP et1
; dac CX nu este 0, salt la et1; ciclul se va executa de 100 de ori
.....
DEC CX
CMP CX, 0
JNE et1
Prima variant fiind ns mai eficient.
4.5.
.
Instruciunile CLC, STC, CMC modific starea indicatorului CF de transport, avnd ca efect:
Sunt instruciuni care au efect asupra modului de funcionare al procesorului
CLC terge (eng. clear) indicatorul, CF=0
STC seteaz indicatorul, CF=1
CMC inverseaz starea indicatorului, CF=NOT CF
L.2 - 15/17
Instruciunile CLI i STI terg i respectiv seteaz indicatorul de ntrerupere IF. n starea
setat (IF=1) procesorul detecteaz ntreruperile mascabile, iar n starea invers blocheaz
toate ntreruperile mascabile.
Instruciunile CLD i STD modifica starea indicatorului de direcie DF. Prin acest indicator se
controleaz modul de parcurgere a irurilor la operaiile pe iruri: prin incrementare (DF=0)
sau prin decrementare (DF=1).
Instruciunea NOP (no operation) nu face nimic. Aceast instruciune se folosete n scopuri
de temporizare, pentru ntrzierea unor operaii sau pentru implementarea unor bucle de
ateptare.
Instruciunea HLT (halt) determin oprirea procesorului.
Instruciunea HIT determin oprirea temporar a procesorului pn la apariia unui semnal
de ntrerupere sau de iniializare (reset).
4.6.
Instruciuni pe iruri
Aceste instruciuni au ca scop de a accelerarea accesului la elementele unei structuri de tip ir sau vector.
Instruciunile folosesc n mod implicit registrele index SI i DI pentru adresarea elementelor irului surs i
respectiv destinaie. n mod implicit registrul DS pstreaz adresa de segment a sursei iar registrul ES adresa de
segment a destinaiei. Dup efectuarea operaiei propriu-zise (specificat prin mnemonica instruciunii), registrele
index sunt incrementate sau decrementate automat pentru a trece la elementele urmtoare din ir. Indicatorul DF
determin direcia de parcurgere a irurilor: DF=1 prin incrementare, DF=0 prin decrementare. Registrul CX este
folosit pentru contorizarea numrului de operaii efectuate. Dup fiecare execuie registrul CX se decrementeaz.
Instruciunile MOVSB, MOVSW transfer un element din irul surs n irul destinaie. Instruciunea MOVSB
opereaz pe octet (eng. move string on byte), iar MOVSW opereaz pe cuvnt. La operaiile pe cuvnt registrele
index se incrementeaz sau se decrementeaz cu 2 uniti, deoarece un cuvnt ocup 2 locaii n memorie.
Instruciunile nu au parametrii; programatorul trebuie s ncarce n prealabil adresele irurilor n registrele SI i DI,
i lungimea irului n CX.
Instruciunile LODSB i LODSW realizeaz ncrcarea succesiv a elementelor unui ir n registrul acumulator.
Instruciunile STOSB i STOSW realizeaz operaia invers de salvare a registrului acumulator ntr-un ir. i la
aceste instruciuni registrele index (SI pentru ncrcare i DI pentru salvare) se incrementeaz sau se
decrementeaz automat, iar registrul CX se decrementeaz. Terminaiile "B" respectiv "W" indic lungimea pe
care se face transferul: octet sau cuvnt.
Instruciunile CMPSB, CMPSW, SCASB i SCASW realizeaz operaii de comparare cu elemente ale unui ir.
Primele dou instruciuni compar ntre ele elementele a dou iruri, iar ultimele dou compar coninutul
registrului acumulator cu cte un element al irului (operaie de scanare).
Instruciunile REP, REPZ, REPE, REPNZ, REPNZ permit execuia multipl a unei instruciuni pe iruri. Prin
amplasarea unei astfel de instruciuni n faa unei instruciuni pe iruri oblig procesorul execuia repetat a
operaiei pn ce condiia de terminare este satisfcut. La prima variant, REP, condiia de terminare este
CX=0. La instruciunile REPZ i REPE operaia se repet atta timp ct rezultatul este zero sau operanzii sunt
egali. La REPNZ i REPNE operaia se repet atta timp ct rezultatul este diferit de zero sau operanzii sunt
diferii.
5. Aplicaii
1. S se inializeze variabilele var1, var2 i var3 cu o valoare constant, definit n program.
Dai dou variante i precizai care este aceea care permite o execuie mai rapid a
secvenei. Spuneti ce moduri de adresare ati folosit pentru fiecare operand care apare in
instructiune.
2. S se copieze coninutul unei variabile ntr-o alt variabil. Se consider variabil de un
octet.
3. S se iniializeze o tabel de trei valori de cte un octet, n memorie, ncepnd de la o
adres identificat prin simbolul tab. S se acceseze al treilea element i s se salveze
ntr-o variabil simpl.
L.2 - 16/17
L.2 - 17/17