Sunteți pe pagina 1din 26

1.

Microprocesorul I8086
1.1. Descriere general
Microprocesorul (P) I8086 este produs de firma INTEL i este primul P pe 16 bii.
A fost realizat n anul 1978 i a fost folosit pentru echiparea primelor microcalculatoare ale
firmei IBM.
I8086 este un circuit integrat de tip LSI, realizat cu un numr mare de componente
(echivalentul a aproximativ 30000 tranzistoare), n tehnologie HMOS (High performance
Metal-Oxid-Semiconductor). Acesta a fost ncapsulat ntr-o capsul cu 40 pini, de tip DIP
(Dual In-line Packaged). Aceast soluie de ncapsulare a impus multiplexarea n timp a
funciilor mau multor pini pentru a asigura numrul de semnale necesare funcionrii P-ului.
Caracteristicile de baz ale P I8086 sunt:
- lungimea cuvntului de date: 16 bii
- capacitatea de memorie adresabil: 1 MOctet
- numrul de regitrii interni: 14 regitrii de cte 16 bii
- numrul de moduri de adresare ale operanzilor: 8
- frecvena de tact acceptat: (5MHz pentru varianta 8086; 10MHz pentru varianta 80861; 8MHz pentru varianta 8086-2)
- tensiune de alimentare: +5Vcc
I8086 poate funciona att unitar n sisteme monoprocesor, ct i n sisteme
multiprocesor (pentru acesta putndu-se selecta modul de lucru minim sau maxim).

1.2. Terminalele circuitului


1.2.1. Simbolul circuitului
Pentru a se putea asigura construcia s-a ntr-o capsul cu un numr redus de pini (40
pini), precum i pentru asigurarea funcionrii sale n sisteme mono i multiprocesor, firma
productoarea l-a prevzut cu dou moduri de lucru distincte: modul MINIM i modul
MAXIM. Modul de lucru se poate stabilii prin alegerea strii 1 logic, respectiv 0 logic la
borna notat MN/MX a acestuia. Din acest motiv semnificaia unor terminale difer n funcie
de modul de lucru ales.
n Fig.1.1 se prezint simbolul i terminalele circuitului I8086 pentru situaia cnd
acesta este setat pe modul MINIM. n continuare se vor prezenta aceste terminale grupate
dup criterii funcionale.
1.2.2. Magistral de Adrese-Date-Stri (MADS)
MADS este format din liniile bidirecionale AD0AD15 i liniile de ieire A16/S3
A19/S6. Ea ndeplinete dou funcii i anume: magistral de date i stare, respectiv
magistral de adresare. Acest lucru se realizeaz prin multiplexarea liniilor disponibile. Se
poate spune c pe aceast magistral se poate scrie o adres pe 20 bii (A0-A19) i astfel are
rol de Magistral de Adresare. Cu alte setri n funciune liniile D0-D15 au rol de transmitere
date pe 16 bii, iar liniile S3-S6 se folosesc pentru informaii de stare. n aceast situaie
putem spune c liniile amintite formeaz o Magistral de Date i Stri.
Transferul de informaii se efectueaz n aa numitele cicluri de magistral. Astfel se
poate preciza c liniile aferente acestor magistrale au urmtoarele semnificaii:

AD0AD15 linii care prin multiplexare sunt utilizate pentru realizarea Magistralei
de Date, respectiv pentru partea mai puin semnificativ a Magistralei de Adrese;
A16/S3A19/S6 linii care prin multiplexare sunt folosite pentru Magistrala de
stare (S3-S6), respectiv pentru partea mai semnificativ a Magistralei de Adrese;
o biii S3 i S4 formeaz un cod ce precizeaz registrul segment intern care a
fost utilizat pentru generarea adresei, conform Tabelului 1;
o bitul S5 reprezint valoarea fanionului de ntreruperi IF (Interrupt Flag), de
autorizare a ntreruperilor mascabile;
o bitul S6=0 este neutilizat.

Fig.1.1. Simbolul P I8086 i terminalele sale pentru modul de lucru Minim.

Toate liniile AD0AD15 i A16/S3A19/S6, pot fi trecute de ctre P n stare HZ (nalt


impedan), pentru a permite utilizarea magistralelor sistemului i de ctre alte dispozitive.
Tabel 1: Modul de selectare al registrului segment folosit pentru generarea adresei
S4
0
0
1
1

S3
0
1
0
1

Registru segment
Adiional (Extra)
Stiva
Cod
Date

1.2.3. Semnale de comand pentru Memorie i modulul I/O


Semnalele de comand pentru Memorie i modulul I/O, prezentate n Fig.1 sunt
utilizate pentru interconectarea P-ului cu blocul de memorie sau cu modulul I/O i
demultiplexarea liniilor MADS. Aceste semnale sunt:
ALE (Address Latch Enable) este activat de P n primul tact al oricrui ciclu de
magistral pentru a marca faptul c magistrala conine o informaie de adres
valid. Aceast informaie trebuie memorat pe frontul cztor al semnalului ALE
n circuite de tip latch, de unde se transmite spre blocul de memorie sau spre
modulul I/O;
BHE/S7 (Bus High Enable/Status) are dublu rol: activ pe 0 se folosete n
primul tact al ciclului de magistral pentru a selecta modulul de memorie legat la

MD, n jumtatea mai semnificativ a acesteia (MD8-MD15); n rest este utilizat


ca i semnal de stare (S7);
M/IO (Memory/Input-Output) se folosete pentru selectarea i activarea
circuitului de memorie, respectiv de I/O. Astfel dac ar valoarea 1 logic se
execut un acces la memorie, iar dac se seteaz pe 0 se execut un acces la
modul I/O. seteaz calea de acces (la memorie sau la modulul I/O);
DT/R (Data Transmit/Receive) este generat de ctre P pentru a indica direcia
de transfer a datelor dintre P i modulul de memorie, respectiv modulul I/O.
Astfel dac are valoarea 1 logic datele sunt transmise de ctre P (ciclu de
scriere), iar dac are valoarea 0 logic datele sunt recepionate de ctre P (ciclu
de citire);
RD (ReaD) se folosete ntr-un ciclu de citire pentru activarea dispozitivelor care
pun informaia pe magistral;
WR (WRite) se folosete ntr-un ciclu de scriere pentru activarea dispozitivelor
care preiau informaia de pe magistral;
DEN (Data ENable) este pus 0 logic cnd liniile AD0AD15 au rol de
magistral de date i pe ele se gsete o informaie valid.

1.2.4. Semnale de ntrerupere i acces la magistrale


Terminalele INTR, NMI permit cereri de ntreruperi mascabile, respectiv nemascabile
din partea unor periferice. Rspunsul de confirmare a unei cereri de ntrerupere mascabil se
transmite perifericului solicitant, prin activarea semnalului INTA.
Semnalul HOLD se activeaz de ctre alt circuit de acces la memorie (DMA Direct
Memory Access) sau de alt microprocesor care solicit accesul la magistralele sistemului.
Dac microprocesorul cedeaz controlul la magistralele sistemului acesta transmite semnalul
HLDA (HoLD Acknowledge) pentru a semnaliza acest lucru
READY este un semnal de intrare prin intermediul cruia un modul de memorie sau un
periferic anun microprocesorul c este pregtit s efectueze transferul de date solicitat. Dac
acesta are valoarea logic 0, microprocesorul va trebui sa prelungeasc ciclurile de
magistral prin introducerea unor ntrzieri. Aceste ntrzieri vor fi introduse pn cnd
semnalul READY va avea valoarea 1 logic.

1.3. Demultiplexarea magistralei de date-adrese-stri


Pentru conectarea microprocesorului ntr-un sistem digital presupune conectarea
acestuia cu celelalte componente ale sistemului (memorie i module I/O). Acest lucru
presupune demultiplexarea acesteia n cele dou componente i anume: magistral de date
(MD), respectiv magistral de adrese (MA). Pentru realizarea acestui lucru se poate apela la
trei circuite de tip 8282 i dou circuite de tip 8286 (Fig.1.2).
Circuitul 8282 este un registru de tip latch de 8 bii. Transferarea (bascularea)
informaiei de pe bornele sale de intrare (DI) pe bornele sale de ieire (DO) se efectueaz pe
frontul cztor al semnalului aplicat bornei STB (STroBe). n momentul cnd pe MADS este
scris un cuvnt de adres pe 20 bii, semnalul ALE care este conectat la bornele STB ale
circuitelor 8282 va fi activat. Frontul su cztor determin trecerea informaiei de pe bornele
DI ale circuitelor 8282 pe bornele DO ale acestora, fiind memorat aici ca i adres.
Circuitele 8286 sunt circuite amplificatoare de magistral i sunt folosite pentru
facilitarea funcionrii liniilor AD0AD15 ca i magistral de date. Transferarea informaiilor
ntre cele dou perechi de borne A0A7 i B0-B7 ale circuitelor 8286 se face prin activarea
semnalelor EN (EN=0). Acestea (semnalele EN) sunt conectate la borna DEN a

microprocesorului care se activeaz cnd pe MD se regsesc date valide. Semnalul DT/R de la


P este conectat cu semnalele T (Transmit) de la 8286 i selecteaz modul de transfer a
datelor pe magistrala de date.
BHE
AD19/S6

AD16/S3

DI7
DI3
.
DI0
STB

AD15

DI7

AD8

.
DI0
STB

AD7

DI7

AD0

.
DI0
STB
A7
.
A0

ALE

8
2
8
2

DO7
DO3
.
DO0

BHE
A19

A16

8
2
8
2

DO7

A15

.
DO0

A8

8
2
8
2

DO7

A7

.
DO0

A0

8
2
8
6

B7

D15

.
B0

D8

8
2
8
6

B7

D7

.
B0

D0

EN

DEN
A7

DT/R

.
A0
T

EN

Fig.1.2. Schema de demultiplexare a magistralelor.

1.4. Organizarea memoriei la sistemele cu P I8086


Memoria direct adresabil a P I8086 este de 1 Moctet (1024 kO) i este organizat
pe dou blocuri de cte 512 kO fiecare notate HIGH i LOW (Fig.1.3). La blocul notat HIGH
se conecteaz bornele AD8AD15, iar la blocul notat LOW se conecteaz bornele AD0AD7.
M/IO
LOW
FFFFE
FFFFC

HIGH
FFFFF
FFFFD
A1

A19

A1...A19

A1

A19

CS1
CS2

4
2
0

5
3
1

D8...D15

CS1
CS2

BHE

A0

D0...D7

Fig.1.3. organizarea memoriei la sisteme cu P I8086.

Blocurile de memorie sunt formate din 8 linii de date (D0D7), 20 linii de adrese (A0
A19) i dou borne de selectare (CS1 i CS2). Locaiile de memorie din blocul LOW au
asociate adrese pare, fiind selectate doar dac bitul mai puin semnificativ (LSB) de pe MA,
A0, conectat la borna CS2 a acestuia este 0. Locaiile din blocul HIGH au asociate adrese
impare i sunt selectate doar dac semnalul BHE de la P, conectat la borna CS2
corespunztoare este activ (0 logic).
Acest mod de organizare al memoriei permite realizarea de transferuri de date, ntre
P i memorie, sub form de octet sau de cuvnt (pe 16 bii) de la orice adres. Din acest
punct de vedere se pot realiza patru tipuri de transfer de date:
transfer pe octet la adres par (adresa x):
o BHE=1 i A0=0 atunci octetul din locaia x precizat pe liniile A1A19 este
depus pe liniile D0D7 ale MD;
transfer pe cuvnt la adres par (adresa x):
o BHE=0 i A0=0 atunci octeii din locaiile x i x+1 precizate pe liniile A1
A19 sunt depui pe liniile D0D7, respectiv pe liniile D8D15ale MD;
transfer pe octet la adres impar (adresa x+1):
o BHE=0 i A0=1 atunci octetul din locaia x+1 precizat pe liniile A1A19
este depus pe liniile D8D15 ale MD;
transfer pe cuvnt la adres impar (adresa x+1):
o BHE=0 i A0=1 atunci octetul din locaia x+1 precizat pe liniile A1A19
este depus pe liniile D8D15 ale MD;
o se incrementeaz adresa de pe liniile A1A19;
o BHE=1 i A0=0 atunci octetul din locaia x+2 precizat pe liniile A1A19
este depus pe liniile D0D7 ale MD.

1.5. Cicluri de magistral


Pentru efectuarea transferului de informaii (date, instruciuni) ntre P i memorie
sau periferice, se execut aa numitele cicluri de magistral. n funcie de sensul de transfer
al informaiei, ciclurile de magistral pot fi de citire (de intrare) i de scriere (de ieire).
Fiecare ciclu de magistral necesit minim patru impulsuri de tact, notate T1-T4.
1.5.1. Ciclul de citire
Ciclul de citire se execut de fiecare dat cnd se aduce o instruciune din memorie
sau cnd se aduce o dat din memorie (comand de tip mov) sau de la un periferic (comand
de tip in).
La nceputul ciclului (Fig.1.4) semnalul M/IO este poziionat conform dispozitivului
accesat (1 dac se acceseaz o memorie, 0 dac se acceseaz un periferic). Totodat se
scrie i semnalul DT/R pe valoarea 0 logic pentru a marca o operaie de citire. Aceste
semnale vor rmne neschimbate pe toat durata ciclului.
Pe durata tactului T1, P-ul pune pe liniile A19/S6A16/S3 i AD15AD0, adresa de la
care se dorete s se citeasc data. Totodat se activeaz semnalul ALE. Frontul cztor al
semnalului ALE se produce atunci cnd adresa este stabil pe MADS i trebuie folosit pentru
activarea circuitelor tampon de reinere a adresei (Fig.2).
n timpul tactului T2, informaiile de pe liniile A19/S6A16/S3 se schimb, devenind
informaii de stri ale P-ului. De asemenea se activeaz semnalele RD i DEN ce vor fi
utilizate de ctre circuitele exterioare pentru activarea dispozitivului care trebuie s depun
datele pe liniile MD (D15D0).

Fig.1.4. Ciclul de citire n modull minim al P I8086.

Pe frontul cresctor
c
all tactului T33 P-ul testteaz starea liniei READ
DY pentru a verifica
dac peerifericul caare trebuie s
s depun data
d pe MD
D a fcut-o. Dac acestt semnal geenerat de
dispozittivul surs este gsit activ
a
(1 logic)
l
se co
ontinu trannsferul dateii. n caz co
ontrar se
introducc taci supplimentari de
d ateptarre (Tw), pn la actiivarea sem
mnalului REA
ADY. n
continuuare, se preia date de pee MD, iar laa nceputul strii T4 see dezactiveaaz semnaleele RD i
DEN inddicnd sfritul cicluluii.
1.5.2. Ciclul
C
de scrriere
Ciclul de sccriere (Fig.11.5) se execcut cnd see transmite o dat spre memorie (ccomand
de tip mov)
m
sau sprre un perifeeric (comannd de tip ou
ut) i este asemntor ccu ciclul de citire.

Fig.5.. Ciclul de scrriere n modul minim al P I8086.

La tactul T1 pe linia DT/R se genereaz 1 logic pentru a marca o operaie de scriere.


Pe liniile AD15AD0 se va depune n starea T2, informaia ce se transmite ctre memorie sau
portul I/O, fr a mai exista starea HZ ca i n cazul ciclului de citire.
La nceputul tactului T2 se activeaz semnalele WR i DEN ce vor fi utilizate de ctre
circuitele exterioare pentru activarea dispozitivului care trebuie s primeasc datele pe liniile
MD (D15D0).
Semnalul READY este testat i n acest caz pe front scztor al tactului T3, este utilizat
pentru a verifica dac dispozitivul care urmeaz s primeasc dat este pregtit.
n concluzie se poate spune c n general durata unui ciclu de magistral este de 4
impulsuri de tact, dar ea poate fi prelungit prin introducerea unor taci de ateptare Tw ntre
tacii T3 i T4. Acest lucru este posibil n cazul perifericelor lente.

1.6. Structura intern a P I8086


1.6.1. Schema bloc
Schema bloc a microprocesorului I8086 (Fig.1.6) a pornit de la conceptul de
procesare paralel (parallel processing) aceasta fiind implementat n structura sa. Astfel P
I8086 conine dou uniti distincte care opereaz asincron, formnd un mecanism unitar de
aducere i de execuie a instruciunilor (Fetch and Execute). Cele dou uniti sunt:
- unitatea de execuie a instruciunilor EU (Execution Unit)
- unitatea de interfa cu magistrala extern BIU (Bus Interface Unit)

Fig.1.6. Structura intern a P I8086.

Acest tip de arhitectur permite o utilizare mai eficient a magistralei sistemului fa


de arhitecturile specifice microprocesoarelor pe 8 bii. Practic se elimin o parte din timpii
mori ai magistralei, n sensul c n timp ce EU execut o instruciune i nu utilizeaz
magistrala, cealalt unitate (BIU) aduce n avans urmtoarele instruciuni, pe care le
depoziteaz ntr-o stiv de memorie intern, denumit QFIFO.
1.6.2. Unitatea de execuie (EU)
Eu are rolul de a decodifica i executa instruciunile programului, fiind constituit din
urmtoarele componente de baz:

- unitatea aritmetic i logic (UAL);


- registru de fanioane;
- opt regitrii interni de uz general, (de date i pointeri/index);
- bloc logic de comand i sincronizare.
A. Unitatea aritmetic i logic (UAL)
UAL este un dispozitiv combinaional, capabil s efectueze operaii aritmetice i
logice asupra informaiei reprezentate n cod binar, pe 8 sau 16 bii. Este prevzut cu dou
intrri i o ieire i poate efectua urmtoarele categorii de operaii:
operaii aritmetice: sum, diferen, nmulire, mprire, incrementare,
decrementare, comparaii, etc;
operaii logice: SI, SAU, SAU EXCLUSIV;
deplasri, rotiri, etc.
Dup efectuarea unei operaii, UAL actualizeaz fanioanele (bii) registrului de
fanioane (F).
B. Registrul de fanioane (F)
Registrul de fanioane denumit i registru indicator de condiii, este un registru pe 16
bii din care numai 9 sunt utilizai (Fig.1.7).
Poziiafanioanelornregistruldefanioane
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
* * * * OF DF IF TF SF ZF * AF * PF * CF
Fig.1.7. Structura registrului F al P I8086.

ase dintre biii registrului F (CF, PF, AF, ZF, SF i OF) sunt denumii fanioane de
stare, i sunt similari cu cei al registrului F al microprocesoarelor anterioare pe 8 bii. Acetia
ofer informaii referitoare la rezultatul ultimei operaii executate n UAL. Ceilali 3 bii (IF,
TF, DF) sunt denumii fanioane de control i permit stabilirea prin program a unor opiuni
privind funcionarea P-ului.
n continuare se prezint semnificaia fiecrui bit din registrul de fanioane,
precizndu-se att simbolul ct i rolul fiecruia:
B11 - OF (Overflow Flag) este un indicatorul de depire aritmetica (OF=1)
dimensiunea rezultatului depete capacitatea locaiei de destinaie;
B10 - DF (Direction Flag) se folosete n transmisia irurilor de date. Cnd
(DF=1) irul se transmite cresctor, cnd (DF=0) irul se transmite descresctor
B9 - IF (Interrupt Flag) autorizeaz (IF=1) sau blocheaz (IF=0) ntreruperile
mascabile;
B8 - TF (Trap Falg) seteaz funcionarea microprocesorului n regim pas cu pas
prin generarea de ntreruperi dup fiecare instruciune executat (TF=1)
B7 - SF (Sign Flag) - indicatorul de semn - este 1 daca cel mai semnificativ bit al
rezultatului ia valoarea 1;
B6 - ZF (Zero Flag) se folosete pentru a determina cnd rezultatul unei operaii
este nul (ZF=1) sau cnd difer de zero (ZF=0).
B4 - AF (Auxiliary Carry Flag) - indicator de transport auxiliar;
B2 - PF (Parity Flag) se folosete pentru a determina paritatea binar a unui
numr. (PF=1) numrul conine un numr par de bii n componena sa, (PF=0)
numrul conine un numr impar de bii n componena sa;
B0 - CF (Carry Flag) se folosete pentru determinarea efecturii unui transport
la calcul. El se numete bit de transport i devine 1 cnd la o adunare numrul este
mai mare de 16 bii sau la o scdere cnd rezultatul este mai mic dect zero.

Toi biii registrului F pot fi modificai prin program. n cazul celor care nu au
dedicate instruciuni speciale, modificarea valorilor lor se poate face copiind prin stiv
coninutul registrului F ntr-un registru general, se face modificare dup care se recopiaz
napoi n F.
C. Registrul de uz general
n componena EU a P-ului I8086 se disting dou categorii de regitrii generali de
cte 16 bii, accesibili utilizatorului:
- regitrii de date;
- regitrii indicatori (pointeri) i index.
Regitrii de date
Regitrii de date fac parte din grupa regitrilor generali i sunt folosii pentru
memorare temporar a unor informaii. Oricare dintre cei patru regitrii pot fi utilizai ca
surs sau destinaie a unui operand n operaii aritmetice, logice, deplasri sau rotiri.
Totui unii regitrii au funcii speciale, motiv pentru care au i primit denumiri
distincte: registru Acumulator, Baz, Contor sau Date. Aceast alocare de denumiri distincte
pornete de la ideea c registrul BX (Baz) este utilizat la adresarea cu baz pentru a se
stoca baza deplasamentului. Registrul CX (Contor) se recomand pentru utilizarea sa ca
registru de contor n instruciuni de tip bucl.
Fiecare registru poate fi folosit ca i registru de cuvnt (de 16 bii) sau ca doi regitrii
de octet (8 bii). Acetia vor fi notai prin intermediul unei litere specifice registrului (A, B, C
sau D) i a unui sufix specific modului de utilizare (X 16 bii; H 8 bii partea superioar High; L 8 bii partea inferioar Low).
Exemplu: instruciunea MOV AX,12h transfer n registrul pe 16 bii AX, numrul
hexazecimal 23h (deoarece acest numr este scris pe 8 bii, instruciunea va pune valoarea
00h pe zona mai semnificativ a registrului AX). Acelai rezultat se poate obine cu
urmtoarele dou instruciuni: MOVAL,12h (care transfer numrul 23h n partea inferioar a
registrului AX), respectiv MOV AH,00h (care transfer numrul 00h n partea superioar a
registrului AX).
Regitrii indicatori i index
Regitrii indicatori i index sunt regitrii ce conin informaii utilizate n formarea
cuvintelor de adres. EU al P-ului I8086 conine doi regitrii index, notai SI i DI, i doi
regitrii pointer de adrese notai SP i BP.
Registrul index surs (SI Source Index), respectiv registrul index destinaie (DI
Destination Index) sunt regitrii generali, similari regitrilor de date, n sensul c pot fi
folosii n instruciuni aritmetice i logice ca i acetia, dar numai pe 16 bii. Totui scopul lor
principal este acela de a stoca deplasamentul pe 16 bii a adresei curente n segmentul de date
sau n segmentul auxiliar al memoriei. Practic ei se utilizeaz n instruciuni cu adresare
indexat. n anumite instruciuni cu adresare implicit, ce opereaz cu iruri de octei sau de
cuvinte, sunt folosii pentru calculul adresei sursei (registru SI) sau a destinaiei (registru DI).
Indicatorul de stiv (SP Stack Pointer) conine deplasamentul n segment de stiv a
crei adres de baz este definit prin registrul segment de stiv (SS), identificnd astfel vrful
stivei.
Indicatorul de baz (BP Base Pointer) conine de asemenea un deplasament n
segmentul de stiv curent, utilizat atunci cnd folosim modul de adresare cu baz. Permite
transferuri de date n/din orice loc al stivei. Este folosit n mod uzual de subrutine a cror
parametrii sunt transmii prin stiv.

1.6.3. Unitatea de interfa cu magistrala extern (BIU)


BIU asigur legtura microprocesorului cu lumea exterioar i emite semnalele
necesare desfurrii ciclului de magistral. n componena sa se regsesc:
- memoria de ateptare QFIFO;
- regitrii de segmentare a memoriei;
- registrul indicator de instruciuni, IP;
- sumatorul de adrese;
- bloc logic de comand al BIU.
A. Memoria de ateptare QFIFO
QFIFO este o memorie de tip stiv intern care conine 6 locaii de cte un octet
fiecare. n aceast stiv special se introduc octeii de instruciuni preluai din memorie, iar de
aici sunt preluai de ctre EU n ordinea n care au fost introdui. n aceast situaie se poate
spune c QFIFO se supune regulii FIFO (First In First Out). Denumirea conine i litera Q
care vine de la faptul c instruciunile ateapt s fie preluate de aici (Queue).
Dac la un moment dat n QFIFO exist cel puin dou locaii libere i dac EU nu
cere un acces la magistral, atunci BIU aduce din memoria de program doi octei ce
reprezint coduri de instruciuni. Practic n acest mod se asigur un numr de maxim 6 octei
de instruciuni n ateptare pentru a putea fi preluai de EU. Totui se face precizarea c dac
EU cere accesul la magistral n momentul n care BIU transfer octei de instruciuni, acesta
din urm finalizeaz sarcina nceput i abia apoi cedeaz accesul la magistral.
n cazul n care se efectueaz un salt n program, coninutul stivei QFIFO se terge i
se rencepe umplerea sa cu octei de instruciuni de la noua adres de execuie a programului.
n consecin, programele cu multe ramificaii se vor executa mai lent, prin neutilizarea la
capacitate maxim a procesrii paralele.
B. Regitrii segment (de segmentare a memoriei)
innd cont de faptul c acest microprocesor are doar 16 bii i se dorete o adresare
direct a memoriei de pn la 1Mbyte, a fost necesar segmentarea memoriei n pachete de
cte 64Kbyte care pot fi accesate cu adrese de 16 bii. Totui la un moment dat n memorie
sunt active doar 4 segmente de memorie care sunt denumite astfel:
Segment de Cod conine programul Cod Obiect care se execut;
Segment de Date conine datele curente ale programului;
Segment de Stiv conine stiva sistemului;
Extra Segment care reprezint un segment auxiliar de date.
Pentru a se putea accesa un pachet de segment din memorie, BIU conine patru
regitrii de segment, de cte 16 bii, denumii n funcie de segmentul de memorie deservit:
CS (Cod Segment) registru segment de cod care indic adresa iniial a
segmentului de cod;
DS (Data Segment) registru segment de date care indic adresa iniial a
segmentului de date;
SS (Stack Segment) registru segment de stiv care indic adresa iniial a
segmentului de stiv;
ES (Extra Segment) registru segment suplimentar care indic adresa iniial a
segmentului adiional de date.
Regitrii segment se ncarc cu numere pe 16 bii ce indic adresa iniial a
segmentului de memorie de 64 Kbyte pe care l deservete. Pentru a obine adresa fizic de
nceput a unui segmente de memorie, coninutul registrului segment corespunztor se
deplaseaz la stnga cu o poziie hexazecimal (sau cu 4 poziii binare), ceea ce n zecimal

este echivalent cu o nmulire cu 16 (n binar nseamn o deplasare la stnga cu 4 biii, iar n


hexazecimal nseamn o nmulire cu 10h). innd cont de toate cele prezentate mai sus se
poate spune c oricare segment din memorie de 64kO poate s ndeplineasc orice rol, atta
timp ct adresa sa este memorat n registru segment corespunztor.
Astfel cele patru segmente de cte 64kO pot fi amplasate oriunde n memorie. La un
moment dat ele pot fi separate, adiacente sau chiar intersectate. Practic prin schimbarea
adresei memorate ntr-un anumit registru se schimb i locaia de memorie utilizat.
C. Registrul indicator de instruciuni (IP Instructions Pointer)
IP este denumit i indicator de program i are rol n indicarea adresei instruciunii ce
urmeaz a fi executat. IP conine un deplasament i nu adresa fizic a urmtoarei
instruciuni. Adresa fizic a urmtoarei instruciuni este o adres pe 20 bii i ea trebuie
format ca atare. Pentru realizarea acestui lucru se ia coninutul segmentului de cod CS, se
deplaseaz la stnga cu 4 poziii binare i apoi se adun coninutul deplasamentului memorat
n IP.
La fiecare aducere a unei instruciuni din memorie, BIU actualizeaz coninutul
registrului IP, pentru a indica urmtoarea instruciune din irul de instruciuni ce formeaz
programul.
D. Sumatorul de adrese
Pentru generarea adresei necesare n timpul accesului la modulul de memorie, BIU
trimite pe magistrala extern o adres reprezentat printr-un cuvnt pe 20 bii, care se
formeaz prin nsumarea coninutului unuia dintre regitrii segment deplasat la stnga cu
patru poziii binare i a unui cuvnt de 16 bii denumit deplasament, coninut ntr-unul dintre
regitrii indicatori.
Aceast nsumare a celor dou cuvinte pe 16 bii necesar pentru realizarea unui
cuvnt pe 20 bii, este realizat de un circuit combinaional denumit Sumator de Adrese.
E. Blocul de comand
Blocul de comand al BIU (denumit i Logica de Comand) este un circuit logic
complex care genereaz att segmente de comand necesare desfurrii ordonate a tuturor
operaiilor din BIU, ct i semnalele de comand spre exterior (scriere, citire din memorie sau
port). Totodat se ocup i cu gestionarea sistemului de ntreruperi.
1.6.4. Stabilirea adresei fizice a memorie
Accesul la o anumit locaie de memorie din cadrul unui segment se realizeaz prin
scrierea unui numr de 16 bii, denumit deplasament, ntr-un anumit registru index sau
pointer (Fig.1.8). Formarea adresei unei anumite locaii de memorie (adres pe 20 bii) se
realizeaz prin nsumarea numrului format din coninutului registrului segment
corespunztor deplasat la stnga cu 4 bii i deplasamentul locaiei respective.
Deplasamentele n segmentul de date i extrasegment se pot nscrie n regitrii SI, DI, BX etc,
iar deplasamentele n segmentul de stiv se realizeaz prin intermediul regitrilor SP i BP.
Se face precizarea c pentru segmentul de cod deplasamentul se gsete tot timpul n registrul
indicator de instruciuni (IP Instructions Pointer).
Dac se ia ca i exemplu transferarea unei instruciuni spre microprocesor se apeleaz
la CS pentru a se determina locaia segmentului de memorie de 64kO unde se gsete
instruciunea, determinndu-se astfel segmentul de cod. Acesta este nmulit cu numrul 16
(zecimal) pentru a determina adresa fizic a segmentului de cod (se face precizarea c adresa
memorat n CS reprezint adresa logic a segmentului de cod). Ulterior numrul obinut se

va aduna cu coninutul registrului IP, determinndu-se astfel adresa fizic a octetului de


instruciune ce urmeaz a fi transferat.

Fig.1.8. Stabilirea adreselor fizice ale memorie P-ului I8086.

Coninuturile regitrilor DS i ES, deplasate la stnga cu patru poziii binare, indic


adresele iniiale (de nceput) ale Segmentului de date, i respectiv a Extrasegmentului de
64kO. Pentru a obine adresele fizice care se doresc a fi apelate, se adun valoarea
determinat anterior cu valoarea coninut ntr-unul dintre regitrii index DI sau SI. Se poate
utiliza i registrul general BX.
Pentru determinarea adresei unei locaii din stiv se folosete registru SS care deplasat
la stnga cu 4 poziii binare indic adresa fizic de nceput a Segmentului de Stiv de 64 kO.
Pentru a obine adresa fizic a locaiei dorite se adun valoarea obinut anterior cu coninutul
registrului pointer SP (dac se dorete obinerea vrfului stivei) sau cu coninutul registrului
pointer BP (dac se dorete obinerea unei locaii oarecare din stiv).
Recapitulnd, regitrii care pot fi folosii pentru segmentarea memoriei sunt:
IP (Instructions Pointer) indicator de program care indic adresa urmtoarei
instruciuni (el conine n realitate deplasamentul necesar pentru a ajunge la
adresa fizic);
CS (Cod Segment) registru segment de cod care indic adresa iniial a
segmentului de cod;
DS (Data Segment) registru segment de date care indic adresa iniial a
segmentului de date;
SS (Stack Segment) registru segment de stiv care indic adresa iniial a
segmentului de stiv;
ES (Extra Segment) registru segment suplimentar care indic adresa iniial a
segmentului adiional de date;
SI (Source Index) registru general care poate fi folosit ca i registru pe 16 bii
i suplimentar se folosete pentru transmiterea deplasamentului sursei n
segmentul de date sau n segmentul auxiliar de date;
DI (Destination Index) registru general care poate fi folosit ca i registru pe
16 bii i suplimentar se folosete pentru transmiterea deplasamentului
destinaiei n segmentul de date sau n segmentul auxiliar de date;
SP (Stack Pointer) se folosete pentru transmiterea deplasamentului n
segmentul de stiv;
BP (Base Pointer) se folosete pentru transmiterea deplasamentului n
segmentul de stiv cnd se folosete modul de adresare cu baz.

2. Noiuni de programare n limbaj de asamblare


Setul de instruciuni al P-ului I8086 cuprinde 96 de instruciuni de baz, dar fiecare
are mai multe variante, n funcie de modul de adresare i de tipul operanzilor utilizai. n
continuare se vor prezenta modurile de adresare ale operanzilor instruciunilor i cteva
categorii de instruciuni, considerate de baz.

2.1. Moduri de adresare


Datele asupra crora se execut operaia (operaiile) indicat de o instruciune,
denumite operanzi, pot fi: pri ale instruciunii, coninuturile unor regitrii interni,
coninuturile unor locaii de memorie, coninuturile unor porturi de I/O. n aceste condiii
I8086 este prevzut cu opt moduri de adresare, dup cum urmeaz s se prezinte n
continuare. Se face precizarea c primele dou adresri sunt adresri simple, pe cnd restul ce
vor fi prezentate sunt adresri care se refer la operanzi memorai n adresa fizic compus
din 20 bii. Prin urmare toate aceste adresri trebuie s identifice segmentul de 64kO la care
se refer i apoi prin adunarea unui deplasament (Depl) se va determina adresa fizic (AF) a
locaiei de memorie n care se gsete operandul.
2.1.1. Adresare de registru
Acest mod de adresare este posibil att timp ct operandul se afl ntr-un registru
intern al P-ului, specificat explicit n cadrul instruciunii.
Exemplu:
MOVAX,BX

Prin aceast instruciune se efectueaz copierea coninutului registrului BX


registrul AX.

2.1.2. Adresare imediat


Operandul este o constant pe 8 sau 16 bii, care se scrie explicit n codul
instruciunii.
Exemplu:
MOVAH,022h (Copiaz22hnAH)
MOVAX,022h (Copiaz00hnAHi22hnAL)

Aceast instruciune poate fi folosit doar pentru ncrcarea regitrilor generali. Ea nu


poate fi folosit pentru ncrcarea regitrilor segment.
2.1.3. Adresare direct
Adresarea direct presupune accesarea unei locaii de memorie pentru care
deplasamentul este precizat direct n corpul instruciunii, prin intermediul unui numr pe 16
bii. Acest mod de adresare consider implicit faptul c se opereaz cu segmentul de date
(DS). Formula de calcul pentru adresa fizic este:
AF=(DS)*10h+Depl
Exemplu:
MOVBX,[1234h]

Prin intermediul acestei instruciuni se copiaz coninutul locaiei de memorie apelat


n registru BL i a urmtoarei n registru BH.

Dac DS=1000h AF=1000h*10h+1234h=11234h


Astfel, prin intermediul acestei instruciuni coninutul locaiei de la adresa (11234h)
se copiaz n BL; iar coninutul locaiei de memorie de la adresa (11235h) se copiaz n BH.
2.1.4. Adresare indirect prin registru
Acest mod de adresare este asemntor cu adresarea direct, doar cu diferena c n
acest caz deplasamentul este scris ntr-un registru (nu este precizat direct n corpul
instruciunii). Regitrii n care poate fi memorat deplasamentul sunt: BX, DI, SI, BP. Dac
pentru deplasament se folosesc regitrii BX, DI, SI, atunci pentru determinarea segmentului de
64kO se consider registrul DS. Dac pentru deplasament se folosete registrul BP, atunci
pentru determinarea segmentului de 64kO se consider registrul SS. Formulele de calcul
pentru adresa fizic sunt:
AF=(DS)*10h+(BX)sauAF=(DS)*10h+(DI)sauAF=(DS)*10h+(SI)
AF=(SS)*10h+(BP)
Exemplu:
MOVBX,[DI]

Prin intermediul acestei instruciuni se copiaz coninutul locaiei de memorie apelat


n registru BL i a urmtoarei n registru BH.
Dac DS=1000h i DI=1234h AF=1000h*10h+1234h=11234h
Acest mod de adresare este util n momentul n care deplasamentul folosit pentru
determinarea adresei efective este variabil, cum este n cazul n care se dorete transferul mai
multor valori n/din memorie atta timp ct locaiile de memorie utilizate pentru transfer sunt
consecutive.
2.1.5. Adresare bazat
Acest mod de adresare se poate folosii pentru transferul datelor n/din segmentul de
date, respectiv segmentul de stiv. Pentru formarea adresei se folosete un registru de baz
(BX pentru memoria de date, respectiv BP pentru memoria din stiv) la care se adaug i un
deplasament suplimentar pe 16 bii care se scrie explicit. Formulele de calcula ale adresei
fizice sunt:
AF=(DS)*10h+(BX)+Depl
AF=(SS)*10h+(BP)+Depl
Exemplu:
MOV[BX].100h,AL

Aceast instruciuni copiaz coninutul registru AL n locaia de memorie apelat.


Dac DS=1000h i BX=10h AF=1000h*10h+10h+100h=10110h
Foarte important de observat este faptul c registrul care se folosete pentru
determinarea segmentului de 64kO se consider implicit n funcie de registrul folosit ca i
baz (DS dac pentru baz se folosete BX, respectiv SS dac pentru baz se folosete BP).
Acest mod de adresare este util n momentul n care se dorete transferul unui grup de
date de la o anumit adres din locaia de memorie.
2.1.6. Adresare indexat
Ca i mod de funcionare este identic cu adresarea bazat. Diferena major este dat
de faptul c se poate folosi doar pentru transferul datelor n/din segmentul de date. n plus,
pentru precizarea deplasamentului, registru de baz (BX) a fost nlocuit cu regitrii index DI
sau SI. Formulele folosite pentru determinarea adresei fizice sunt:

AF=(DS)*10h+(DI)+DeplsauAF=(DS)*10h+(SI)+Depl
Exemplu:
MOVDL,50.[DI]

Dac DS=1000h i DI = 100h AdrF=1000h*10h+100h+50h=10150h


Acest mod de adresare se recomand pentru aceleai condiii ca i adresarea bazat.
nlocuirea adresrii bazate cu adresare indexat se preteaz n situaiile n care se dorete ca
registru general BX (folosit la indexare bazat) s fie disponibil pentru alte operaii.
2.1.7. Adresare bazat i indexat
Acest mod de adresare este o combinaie ntre celelalte dou prezentate anterior.
Practic se dup determinarea adresei de nceput a segmentului de 64kO, se folosesc 3
deplasamente i anume: unul precizat direct n instruciune (Depl), unul memorat n registru
index (DI sau SI), i unul memorat n registru de baz (BX sau BP). Formulele de calcul pentru
adresa fizic sunt:
AF=(DS)*10h+(BX)+Depl+(DI)sauAF=(DS)*10h+(BX)+Depl+(DI)
AF=(SS)*10h+(BP)+Depl+(DI)sauAF=(SS)*10h+(BP)+Depl+(DI)
Exemplu:
MOVAH,[BX].100h.[DI]

Dac DS=1000h; BX=1000h i DI=20h AF=1000h*10h+1000h+100h+20h=11120h


Deci cu acest mod de adresare se pot realiza algoritmi cu dou variabile cum este
cazul transferului datelor care formeaz o matrice.
2.1.8. Adresare implicit
Adresarea implicit se folosete pentru prelucrarea irurilor de numere. n acest tip de
adresare sunt considerai implicit, att regitrii care se folosesc pentru determinarea
segmentului de 64kO (DS i ES), ct i regitrii index (DI i SI) folosii pentru stocarea
deplasamentului. Formulele de calcul pentru adresa fizic sunt:
AF=(DS)*10h+(SI)
AF=(ES)*10h+(DI)
Exemplu:
MOVSB

Aceast instruciune transfer un octet de la adresa (DS)*10h+(SI) din registru de date


la adresa (ES)*10h+(DI) din registru suplimentar de date i incrementeaz regitrii index dac
DF=1 (Direction Flag), respectiv i decrementeaz dac DF=0.
MOVSW

Funcioneaz identic cu instruciunea precedent, doar c se transfer date pe 16 bii.

2.2. Setul de instruciuni n limbaj de asamblare a P I8086


2.2.1. Instruciuni de transfer
Prima instruciune de transfer i cea mai folosit n programarea microprocesorului
este instruciunea de mutare (MOV MOVe). Acest tip de instruciune are rolul de a copia o
informaie dintr-o locaie (registru, memorie, modul I/O) n alt locaie (registru, memorie,
modul I/O). Formele posibile de utilizare a acestei comenzi a fost prezentat anterior. Forma
general este de tipul:

MOVdestinaie,surs

O alt instruciune de transfer este aceea prin care coninutul a dou locaii se schimb
ntre ele. Instruciunea poart denumirea de schimbare (EXCH - EXCHange). Totui se face
precizarea c aceast instruciune nu permite schimbarea datelor n memorie (memorie memorie). Forma general este:
XCHGdestinaie,surs

Tot din categoria instruciunilor de transfer face parte i depunere (PUSH) i preluare
(POP) din stiv. Forma general a acestor instruciuni este:
PUSHsurs
POPdestinaie

Ultimul tip de transfer posibil este acela de transfer de intrare-ieire prin intermediul
cruia se transfer ntre microprocesor i modulele IO. Se poate utiliza direct dac adresa este
pe 8 bii i indirect (prin intermediul registrului DX) dac adresa portului este pe 16 bii.
Formele posibile de exprimare sunt:
INAL,adres8bii
INAL,DX
OUTadres8bii,AL
OUTDX,AL

2.2.2. Instruciuni aritmetice


Instruciunile aritmetice sunt acele instruciuni prin intermediul crora se efectueaz
operaiile aritmetice specifice (adunare, scdere, nmulire, mprire). Trebuie precizat c
uneori, n urma executrii unei operaii matematice, rezultatul poate fi ntr-o form care nu
poate fi reprezentat cu ajutorul celor 16 bii ai unui registru general. n aceast situaie,
pentru a putea determina rezultatul real al operaiei, trebuie urmrii i registrul de fanioane.
Dac registrul de fanioane este modificat atunci se poate determina ce operaie a fost
efectuat. Exemplu:
Adunarea (ADD) i scderea a dou numere (SUB). n urma acestor operaii
matematice pot fi modificate urmtoarele fanioane: AF, CF, OF, PF, SF, ZF. Forma general
a instruciunii este:
ADDdestinaie,surs
SUBdestinaie,surs

n urma executrii uneia dintre aceste instruciuni, se adun sau se scade destinaia din
surs, iar rezultatul se pune n destinaie. Din acest motiv destinaia trebuie s fie registru
general sau locaie de memorie. Sursa poate fi registru general, locaie de memorie sau numr
explicit. Exist i o restricie prin care destinaia i sursa nu pot fi n acelai timp locaii de
memorie.
Un alt set de operaii aritmetice este dat de instruciunile incrementare (INC
INCrement) i decrementare (DEC DECrement). Prin intermediul acestor instruciune se
poate aduna (INC) respectiv scdea (DEC) cu o unitate, o valoare stocat ntr-un registru. Noua
valoarea va rmne n acelai registru. Efectuarea acestor instruciuni pot modifica
urmtoarele fanioane: AF, OF, PF, SF, ZF. Sintaxa general a acestor instruciuni este:
INCdestinaie
DECdestinaie

Compararea (CMP CoMPare) a dou numere este o operaie prin intermediul crora
se pot compara dou numere. n urma efecturii unei astfel de operaii se pot modifica

urmtoarele fanioane: AF, CF, OF, PF, SF, ZF. Forma general a instruciunii este
urmtoarea:
CMPdestinaie,surs

Mecanismul de comparare funcioneaz astfel:


se efectueaz o scdere ntre destinaie i surs, fr a se modifica nici una dintre
ele;
n funcie de rezultatul obinut se modific fanioanele corespunztoare;
o dac CF=0 i ZF=0, valoarea din destinaie este mai mare dect valoarea
din surs;
o dac CF=1 i ZF=0, valoarea din destinaie este mai mic dect valoarea
din surs;
o dac CF=0 i ZF=1, valoarea din destinaie este egal cu valoarea din
surs;
Trebuie precizat c simpla apelare a acestei instruciuni nu reprezint n realitate
faptul c s-a efectuat o comparare. Pentru a ndeplinii complet aceast procedur trebuie
analizat rezultatul comparaiei prin testarea fanioanelor de interes.
nmulirea simpl (MUL - MULtiply) i nmulirea cu semn (IMUL) sunt dou operaii
prin care se execut nmulirea a dou numere. Executarea acestor instruciuni pot modifica
doar fanioanele CF, OF, deoarece nmulirea a dou numere poate doar s depeasc
superior intervalul de reprezentare a numerelor. Forma general a instruciunilor este:
MULsurs
IMULsurs

Dup cum se observ i din sintaxa instruciunii, destinaia este n permanen


registrul acumulator. Trebuie precizat i faptul c sursa definete nmulirea i anume, dac
sursa este pe 8 bii se nmulete cu AL, iar dac sursa este pe 16 bii se nmulete cu AX.
Rezultatul se pune n AX (nmulire pe 8 bii), respectiv n AX i DX (nmulire pe 16 bii)
mprirea simpl i mprirea cu semn. Se efectueaz la fel ca i nmulirea i poate
modifica starea fanioanelor CF, OF. Sintaxa instruciunilor este urmtoarea:
DIVsurs
IDIVsurs

De asemenea sursa definete operaia. Astfel dac sursa are 8 bii operaia se
efectueaz pe 8 bii, ctul este pus n registrul AL i restul n registrul AH. La operaii pe 16
bii, ctul este pus n registrul AX i restul n registrul DX.
Dac se realizeaz o mprire la 0, se va genera o ntrerupere de ordin 0. Tratarea
acestui tip de ntrerupere este prezentat n capitolul aferent sistemului de ntreruperi.
2.2.3. Instruciuni pe bii
Prima categorie din acest tip de instruciuni sunt instruciuni logice (AND I logic,
OR SAU Logic, XOR SAU EXCLUSIV logic, NOT NEGARE logic). Sintaxele aferente
acestor instruciuni sunt urmtoarele:
ANDdestinaie,surs
ORdestinaie,surs
XORdestinaie,surs
NOTsurs

La aceste tipuri de instruciuni operaiile se efectueaz bit cu bit, adic fiecare bit din
destinaie cu omologul su din surs. Rezultatul se va depune n destinaie.

O alt categorie de instruciuni pe bit sunt instruciuni de deplasare. Aceste tipuri de


instruciuni pot fi de dou feluri: deplasare logic i deplasare aritmetic. Prin deplasare
logic se nelege deplasarea tuturor biilor, care formeaz o valoarea, spre stnga sau spre
dreapta n funcie de instruciunea apelat. La acest set de instruciuni se pierde un valoarea
unui bit (MSB dac deplasarea este spre stnga; LSB dac deplasarea este spre dreapta), iar n
captul opus bitul rmas liber (LSB dac deplasarea este spre stnga; MSB dac deplasarea
este spre dreapta) va lua valoarea 0. Deplasarea aritmetic funcioneaz la fel ca cea logic,
diferena dintre ele fiind dat de faptul c bitul rmas liber ia valoarea care a avut-o iniial.
Sintaxele posibile sunt:
SHLdestinaie,parametru
SHRdestinaie,parametru
SALdestinaie,parametru
SARdestinaie,parametru

(deplasarelogiclastnga)
(deplasarelogicladreapta)
(deplasarearitmeticlastnga)
(deplasarearitmeticladreapta)

Se face precizarea c prin parametru se introduce numrul de deplasri care se


efectueaz.
Tot din categoria operaiilor pe bii face parte i instruciuni de rotire. i aceasta poate
fi de dou tipuri i anume: rotire simpl, respectiv rotire cu Carry. Rotirea simpl
funcioneaz la fel ca i deplasarea logic, cu diferena c valoarea bitului spre care se face
deplasarea se mut la bitul care rmne liber (MSB se mut la LSB dac deplasarea este spre
stnga; LSB se mut la MSB dac deplasarea este spre dreapta). Rotirea cu Carry
funcioneaz la fel doar c se utilizeaz i CF (CF se put la LSB i MSB se mut la CF dac
deplasarea este spre stnga; CF se mut la MSB i LSB se mut la CF dac deplasarea este
spre dreapta). Sintaxele posibile sunt:
ROLdestinaie,parametru
RORdestinaie,parametru
RCLdestinaie,parametru
RCRdestinaie,parametru

(rotirelastnga)
(rotireladreapta)
(rotirecuCARRYlastnga)
(rotirecuCARRYladreapta)

De asemenea, prin parametru se introduce numrul de rotiri care se efectueaz.


2.2.4. Instruciuni de salt
Instruciunile de salt sunt acele categorii de instruciuni prin intermediul crora se
poate executa rularea programului de la alt adres dect adresa care urmeaz. Practic acest
tip de instruciune modific valoarea nscris n IP, terge instruciunile care sunt n ateptare
n QFIFO i determin rularea programului de la noua adres definit prin intermediul unei
etichete. Etichetele pot fi amplasate n faa sau dup adresa la care se afl instruciunea de
salt. Prin urmare saltul poate fi executat n fa sau n spate. ntr-o echivalare simplist cu
limbajele de programare avansate se poate spune c un salt n spate este echivalent cu
instruciuni de tip bucl (FOR, WHILE, REPEAT), iar un salt (condiionat) n fa este
echivalent cu o funcie de tip condiionare (IF THEN).
Exemplu salt n spate:
Eticheta:cod

cod

testcondiie

JC,Eticheta

cod.

;nceputbucl
;executinstruciunidinbucl
;executinstruciunecaredrezultatulcondiiei(CMP,ADD,etc)
;verificarecondiie(dacestefalsserevinelanceputbucl)
;dacsandeplinitcondiiasecontinuprogramul

Exemplu salt n fa:

cod
testcondiie

;executinstruciuninaintedecondiie
;executinstruciunecaredrezultatulcondiiei(CMP,ADD,etc)


JC,Eticheta

cod
Eticheta:cod.

;verificarecondiie(dacestefalssarelaetichet)
;dacesteadevratexecutunsetdeinstruciuni
;daccondiiaafostfalssecontinuprogramul

Acest ultim exemplu reprezint un set de instruciuni de tip (IF THEN), adic dac o
condiie este adevrat se execut un set de instruciuni, iar apoi se continu programul. Dac
condiia este fals se trece direct la condiionarea programului.
Dac se dorete realizarea unui program care s se comporte ca i o funcie de tip (IF
THEN ELSE) structura sa va fi urmtoarea:

cod

testcondiie

JC,Eticheta1

cod

JN,Eticheta2
Eticheta1:cod.
Eticheta2:cod.

;executinstruciuninaintedecondiie
;executinstruciunecaredrezultatulcondiiei(CMP,ADD,etc)
;verificarecondiie(dacestefalssarelaetichet)
;dacesteadevratexecutunsetdeinstruciuni
;verificarecondiie(dacestefalssarelaetichet)
;dacestefalsexecutaltsetdeinstruciuni
;daccondiiaafostfalssecontinuprogramul

Explicarea codului este urmtoarea: dac o condiie este adevrat se execut un set
de instruciuni (aferente funciei THEN), iar apoi se sare cu ajutorul unui salt necondiionat
(JN) la eticheta (Eticheta2) de unde se continu programul. Dac condiia este fals se sare la
eticheta (Eticheta1) unde se execut un alt set de instruciuni (aferent funciei ELSE), iar la
final se continu automat programul.
Instruciunile de salt pot fi de dou tipuri: instruciuni salt condiionat, respectiv
instruciuni de salt necondiionat. Pentru cazul n care instruciunea de salt se execut n urma
efecturii unei comparaii s-au creat dou seturi de instruciuni particulare: unul pentru
comparaia cu semn i altul pentru comparaia fr semn.
Sintaxele posibile pentru instruciuni de tip salt condiionat sunt:
JC
JNC
JZ
JNZ
JS
JNS
JO
JNO
JP
JNP

saltdacCF=1
saltdacCF=0
saltdacZF=1
saltdacZF=0
saltdacSF=1
saltdacSF=0
saltdacSF=1
saltdacSF=0
saltdacSF=1
saltdacSF=0

(aavutlocundeplasament)
(nuaavutlocundeplasament)
(rezultatulestezero)
(rezultatulnuestezero)
(rezultatulestenegativ)
(rezultatulnuestenegativ)
(sadepitcapacitatea)
(nusadepitcapacitatea)
(rezultatulestepar)
(rezultatulesteimpar)

Instruciunile de salt condiionat dup compararea a dou numere fr semn sunt:


JA
JAE
JB
JBE
JE
JNE

saltdacCF=0,ZF=0
saltdacCF=0
saltdacCF=1
saltdacCF=1sauZF=0
saltdacZF=1
saltdacZF=0

(saltlamaimare)
(saltlamaimaresauegal)
(saltlamaimic)
(saltlamaimicsauegal)
(saltlaegal)
(saltladiferit)

Instruciunile de salt condiionat dup compararea a dou numere cu semn sunt:


JG
JGE
JL
JLE
JE
JNE

saltdacSF=OFsauZF=0 (saltlamaimare)
saltdacSF=0
(saltlamaimaresauegal)
saltdacnotSF=OF
(saltlamaimic)
saltdacnotSF=OFsauZF=1(saltlamaimicsauegal)
saltdacZF=1
(saltlaegal)
saltdacZF=0
(saltladiferit)

Instruciuni de salt necondiionat sunt instruciuni care execut salturi fr a nu


urmrii nici o condiie. Sintaxa acestora este:
JMPadres(etichet)
CALLadres(etichet)

RET

;utilizatpentrusaltulnecondiionatlaoanumitadres
;utilizatpentruapelareauneisubrutine(saltlaadresadenceput
;aacesteia)
;utilizatpentrurevenireadinsubrutin(saltlaadresacare
;urmadupinstruciuneaCALLnprogramuldebaz)

2.2.5. Instruciuni de procesor:


Instruciunile de procesor sunt acele tipuri de instruciuni care opereaz direct asupra
funciilor microprocesorului. Acestea pot fi instruciuni prin intermediul crora se pot
modifica valorile anumitor fanioane (CLC, STC, CMC, CLI, STI, CLD, STD) sau instruciuni care
afecteaz funcionarea direct a microprocesorului (NOP, HLT, HIT).
CLC
tergeindicatorulCarry
STC
seteazindicatorulCarry
CMC InverseazvaloareaindicatoruluiCarry
CLI
tergeindicatoruldentreruperiIF
STI
seteazindicatoruldentreruperiIF
CLD
tergeindicatoruldirecieDF
STD
seteazindicatoruldirecieDF
NOP
nufacenimic(sefolosetelatemporizrisoftware)
HLT
determinoprireaprocesorului
HIT
determinoprireatemporaraprocesoruluipnlaapariiaunuisemnalde
ntreruperi

De exemplu instruciunea NOP (No OPeration o instruciune care nu face nici o


operaie) este foarte folosit n special n realizarea ntrzierilor software (timere software).

3. Transferul datelor prin sistemul de ntreruperi


3.1. Descriere
ntreruperile permit abandonarea de ctre P a execuiei programului curent, la
apariia unui eveniment care necesit a fi prelucrat. Evenimentul poate fi intern i n aceast
situaie ntreruperile sunt software, sau poate fi extern i atunci ntreruperea este solicitat de
un echipament hardware extern. Dac o ntrerupere este acceptat se va lansa n execuie un
subprogram dedicat evenimentului respectiv, denumit Subrutin de Servire a ntreruperii
(SSI). Dup finalizarea acestei subrutine se revine n programul curent exact n acelai loc de
unde a fost ntrerupt.
Pentru ca ntreruperile hardware s fie transmise unui P, acesta trebuie s aib
anumii pini destinai pentru aceste intrri. Astfel I8086 folosete urmtoarele borne pentru a
se putea realiza ntreruperile hardware:
INTR (INTerrupt Request) born pentru ntreruperi mascabile;
NMI (Non Maskable Interrupt) care este folosit pentru ntreruperi nemascabile;
INTA (INTerrupt Acknowlege) semnal generat de P pentru a semnaliza
echipamentul hardware c accept ntreruperea mascabil;
RESET prin intermediul creia se transmite o ntrerupere de tip reset.
Validarea sau anularea ntreruperilor mascabile se poate realiza i prin program, prin
setarea, respectiv resetarea fanionului de comand IF (Interrupt Flag) de pe poziia 9 a

registrului de fanioane. Pentru realizarea acestui lucru exist dou instruciuni dedicate i
anume: STI (SeT Interrupt) folosit pentru setarea IF, respectiv CLI (CLear Interrupt) folosit
pentru resetareaIF.

3.2. Categorii de ntreruperi acceptate de P I8086


Cum s-a precizat i mai sus acest tip de microprocesor accept dou categorii de
ntreruperi:
ntreruperi externe prin activarea semnalelor INTR, NMI, RESET;
ntreruperi interne:
o ntreruperi interne predefinite generate de logica intern a
microprocesorului;
o ntreruperi software generate de anumite instruciuni software.
ntreruperile mascabile sunt denumite i ntreruperi hardware externe (IHE) sunt
generate prin activarea semnalului INTR de ctre un periferic care solicit tratarea sa. Acestea
pot fi acceptate sau pot fi invalidate prin resetarea fanionului IF.
ntreruperile nemascabile sunt generate prin activarea semnalului NMI de ctre
sistemul extern microprocesorului. Acest tip de ntreruperi sunt considerate importante i ele
vor fi luate n considerare de ctre microprocesor.
Resetarea este o ntrerupere extern generat prin activarea exterioar a semnului
RESET.
ntreruperi software sunt ntreruperi generate de execuia unei instruciuni INTn din
program. Operandul n poate lua valori n intervalul 0255 i ne d informaii despre tipul
ntreruperii, precum i adresa de nceput a SSI corespunztoare.
ntreruperi interne predefinite sunt ntreruperile generate de logica intern a Pului la producerea unor evenimente urgente, care trebuie tratate preferenial cum ar fi:
mprirea la 0.
Fiecare categorie de ntreruperi de mai sus, are un anumit nivel de prioritate i va fi
tratat n mod specific. Astfel, primele patru tipuri de ntreruperi menionate anterior sunt
deservite pe baza unui sistem de prioriti. n acest sistem de prioriti pentru fiecare tip de
ntrerupere i se aloc un numr ntre 0 i 255 care ne d i ordinea de prioritate. Astfel, tipul 0
are cea mai mare prioritate, respectiv tipul 255 are cea mai mic prioritate.
Acest sistem de prioriti permite ca un periferic s ntrerup executarea unui SSI
cerute anterior de un alt periferic cu o prioritate mai mic. Bineneles este valabil i relaia
invers, adic ct timp se execut un SSI a unui periferic cu o prioritate mai mare se pot
ignora toate cererile de ntreruperi a perifericelor cu prioritate mai mic.
Tipul atribuit unei ntreruperi indic att nivelul su de prioritate, ct i adresa de
nceput a SSI corespunztoare. Legtura ntre tipul unei ntreruperi i adresa SSI
corespunztoare se realizeaz prin intermediul unei zone de memorie RAM, denumit Tabela
Vectorilor de ntrerupere (TVI), amplasat ncepnd cu adresa 0 a memorie accesibile Pului.

3.3.Tabela vectorilor de ntreruperi (TVI)


Pentru fiecare tip de ntrerupere exist cte un Vector ntrerupere (VI), format din
dou cuvinte pe 16 bii, care vor indica adresa (segmentul i deplasamentul) nceputului
codului SSI ataat VI respectiv.
Deoarece exist 256 tipuri de ntreruperi, TVI va conine 256 VI, numerotai de la 0 la
255, fiecare dintre acetia ocupnd patru locaii de memorie. n primele dou locaii se nscrie
deplasamentul n segmentul de cod, notat IPn, iar n urmtoarele dou locaii se va nscrie
adresa de nceput mprit cu 10h a segmentului de cod, CSn, n care se afl SSI

corespunztoare ntreruperii de tip n. Coninutul acestor locaii de memorie se vor ncrca n


regitrii interni IP i CS, n vederea lansrii n execuie a SSI corespunztoare (de tipul n).
n acest tip de microprocesor, TVI este amplasat de la adresa 0 i cuprind
4*256=1024 (1 kO) locaii de memorie. Astfel se poate spune c memoria de tip 80 va avea
VI amplasat n locaiile 80*4 80*4+3 (200 203 sau 140h-143h). Dac se dorete ca SSI
corespunztoare s fie amplasat la adresa B1140h, atunci una din formele posibile pentru
VI80 este:
adres
143h
142h
141h
140h

cod
B1h
10h
00h
40h

nCSsevancrcaB110h
nIPsevancrca0040h

Adres SSI (CS)*10h+(IP)=B110h*10h+0040h=B1140h.


Din analiza TVI, se poate constata existena a trei zone distincte:
Zona dedicat conine vectorii de ntrerupere 0,1,2,3,4, afereni ntreruperilor
interne de tipul 0,1,3,4 i ntreruperilor nemascabile crora li s-a atribuit tipul 2.
Zon rezervat conine vectorii 5-31 folosit pentru subrutine de firm necesare
asigurrii compatibilitii diverselor circuite cu P I8086. De exemplu ntrerupere
14h, apelat software cu instruciune INT 14h, apeleaz subrutinele aferente
transferului serial de date prin porturile COM1 i COM2.
Zona disponibil utilizator conine vectori 32-255 i n ea, utilizatorul poate s-i
defineasc vectori de ntrerupere externi (ntreruperi mascabile) sau intern
(software). n memorie aceasta ocup celulele cuprinse ntre adresele 80h i 3FFh.
Exemplu de mprire TVI:
Zon dedicat
o Vector 0 eroare de mprire cu 0
o Vector 1 rulare pas cu pas
o Vector 2 ntrerupere nemascabil
o Vector 3 punct de ntrerupere (Breakpoint)
o Vector 4 depire (INTO INTerrupt Overflow)
Zon rezervat
o Vector 5 sistem operare (din BIOS)
o
o Vector 31
Zon disponibil utilizator
o Vector 32
o Vector 33 indic funciile DOS
o
o Vector 255

3.4.Tratarea cererilor de ntreruperi


3.4.1. Algoritmul de tratare a cererilor de ntrerupere
Testarea existenei unei cereri de ntreruperi de ctre P se efectueaz n ultimul tact
al instruciunii curente. n acest scop, sunt testate n urmtoarea ordine cronologic sursele
posibile de cereri de ntreruperi: interne predefinite, nemascabile, hardware externe,
ntrerupere generat de regimul pas cu pas. Mecanismul este prezentat ordinograma din
Fig.3.1.

Ultimul tact al instruciunii curente

Execut cicluri main de


acceptare a ntreruperii.
Citete tipul instruciunii (n)

DA

II?

n=0,3,4

NU

CS, IP, IFstiv


TEMP:=TF; TF:=0; IF:=0

DA

NMI ?

n=2

NU

Stabilete adresa iniial a SSI


DA

MI ?

IF=1 ?
NU

NU

DA

NMI ?

DA
n=2

NU

TF=1 ?

DA
n=1

TEMP=1 ?

DA
n=1

NU

NU

Instruciune urmtoare

Execut SSI

Fig.3.1. Ordinograma de principiu a tratrii unei cere de ntrerupere.

Dac NU exist nici o cerere de ntrerupere de la sursele de ntrerupere posibile, se


continu programul cu execuia urmtoarei instruciuni din program.
Ordinea de prioritate a ntreruperilor este de la Tipul 0 (cea mai important) la tipul
255 (cea mai puin important). Protocolul de tratare a unei cereri de ntreruperi este
dependent de categoria din care face parte aceasta i n esen decurge dup cum urmeaz:
se verific dac a aprut o ntrerupere:
o dac ntreruperea este mascabil se verific acceptarea sau anularea ei
dac exist o cerere de ntrerupere se prelucreaz octetul n (tipul ntreruperii)
pentru a determina numrul de ordine al VI. Acesta este furnizat de:
o interfaa care a generat ntreruperea, n cazul ntreruperilor hardware
externe;
o operandul instruciunii INTn, n cazul ntreruperilor software;
o are valori predefinite 0,1,3,4 pentru ntreruperile interne i 2 pentru
ntreruperile nemascabile;
se salveaz n stiv starea iniial a programului (regitrii CS, IP i F), se salveaz
ntr-un fanion temporar (TEMP) fanionul TF, se reseteaz fanioanele IF i TF;
din locaiile de memorie alocate VI se transfer datele n IP i CS, pentru formarea
adresei fizice a SSI;
se verific dac a aprut o ntrerupere de tip NMI:
o dac DA, se trateaz aceast ntrerupere prin ntreruperea temporar a
ntreruperii curente i lansarea SSI corespunztor ntreruperii nemascabile;

o dac NU, se verific dac este autorizat regimul pas cu pas, iar n caz
afirmativ se lanseaz SSI corespunztoare acestui regim;
se execut SSI care se termin cu instruciunea IRET cu rol n refacerea strii
iniiale a microprocesorului.
3.4.2. ntreruperile interne prin program (software)
I8086 este capabil s accepte un numr ridicat de ntreruperi interne de tip ntreruperi
software. Aceste ntreruperi sunt generate software prin executarea unei instruciuni de tip
INT n, unde n reprezint tipul ntreruperii. Operandul n, nmulit cu 4 va indica locaiile de
memorie din TVI n care sunt amplasate adresele IPn i CSn corespunztoare VI aferent
cererii de ntrerupere.
Mecanismul de tratare a acestei categorii de ntreruperi este similar cu cel descris n
ordinograma din Fig.3.1 pentru ntreruperi generate de un eveniment intern. La execuia
instruciunii INT n, coninuturile regitrilor IP, CS i F sunt trecute n stiv, sunt resetate
fanioanele IF i TF, iar apoi se lanseaz execuia SSI conform mecanismului descris anterior.
Dac se consider necesar se pot salva n stiv i coninutul altor regitrii printr-o
secven de tip PUSH amplasat la nceputul SSI corespunztor, urmat de o secven de tip
POP amplasat nainte instruciunii IRET.
ntreruperile software nu pot fi invalidate prin program, dar pot fi ntrerupte temporar
de o ntrerupere intern, de o ntrerupere nemascabil sau de o ntrerupere mascabil cu o
prioritate mai mare. ntreruperea mascabil poate intervenii doar dac n prealabil a fost setat
fanionul IF.
Unele dintre ntreruperile software folosite cel mai des n sistemele IBM este
ntreruperea de tip 21h, prin care sunt apelate funciile DOS ale sistemului. Distincia ntre
diverse funcii DOS apelate se realizeaz prin ncrcarea n prealabil a registrului AH cu un
numr aferent funciei ce se dorete a fi apelat.
De exemplu: afiarea unui caracter pe ecran, este o funcie care are atribuit numrul
de ordine 2. Astfel pentru executarea acestei funcii se procedeaz astfel:
se ncarc registrul AH cu valoarea 2;
se ncarc registrul DL cu codul hexazecimal al caracterului ce urmeaz a fi
ncrcat;
se apeleaz ntreruperea cu ajutorul codului INT21h.
Prin urmare dac se dorete afiarea pe ecran a textului AB se procedeaz astfel:
movah,02
movdl,65
int21h
movdl,66
int21h

iniiazfunciadeafiarecaracter
ncarccodulASCIIpentruprimulcaracter
apeleazfunciileDOS
ncarccodulASCIIpentrualdoileacaracter
apeleazdinnoufunciileDOS

ntreruperile software sunt practic apeluri vectorizate la subrutine create fie de


utilizator, fie de autorul Sistemului de Operare. Aceste subrutine, pot fi amplasate oriunde n
memoria RAM accesibil i pot fi inclusiv emulatoare de funcii mai complexe cum ar fi:
funcii BIOS, funcii trigonometrice, etc. ntreruperile software pot fi folosite i pentru
testarea SSI externe.
3.4.3. ntreruperi interne predefinite
ntreruperile interne predefinite sunt generate de logica intern a P-ului la
producerea unui anumit eveniment n cursul execuie programului curent i care trebuie luat
n considerare. Spre deosebire de ntreruperile software sau hardware externe, aceste
ntreruperi au tipuri predefinite 0, 1, 3 i 4.

Evenimentele interne care conduc la generarea ntreruperilor interne predefinite sunt


prezentate n continuare.
a. Eroare la mprire apare atunci cnd n urma unei operaii de mprire (DIV sau IDIV) se
obine un ct mai mare dect capacitatea sa de reprezentare. Apariia acestei erori, genereaz
o ntrerupere de tipul 0, care va lansa n execuie SSI ce ncepe la adresa definit de IP0 i
CS0, care se afl n TVI la adresele 00000h i respectiv 00002h.
b. Eroarea de depire este semnalat ca i eroarea de mprire, la depirea capacitii de
reprezentare a rezultatului, marcat de setarea fanionului OF (Overflow). Particularitatea
acesteia fa de prima este c ea este activat la orice operaie matematic care poate produce
o depire. O alt caracteristic important este aceea c ntreruperea nu este generat
automat, ci este condiionat de execuia n prealabil a instruciunii INTO (INTerrupt
Overflow). Astfel se poate spune c este la latitudinea programatorului s utilizeze acest tip
de ntrerupere. Dac se dorete, dup fiecare operaie aritmetic care se dorete a fi
supravegheat trebuie amplasat i instruciunea INTO. Dac la execuia acestei instruciuni,
fanionul OF este gsit setat, se va genera o ntrerupere de tip 4 care va lansa n execuie SSI
indicat de VI amplasat n TVI ntre adresele 0010h i 0012h.
c. Modul pas cu pas se realizeaz dac fanionul TF este setat (prin program) i const n
execuia instruciune cu instruciune a programului. Acest lucru se realizeaz prin generarea a
unei ntreruperi de tip 1. Astfel controlul este preluat de ctre SSI care ncepe de la adresa
definit de VI1 scris n TVI la adresele: 00004h00007h. Spre exemplu, SSI poate conine o
instruciune de tip WAIT care va determina trecerea microprocesorului n stare de ateptare
din care poate fi scos prin activarea semnalului TEST.
d. Punct de ntrerupere genereaz o ntrerupere de tip 3 dac a fost ntlnit o instruciune
de tip breackpoint care este identificat de un octet de tipul (CCh). Aceast ntrerupere este
folosit n depanarea programelor prin blocarea programului n anumite stri denumite puncte
strategice. Cea mai simpl SSI aferent acestei tip de ntreruperi poate fi format doar din
instruciunile WAIT i IRET.
3.4.4. ntreruperile mascabile
ntreruperile mascabile, denumite i ntreruperi hardware externe (IHE), sunt
solicitate prin activarea semnalului INTR fie, direct de ctre periferic, fie indirect printr-un
circuit specializat cum ar fi controlerul de ntreruperi I8259. Soluia cu controlerul de
ntreruperi este cea mai folosit. n cazul n care exist mai multe cereri, acesta evalueaz
prioritatea cererii i las s treac prioritatea maxim la momentul respectiv.
Semnalul INTR este testat la ultimul tact al instruciunii curente, dar exist i cteva
excepii. Dac este gsit activ, iar fanionul IF este setat, microprocesorul va lua n considerare
cererea de ntrerupere. Se va genera un ciclu de magistral, iar microprocesorul anun
controlerul de ntreruperi (prin activarea semnalului INTA), c se accept cererea de
ntrerupere. Acesta din urm va dezactiva semnalul INTR pentru ca dup terminarea SSI
corespunztor s nu se mai lanseze nc o dat cererea de ntrerupere. n al doilea ciclul de
magistral, controlerul de ntreruperi pune pe MD informaia referitoare la tipul ntreruperii
(n), iar microprocesorul semnalizeaz citirea lui prin activarea din nou a semnalului INTA.
Simultan se activeaz i semnalul LOCK indicnd c magistrala nu poate s fie cedat. Dac
P-ul este n mod minim, semnalul LOCK se va activa doar intern.
n continuare sunt efectuate operaiile comune tratrii oricrei categorii de ntrerupere.

3.4.5. ntreruperea nemascabil


ntreruperea nemascabil (NMI) este produs prin activarea intrrii NMI. Aceasta
trebuie s fie activ pe durata ultimului tact al instruciunii curente pentru a fi luat n
considerare.
ntreruperea NMI are tipul predefinit 2. n aceste condiii nu mai este necesar ciclul de
acceptare i de identificare a tipului ntreruperii, cum este cazul ntreruperilor mascabile.
3.4.6. ntreruperea RESET
Resetarea se produce la activarea semnalului RESET al P-ului. Pe frontul su
cresctor, P-ul i ntrerupe toate activitile trecnd magistralele n stare HZ (ALE=0 i
HLDA=0). Cnd RESET revine la 0 I8086 reseteaz regitrii F, IP, DS, SS, ES, golete
memoria QFIFO, reseteaz fanionul IF i introduce n registrul segment CS numrul FFFFh.
Astfel se poate spune c prima instruciune care se execut dup resetare se afl la adresa
FFFF0h. La aceast adres se gsete de obicei o instruciune de tip JumP la nceputul
programului monitor.

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