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 sa-
si 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
AL
offset
[100h]
[100h] AL, mov


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
AL
DS
offset
alfa
AL alfa, mov


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
beta
AX beta, mov
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
[BX]
AX [BX], mov
AX



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]
+
[SI] depl offset + =
AL depl[SI], mov
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>; se folosete pentru citirea unui port de intrare
OUT <adres_port>, <acumulator>; 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 ; ncarca AX cu 0009h
MOV BX,3 ; ncarc BX cu 0003h
ADD AL, BL ; adun partea low a registrului BX
; la partea low a registrului AX
;, iar rezultatul e pstrat n AL: 0ch

MOV AX, 0903h ; load ax 0903h
MUL AH ;nmulire fr semn 001bh


MOV AX, 3883h ;ncarc AX 3883h
SUB AL, AH ;scade AH din AL al=4bh

Exemple de erori de sintax:

MOV AX, CL ; operanzi inegali ca lungime
MOV var1, var2 ; ambii operanzi sunt locaii de memorie
MOV AL, 1234h ; dimensiunea constantei este mai mare dect cea a registrului
MOV DS, 1234h ; registrele de segment nu se incarc direct cu valori imediate

4.3. 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 ; ncarc AL 00110101
AND AL, 0FBh ; AND cu valoare imediat 11111011
; ------------
; 00110001
AND AL, 0F8h ; 11111000
; ------------
; 00110000

L.2 - 9/17
Setul de instructiuni al microprocesorului 8086
;exemplu pentru OR
MOV AL, 35h ;ncarc AL 00110101
OR AL, 08h ;OR cu valoare imediat 00001000
; ------------
; rezultat 00000111

;exemplu pentru XOR
a)
MOV AL, 35h ;ncarc AL 00110101
XOR AL, 08h ;xor cu valoare imediat 00001000
; ------------
;rezultat 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



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
Dn Dn-1 .... D1 D0 CF SAR
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 ; * 2
MOV BX, AX ;
SHL AX, 1 ; * 4
SHL AX, 1 ; * 8
ADD AX, BX ; * 10


4.4. 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 Instruciuni
echivalente
Explicaii
JC CF=1 JB,JNAE salt dac a fost un transport
JNC CF=0 JNB,JAE salt dac nu a fost un transport
JZ ZF=1 JE salt dac rezultatul este zero
JNZ ZF=0 salt dac rezultatul nu este zero
JS SF=1 salt dac rezultatul este negativ
JNS SF=0 salt dac rezultatul este pozitiv
JO OF=1 salt la depire de capacitate
JNO OF=0 salt daca nu este depire
JP PF=1 salt dac rezultatul este par
JNP PF=0 salt dac rezultatul nu este par

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

Instruciune Condiie Indicatori
testai
Instruciuni
echivalente
Explicaii
JA > CF=0,ZF=0 JNBE salt la mai mare
JAE >= CF=0 JNB,JNC salt la mai mare sau
egal
JB < CF=1 JNAE,JC salt la mai mic
JBE <= CF=1 sau ZF=1 JNA salt la mai mic sau egal
JE = ZF=1 JZ salt la egal
JNE != ZF=0 JNZ salt la diferit

Instruciuni de salt utilizate dup compararea a dou numere cu semn (reprezentate n
complement fa de doi).

Instruciune Condiie Indicatori
testai
Instruciuni
echivalente
Explicaii
JG > SF=OF sau
ZF=0
JNLE salt la mai mare
JGE >= SF=OF JNL salt la mai mare sau
egal

L.2 - 12/17
Setul de instructiuni al microprocesorului 8086
JL < SF!=OF JNGE salt la mai mic
JLE <= SF!=OF sau
ZF=1
JNG salt la mai mic sau
egal
JE = ZF=1 JZ salt la egal
JNE != ZF=0 JNZ 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] ;ncarc primul numr n AX.
CMP AX,[DI] ;Se compar cu cel de-al doilea numr
JBE DONE ;primul numr este mai mic (Below) sau egal (Equal)
;dect al doilea?
XCHG AX,[DI] ;Dac nu, schimb locurile numerelor ntre ele
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 ; Compara AL cu 10 .
JAE AE10
........ ; Instructiuni pentru AL < 10.

AE10: JA A10
........ ; Instructiuni pentru AL = 10.
........
A10: ........ ; 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 AX, BX
JO 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
Exempl u:
a)
CALL MY_PROC ;Apeleaz procedura
MOV AX,BX ;Aici se va reveni dup execuia procedurii
..........
MY_PROC ;start procedur
MOV CL,6 ;Prima instruciune a procedurii
.......... ; (urmtoarele instruciuni)

RET ;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 .... ---> PROC_2 ....
.... | .... | ....
| |
CALL PROC_1 -- CALL 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