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/S3 A19/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 AD8 DI7 . DI0 STB AD7 AD0 DI7 . DI0 STB A7 . A0 T DEN DT/R A7 . A0 T

8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 6 8 2 8 6

DO7 DO3 . DO0

BHE A19 A16

DO7 . DO0

A15 A8

DO7 . DO0

A7 A0

B7 . B0 EN

D15 D8

ALE

B7 . B0 EN

D7 D0

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 HIGH FFFFF FFFFD A1 A19 5 3 1 BHE CS1 CS2 A1 A19 4 2 0 A0 LOW FFFFE FFFFC CS1 CS2

A1...A19

D8...D15

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 modul l minim al P I8086.

Pe frontul cresc c tor al l tactului T3 3 P-ul test teaz starea liniei READ DY pentru a verifica dac pe erifericul ca are trebuie s depun data d pe MD D a fcut-o. Dac acest t semnal ge enerat de dispozit tivul surs este gsit activ a (1 logic) l se co ontinu tran nsferul datei i. n caz co ontrar se introduc c taci sup plimentari de d ateptar re (Tw), p n la acti ivarea sem mnalului REA ADY. n continu uare, se preia date de pe e MD, iar la a nceputul strii T4 se e dezactivea az semnale ele RD i DEN ind dicnd sfritul ciclului i. 1.5.2. Ciclul C de scr riere Ciclul de sc criere (Fig.1 1.5) se exec cut cnd se e transmite o dat spre memorie (c comand de tip mov m ) sau spr re un perife eric (coman nd de tip ou ut) i este asemntor c cu ciclul de citire.

Fig.5. . Ciclul de scr riere 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)

II?
NU

DA n=0,3,4

DA

NMI ?

n=2

CS, IP, IFstiv TEMP:=TF; TF:=0; IF:=0

NU DA DA

Stabilete adresa iniial a SSI MI ? IF=1 ?


NU

NMI ?
NU

DA n=2

NU

TF=1 ?
NU

DA n=1

TEMP=1 ?
NU

DA n=1

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