Sunteți pe pagina 1din 17

Sisteme cu microprocesoare

Setul de instructiuni al microprocesorului 8086


Lucrarea 2

P.Lucrare.02.A

Setul de instructiuni al microprocesorului 8086

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

Aceast lucrare prezint:

modurile de adresare puse la dispozitie de acest microprocesor, din punctul de


vedere al utilizarii lor in practica programarii

setul de instructiuni al microprocesorului 8086

L.2 - 2/17

Setul de instructiuni al microprocesorului 8086

2. Setul de instructiuni al microprocesorului 8086


Programatorul foloseste instructiunile microprocesorului pentru a realiza operatii asupra
unor constante, variabile sau chiar adrese de variabile, porturi etc, pe care le vom denumi
generic date . S-a evitat denumirea de operand , aceasta fiind rezervata pentru operanzii
propriu-zisi ai instructiunilor.

3. Moduri de adresare la microprocesorul 8086


Microprocesorul 8086 dispune de un set flexibil de moduri de adresare, permitand un
acces usor la constante, variabile sau tablouri de variabile.
Din punct de vedere practic, prin mod de adresare se va intelege modul in care este
specificata o data, intr-o instructiune. Data se poate afla in memoria program (ca si
constanta), in registrele microprocesorului sau in memoria de date, ca variabila.
In cele ce urmeaza sunt prezentate cele mai importante moduri de adresare ale
microprocesorului 8086. Pentru exemplificari va fi utilizata instructiunea mov (move) :
mov

destinatie, sursa

Aceasta instructiune copiaza data continuta de operandul sursa in operandul destinatie.

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

; registrul AL este incarcat cu constanta zecimala 3

mov

BX, 12FCh

; registrul BX este incarcat cu constanta hexazecimala 12FCh

Un avantaj al adresarii imediate este acela ca permite o executie rapida a instructiunii,


deoarece nu se acceseaza magistrala de date. Utilizarea cea mai eficienta a adresarii
imediate este pentru constante de un octet. Daca operandul ocupa doi octeti, este necesar
un subciclu suplimentar, pentru extragerea celui de-al doilea octet.
Valoarea constanta este definita de programator si este o valoare fixa, neputand fi modificata
in cursul rularii programului. Aceasta reprezinta principala limitare a acestui mod de
adresare.

3.2.

Adresarea registru

Adresarea registru data este continuta intr-un registru al microprocesorului.


Exemple :
mov

AX, BX

; copiaza continutul registrului BX in registrul AX

mov

DL, AL

; copiaza continutul registrului AL in registrul DL

Deoarece numarul de registre de uz general al microprocesorului este relativ redus, registrul


(registrele) care alcatuiesc operanzii instructiunii sunt continute chiar in cuvantul instructiunii.

L.2 - 3/17

Setul de instructiuni al microprocesorului 8086

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.

Moduri de adresare pentru date aflate (sau care se doresc a fi plasate) in


memorie

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.

3.3.1. Adresarea directa


n acest mod de adresare, offset-ul datei este specificat direct in instructiune, printr-o valoare
numerica sau printr-un nume simbolic.
Exemple :
1)

mov AL, [100h]

; continutul locatiei de memorie avand ofsset-ul 100h este


; incarcat in registrul AL

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

Setul de instructiuni al microprocesorului 8086

2)

mov

alfa, AL

; continutul registrului AL este copiat in locatia de


; memorie al carei offset este specificat prin variabila alfa

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

; continutul registrului AX este copiat in memorie in doua locaii,


; incepand cu offset-ul dat de variabila beta

DS

offset
mov beta, AX

beta

AX

3.3.2. Adresarea indirecta (prin registru)


n acest caz, offset-ul datei este continut intr-un registru.
Exemplu:
mov

[BX], AX

; registrul AX este incarcat cu continutul unei locatii de


; memorie, al carei deplasament este dat de registrul BX

L.2 - 5/17

Setul de instructiuni al microprocesorului 8086

DS

offset
mov [BX], AX

AX

[BX]

3.3.3. Adresarea indexata


Offset-ul operandului se obine adunnd continutul unui registru index (SI sau DI) cu un
deplasament constant. Acesta din urma este specificat fie printr-o constanta, fie printr-un
simbol. Acest mod de adresare este util la accesarea elementelor unei tabele.
In exemplul urmator, continutul registrulului AL este incarcat la locatia de memorie al carui
offset este dat de suma dintre deplasamentul depl si continutul registrului index SI.
mov

AL, depl[SI]

DS

depl
[SI] +

mov depl[SI], AL

offset = depl + [SI]

AL

4. Setul de instructiuni al microprocesorului 8086


Microprocesoarele din familia 8086 pun la dispoziie mai multe instruciuni pentru ncrcarea,
memorarea i transferul diferitelor date.

4.1.

Instruciuni pentru transerul de date

4.1.1. Instructiuni de uz general

Sintaxele instrucilor:
mov destinaie, surs;

Dup execuia acestei instruciuni operandul surs i


operandul destinaie vor conine aceeai valoare i
anume cea care se afla n operandul surs naintea

L.2 - 6/17

Setul de instructiuni al microprocesorului 8086

execuiei instruciunii. Operandul destinaie poate fi un


registru sau o locaie de memorie.
xchg destinaie, surs;

are ca efect interschimbarea coninutului sursei i al


destinaiei. Pot fi schimbate date ntre regitri sau ntre
regitri i memorie.

4.1.2. Instruciuni de transfer intrare/ieire


Aceste instruciuni se utilizeaz pentru efectuarea transferurilor cu registrele
(porturile) interfeelor de intrare/ieire. Trebuie remarcat faptul c la procesoarele Intel
acestea sunt singurele instruciuni care opereaz cu porturi.
IN

<acumulator>, <adres_port>;

OUT <adres_port>, <acumulator>;

se folosete pentru citirea unui port de intrare


se foloseste pentru scrierea unui port de ieire

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

indirect, prin adresa continuta in registrul DX


IN

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;

efectul este nsumarea operanzilor surs i destinaie i


stocarea rezultatului n operandul destinaie, vechea
valoare a acestui operand fiind nlocuit cu noua
valoare. Cei doi operanzi pot fi numere binare, cu sau
fr semn, reprezentate pe 8 sau 16 bii (sau 32 de bii
ncepnd cu microprocesorul 80386), ambii trebuie s
aib aceeai dimensiune. Cei doi operanzi pot fi
operanzi registru sau operanzi n memorie (nu ambii,
deoarece operaiile memorie-la-memorie nu sunt
admise). Sursa poate fi i un operand imediat.
Instruciunea add actualizeaz indicatorii AF, CF, OF,
PF, SF i ZF.

L.2 - 7/17

Setul de instructiuni al microprocesorului 8086

inc destinaie;

adaug 1 la operandul destinaie i depune rezultatul tot


n operandul destinaie, fiind nlocuit vechea valoare.
Operandul destinaie poate fi un numr binar fr semn
de 8, 16 sau 32 (ncepnd doar cu 80386) de bii i
poate fi un operand registru sau un operand n memorie.
n urma execuiei acestei instruciuni sunt actualizai
indicatorii AF, OF, PF, SF i ZF.

sub destinaie, surs;

efectul este scderea operandului surs din operandul


destinaie i nlocuirea valorii operandului destinaie cu
rezultatul scderii. Operanzii pot fi numere binare de 8,
16 sau 32 (80386) de bii, ambii trebuie s aib aceeai
dimensiune. Cei doi operanzi pot fi operanzi registru sau
operanzi n memorie. Sursa poate fi i un operand
imediat. Instruciunea sub actualizeaz indicatorii AF,
CF, OF, PF, SF i ZF.

dec destinaie;

scade 1 din valoarea operandului destinaie i depune


rezultatul tot n operandul destinaie, vechea valoare
fiind nlocuit. Operandul destinaie poate fi un numr
binar fr semn de 8, 16 sau 32 de bii (ncepnd doar
cu 80386) i poate fi un operand registru sau un
operand n memorie. n urma execuiei acestei
instruciuni sunt actualizai indicatorii AF, OF, PF, SF i
ZF.

neg destinaie;

efectul este scderea din 0 a operandului destinaie i


depunerea rezultatului tot n operandul destinaie.
Instruciunea este echivalent cu secvena urmtoare
(cu condiia ca operandul destinaie s nu fie exact
registrul AX; dac aceast condiie nu e ndeplinit
putem folosi alt registru):

cmp destinaie, surs;

instruciune are aproape acelai efect ca i instruciunea


sub, singura deosebire fiind faptul c rezultatul scderii
nu mai este stocat n operandul destinaie, valorile vechi
ale celor doi operatori rmnnd neschimbate. n urma
acestei instruciuni sunt actualizai indicatorii AF, CF,
OF, PF, SF i ZF.

mul surs;

efectueaz o nmulire fr semn. Operandul surs este


nmulit cu registrul acumulator (AL dac sursa are o
reprezentare pe 8 bii, AX pentru o reprezentare pe 16
bii). n funcie de lungimea reprezentrii sursei,
rezultatul este stocat fie n registrul AX, fie n regitrii DX
i AX. n urma execuiei instruciunii sunt actualizai
indicatorii CF i OF.

imul surs;

efectueaz o nmulire cu semn, aceasta fiind singura


diferen fa de instruciunea mul. n urma execuiei
instruciunii sunt actualizai indicatorii CF i OF.

div surs;

efectueaz o nmulire fr semn. Registrul acumulator


(i eventual extensia lui) este mprit la operandul
surs. n funcie de lungimea reprezentrii sursei, ctul
este stocat fie n registrul AL, fie n registrul AX, iar
restul n regitrii AH, DX. Dac valoarea restului nu
poate fi reprezentat n registrul destinaie sau dac se

L.2 - 8/17

Setul de instructiuni al microprocesorului 8086

ncearc o mprire la 0, se genereaz o ntrerupere de


ordin 0.
idiv surs;

singura diferen fa de instruciunea div este ca


efectuaza o mprire cu semn.

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

MOV AX, 0903h


MUL AH

; load ax
;nmulire fr semn

0903h
001bh

MOV AX, 3883h


SUB AL, AH

;ncarc AX
;scade AH din AL

3883h
al=4bh

Exemple de erori de sintax:


MOV AX, CL
MOV var1, var2
MOV AL, 1234h
MOV DS, 1234h

4.3.

; operanzi inegali ca lungime


; ambii operanzi sunt locaii de memorie
; dimensiunea constantei este mai mare dect cea a registrului
; registrele de segment nu se incarc direct cu valori imediate

Instructiuni pentru operatii cu biti

4.3.1. Instruciuni logice


Instruciunile AND, OR, NOT i XOR - implementeaz cele patru operaii de baz: I, SAU,
Negaie i SAU-Exclusiv.
AND destinatie, sursa
OR destinatie, sursa
NOT sursa
XOR destinatie, sursa
Prin aceste instruciuni sunt implementate operaiile de baz ale logicii booleene. Operaiile
logice se efectueaz la nivel de bit, adic se combin printr-o operaie logic fiecare bit al
operandului 1 cu bitul corespunztor din operandul al doilea. Rezultatul se depune n primul
operand.
Exemple:
;exemplu pentru AND
MOV AL, 35h
AND AL, 0FBh

; ncarc AL
; AND cu valoare imediat
;
;

AND AL, 0F8h ;


;
;

L.2 - 9/17

00110101
11111011
-----------00110001
11111000
-----------00110000

Setul de instructiuni al microprocesorului 8086

;exemplu pentru OR
MOV AL, 35h
OR AL, 08h

;exemplu pentru XOR


a)
MOV AL, 35h
XOR 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

; terge coninutul lui AX

Instruciunea TEST - efectueaz operaia I logic fr a memora rezultatul.

modifica indicatorii de condiie

instruciunea nu modific coninutului primului operand.

TEST <parametru_1>,<parametru_2>
Exemple:
TEST AL, 00010000b

; se verific dac bitul D4 din al este zero sau nu

TEST BL, 0fh

;se verifica dac prima cifr hexazecimal din bl este 0

4.3.2. Instruciuni de deplasare i de rotire (SHL, SAL, SHR i SAR)


Aceste instruciuni realizeaz deplasarea (eng. shift) la stnga i respectiv la dreapta a
coninutului unui operand.
Exemplu: o deplasare la stnga cu 2 poziii binare este echivalent cu o nmulire cu 4.
Sintaxa instruciunilor:
SHL/ SHR

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

Setul de instructiuni al microprocesorului 8086

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

Figura 2. 1 Deplasare logic la dreapta


Dn

....

Dn-1

D1

D0

CF

SAR

Figura 2. 2 Deplasare aritmetic la dreapta

4.3.3. Instruciunile de rotire ROR, ROL, RCR, RCL


Realizeaz rotirea la dreapta sau la stnga a operandului, cu un numr de poziii binare.
Diferena fa de instruciunile anterioare de deplasare const n faptul c n poziia eliberat
prin deplasare se introduce bitul care iese din operand. Rotirea se poate face cu implicarea
indicatorului de transport (CF) n procesul de rotaie (RCR, RCL) sau fr (ROR, ROL). n
ambele cazuri bitul care iese din operand se regsete n indicatorul de transport CF. Figura
2. 3 indic cele dou moduri de rotire pentru o rotire la dreapta.

Dn

...............

D1

D0

CF

ROR

Dn

................

D1

D0

CF

RCR

Figura 2. 3 Rotiri cu i fr implicarea indicatorului CF, pentru o rotire la dreapta


Sintaxa fiind aceeai pentru toate cele patru instruciuni s-a ales ROR:
ROR

destinaie, <parametru>

Referitor la parametri, se aplic aceleai observaii ca i la instruciunile de deplasare.

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

4.4.1. Instruciuni de salt condiionat


n cazul instruciunilor de salt condiionat:

L.2 - 11/17

Setul de instructiuni al microprocesorului 8086

se testeaz o anumit condiie (printr-o instruciune care poziioneaz anumii


indicatori) i, n cazul n care condiia este adevrat, se efectueaz saltul; n caz
contrar se continu programul cu instruciunea urmtoare.

Instruciunile de salt opereaz asupra registrului de segment CS i a pointerului de


instruciuni IP. Datorit faptului c aceti regitri sunt modificai, programul nu se va mai
executa n ordinea secvenial, urmtoarea instruciune neaflndu-se n locaia de memorie
imediat urmtoare locaiei n care se afl instruciunea care a determinat saltul.
Sintaxa unei instruciuni de salt condiionat este:

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

Instruciuni de salt condiionat utilizate dup compararea a dou numere fr semn:


Instruciune

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

Instruciuni de salt utilizate dup compararea a dou numere cu semn (reprezentate n


complement fa de doi).
Instruciune

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

Setul de instructiuni al microprocesorului 8086

JL
JLE

<
<=

JE
JNE

=
!=

SF!=OF
SF!=OF
ZF=1
ZF=1
ZF=0

JNGE
sau JNG
JZ
JNZ

salt la mai mic


salt la mai mic sau
egal
salt la egal
salt la diferit

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

;ncarc primul numr n AX.


;Se compar cu cel de-al doilea numr
;primul numr este mai mic (Below) sau egal (Equal)
;dect al doilea?
;Dac nu, schimb locurile numerelor ntre ele

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:

; Instructiuni pentru AL < 10.


JA A10
........
........
........
........

; Instructiuni pentru AL = 10.


; Instructiuni pentru AL > 10.

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

; salt la eticheta OVERFLOW daca s-a setat


; indicatorul de depasire OF pe 1

OVERFLOW:

L.2 - 13/17

Setul de instructiuni al microprocesorului 8086

4.4.2. Instruciuni de salt necondiionat (CALL, RET i JMP)


Instruciunea CALL realizeaz un salt la adresa exprimat n instruciune. nainte de salt
procesorul salveaz pe stiv adresa de revenire n programul apelant (adresa instruciunii de
dup instruciunea CALL).
Instruciunea RET se plaseaz la sfritul rutinei i realizeaz revenirea n programul
apelant. n acest scop se extrage de pe stiv adresa de revenire i se face salt la aceast
adres. O rutin conine mai multe instruciuni RET dac exist mai multe ramificri n
secvena rutinei.
Sintaxele instruciunilor CALL i RET:
CALL <adres>
RET

[<constant>]

unde:
<adresa>

etichet (numele rutinei) sau o expresie evaluabil ca i


o adres

<constanta> -

indic numrul de poziii cu care trebuie s se descarce


stiva nainte de revenirea din rutin; n mod uzual acest
parametru lipsete

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 _ 1 ....


--->
|
....
|
|
|
CALL PROC_1 -CALL PROC_2 --

PROC_2 ....
....

----- RET
|
.... <-------.... <----------------....
|
....
------------- RET

Sintaxa instruciunii de salt necondiionat este urmtoarea:


jmp destinaie ;

salt necondiionat, transfer controlul la o anumit


instruciune, fr a mai fi testat nici o condiie

Cu ajutorul instruciunilor de comparare i de salt pot fi simulate structurile de decizie de tipul


if-then-else.

L.2 - 14/17

Setul de instructiuni al microprocesorului 8086

4.4.3. Instructiuni pentru controlul iteraiilor


Sunt instruciuni destinate crerii de bucle repetitive. Aceste instruciuni permit
implementarea unor structuri de control echivalente cu instruciunile "for", "while" "do-until"
din limbajele de nivel nalt.
Sintaxa instruciunilor este exemplificat doar pentru instruciunea LOOP:
LOOP
<adres>
unde: <adresa> este o etichet sau o expresie evaluabil la o adres
Aceste instruciuni efectueaz o secven de operaii:

decrementarea registrului CX (la fiecare iteraie acest registru este decrementat cu o


unitate) CX - folosit drept contor pentru numrul de iteraii al buclei,

testarea condiiei de terminare a ciclului i salt la etichet (la nceputul ciclului) n


cazul n care condiia nu este ndeplinit.

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

; altfel, se continu de aici

Aceast bucl are aceelai efect ca secvena din exemplul urmtor:


Exemplu:
MOV CX, 100
et1:

DEC CX
CMP CX, 0
JNE et1
Prima variant fiind ns mai eficient.

4.5.

Instruciuni pentru controlul procesorului

.
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

Setul de instructiuni al microprocesorului 8086

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

Setul de instructiuni al microprocesorului 8086

4. Aceeai problem, pentru date de un WORD.


5. S se implementeze operaii de nmulire cu anumite constante date, fr s se
foloseasc instruciunile de nmulire. De exemplu nmulirea cu 8, 16, 256, 10, 100.

6. S se implementeze urmtoarele operaii folosind instruciuni aritmetice i


instruciuni de deplasare :
AX = 7*AX2*BXBX/8
7. Care este coninutul registrului AX dup executarea urmtoarei secvene de instruciuni:
mov cl, 4
mov ax, 0702H
shl al, cl
shr ax, cl
8. S se scrie o secven de program care determin numrul de bii de 1 dintr-o valoare
reprezentat pe cuvnt.
9. S se testeze paritatea unui numar intreg a, citit de la tastatura. Rezolvati prin mai multe
variante.

L.2 - 17/17

S-ar putea să vă placă și