Sunteți pe pagina 1din 32

141

11 Microprocesorul Intel 8086

11.1 Generaliti
Lansat n 1978 de firma Intel , se prezint sub forma unei capsule cu 40 de pini, este realizat n tehnologia HMOS i are n structur circa 29.000 tranzistoare, pe o suprafa de siliciu de 37 mm 2 . Apari ia lui a fost urmat la scurt timp de o familie de componente: Intel 8284 - generator de tact; Intel 8288 - controler de magistrale; Intel 8087 - coprocesor aritmetic; Intel 8089 - coprocesor de intrare-ie ire . n 1979 apare microprocesorul Intel 8088 care p streaz caracteristicile lui 8086 dar cu magistrala de date extern este de 8 bi i. A cunoscut o larg utilizare prin includerea sa n numeroase produse ale firmei IBM. Microprocesorul Intel 8086 este cel mai r spndit microprocesor pe 16 bi i; registrele interne i magistralele de date interne i cea extern sunt de 16 bi i. Caracteristici tehnice principale : multiplexarea n timp a magistralelor de date, adrese i st ri, pentru p strarea capsulei de 40 de pini; magistrala de adrese de 20 de bi i, ceea ce permite adresarea unei memorii de capacitate maxim de 1 MB; o singur tensiune de alimentare : + 5 Vcc; frecven a semnalului de tact: 4 MHz, 5 MHz sau 8 MHz, n func ie de variant ; compatibilitate cu limbajul de asamblare al microprocesorului Intel-8080 i Intel-8085. setul de instruc iuni con ine 94 de tipuri de instructiuni, inclusiv opera ii aritmetice n cod BCD i opera ii de nmul ire, mp r ire; opereaz cu digi i (cod BCD, 4 bi i/digit sau 8 bi i/digit), cu octe i (byte), cu cuvinte de 16 bi i (word), cu cuvinte duble de 32 de bi i (double word), iruri de caractere de 8 bi i (string) i blocuri de date. acoper o gam larg de aplica ii datorit celor dou moduri de lucru: modul minim pentru aplica ii simple, n care procesorul genereaz el nsu i semnalele electrice necesare transferului de date cu memoria i porturile de intrare/ie ire i modul maxim , pentru aplica ii complexe, inclusiv sisteme multiprocesor, n care semnalele

142 de comand pentru memorie i porturi sunt generate de un circuit specializat, 8288 (controler de magistrale).

11.2 Structura intern


Microprocesorul Intel-8086 cuprinde dou unit i func ionale care lucreaz asincron i independent una fa de cealalt : Unitatea de execu ie EU ( Execution Unit ), care efectueaz opera iile con inute codificat n instruc iuni. Unitatea de interfa cu magistralele ( Bus Interface Unit ), care are rolul de a extrage instruc iunile din memorie i de a transfera operanzii ntre unitatea de execu ie i memorie sau porturi de intrare/ie ire.

11.2.1. Unitatea de interfa cu magistralele BIU ( Bus Interface Unit ) Realizeaz conectarea microprocesorului cu exteriorul prin intermediul magistralelor de adrese (20 de linii) i de date (16 linii). De asemenea, unitatea BIU genereaz semnalele de comand pentru realizarea opera iile de citire i scriere cu memoria sau cu porturile. Unitatea BIU realizeaz extragerea n avans a instruc iunilor din memorie, pe care le stocheaz ntr-un fi ier de instruc iuni de 6 octe i, care este de fapt o list de tip FIFO ( First In First Out ). Dac n acest fi ier sunt cel pu in dou loca ii libere i unitatea de execu ie nu solicit transfer de operanzi cu exteriorul, unitatea BIU va ini ia un ciclu ma in de extragere n avans a unei instruc iuni din memorie, de la adresa urm toare. Se asigur astfel un important c tig de timp, prin suprapunerea execu iei cu extragerea instruc iunilor, opera ie care necesit timp de acces la memorie i timp de transfer. Instruc iunile de salt pot modifica succesiunea normal prin comutarea execu iei la o adres ''de salt''; n aceast situa ie, unitatea BIU ini ializeaz fi ierul prin tergerea instruc iunilor existente i nc rcarea lui cu o nou secven de instruc iuni extrase ncepnd cu adresa de salt. Dac n timpul execu iei unei instruc iuni unitatea EU solicit un operand din memorie, unitatea BIU calculeaz adresa fizic (20 de bi i) n func ie de modul de adresare comandat, utiliznd registrele proprii i unitatea aritmetic proprie (UA) i genereaz semnalele de comand pentru transferul operandului c tre unitatea de execu ie.

143 11.2.2. Unitatea de execuie EU (Execution Unit) Extrage succesiv instruc iunile din fi ierul de instruc iuni, le decodific pe baza unui microprogram rezident i le execut prin intermediul registrelor de uz general i unit ii aritmetice i logice (UAL). Dac pentru execu ia unei instruc iuni este necesar accesul la memorie sau la porturi I/O, unitatea de execu ie transmite c tre BIU o adres de 16 bi i (adres efectiv sau offset ) ce va fi utilizat pentru opera iile de transfer. Unitatea de execu ie dispune de un bloc de comand care coordoneaz func ionarea unit ii. n acest bloc exist o memorie ROM n care este stocat microcodul de interpretare i execu ie pentru fiecare instruc iune. 11.2.3. Setul de registre Registrele sunt specializate pe func ii; ele pot fi grupate n 5 categorii: registre de date (AX, BX, CX, DX); registre index, pentru accesul n interiorul unui segment (SP, BP, DI, SI); registre de segment ( CS , DS , SS , ES ) ; registru indicator de adres (IP); registru de stare (F). Primele dou categorii alc tuiesc registrele de uz general. Utilizatorul are acces la toate registrele, dimensiunea lor fiind de 16 bi i, egal cu dimensiunea magistralei de date. Registrele de date. De i sunt registre de 16 bi i, pot fi utilizate ca dou registre de 8 bi i: registrul superior H (High) i registrul inferior L (Low). Oricare din registrele de uz general poate fi utilizat n opera ii aritmetice i logice dar au i func ii specifice, care nu pot fi modificate de programator (tab.1).
Tabel 1. Func iile specifice ale registrelor de uz general Registrul Funcia specific AX AL AH BX CX CL DX nmul ire, mp r ire, intrare / ie ire pe cuvnt nmulire, mprire, intrare / ieire pe octet nmulire, mprire, pe octet Translatare (adresare indexat) Contor pentru operaii cu iruri, bucle Contor pentru deplasri, rotaii nmulire, mprire, intrare / ieire indirect

144 EU
Registre de uz general 15 AH BH CH DH Registre index SP BP DI SI 7 AL BL CL DL 0 AX BX CX DX Registre segment 15 CS DS SS ES IP Rgistre speciale 0

BIU
UA

Magistrala intern Bloc de comand BIU Registre temporare


Unitate de comand EU Magistrale externe

1 2 3 4 5 6

UAL F (indicatori de condi iii) EU - Unitatea de execuie

Fiier de instruciuni BIU - Unitatea de interfa cu magistralele

Fig.1 Arhitectura intern a microprocesorului Intel 8086

Registrele de segment Sunt registre de 16 bi i care con in adresa de baz a unui segment de memorie. Memoria direct adresabil de 1 MB necesit o magistral de adrese de 20 bi i. Registrele interne ale procesorului fiind de 16 bi i, memoria este divizat din punct de vedere logic n segmente de 64 kB, fiecare segment fiind astfel adresabil cu 16 bi i. Procesorul poate s utilizeze simultan attea segmente de memorie cte registre de segment posed . Adresele de nceput (de baz ) ale celor 4 segmente sunt con inute n cele 4 registre de segment (Cod, Date, Stiv i de Date suplimentar).

145
15 7 0

AH BH CH DH
15

AL BL CL DL
0

AX Registru acumulator BX Registru de baz CX Contor DX Registru de date

CS DS SS ES

Cod Segment - segment de cod Data Segment- segment de date Stack Segment -segment stiv Extra Segment - segm. de date

Fig. 2. Registrele de date i de segment la Intel 8086

Registrul CS con ine adresa de nceput a segmentului de cod unde se afl codurile instruc iunilor. Pentru a adresa o instruc iune, microprocesorul combin con inutul registrului segment de cod CS cu al registrului indicator de adres , IP, ob innd o adres fizic de 20 bi i . Registrul DS con ine adresa de nceput a segmentului de date, SS con ine adresa de nceput a segmentului stiv iar ES con ine adresa de nceput a unui segment de date suplimentar. Segmentul de cod con ine instruc iuni iar ultimele trei segmente de memorie sunt dedicate operanzilor (date). Registrele pentru accesul n interiorul unui segment . mpreun cu registrele de date, reprezint registrele generale; SP i BP sunt registre indicator iar SI i DI sunt registre index . Registrele indicator con in adresa relativ fa de baza segmentului la care se afl un operand n cadrul segmentului stiv ; SP indic adresa relativ a vrfului stivei n raport cu con inutul registrului SS (baza stivei), iar BP indic adresa relativ a unui operand n cadrul segmentului stiv . Registrele index con in adresa relativ fa de baza segmentului la care se afl un operand n cadrul segmentelor de date sau de date suplimentar, deci n raport DS sau ES; SI i DI se utilizeaz n general n cazul opera iilor cu iruri de date, SI indicnd adresa operandului surs iar DI adresa operandului destina ie.

146
15 0

SP BP SI DI

Stack Pointer - indicator de stiv Base Pointer - indicator de baz Source Index - index surs Destination Index - index destinaie

Fig. 3. Registrele indicator i index la Intel 8086

Registrul indicator de adres IP ( Instruction Pointer ) Este similar registrului de adres PC ( Program Counter ) de la Intel 8080 sau Zilog Z80, indicnd adresa instruc iunii ce se extrage din segmentul de cod. Spre deosebire de PC, IP nu con ine adresa fizic a instruc iunii ci adresa relativ fa de baza segmentului de cod. Con inutul lui IP se combin cu cel al lui CS i astfel se ob ine adresa fizic a instruc iunii. Dup transferul fiec rui octet n fi ierul de instruc iuni, con inutul lui IP cre te cu o unitate: IP = IP + 1, fiind astfel preg tit pentru adresarea octetului urm tor din segmentul de cod. Registrul de stare sau al indicatorilor de condi ii F ( Flags ) Acest registru face parte din unitatea aritmetic i logic UAL (sau ALU - Arithmetic and Logic Unit ). De i este un registru de 16 bi i, doar 9 sunt semnificativi, reprezentnd indicatorii de condi ii ai procesorului 8086. Indicatorii se pozi ioneaz n ''0'' sau ''1'' dup efectuarea unei opera ii aritmetice, logice sau dup o instruc iune de control; pot fi testa i prin intermediul instruc iunilor condi ionale i se pot lua decizii n func ie de valoare lor. CF: ( Carry Flag ) indicatorul de transport; se activeaz (n ''1'' logic) la apari ia unui bit de transport (dep irea lungimii normale a rezultatului) la adunare sau de mprumut la sc dere; este asociat rezultatului unei opera ii aritmetice sau logice i se comport ca al noulea bit (b8) al acestuia. PF: ( Parity Flag ) indicator de paritate; se activeaz (n ''1'' logic) cnd rezultatul unei opera ii aritmetice sau logice este un octet cu num r par de unit i. AF: ( Auxiliary Flag ) indicator de transport la jum tate; se activeaz cnd apare transport sau mprumut n opera iile aritmetice i logice ntre bi ii 3 i 4. ZF: ( Zero Flag ) indicator de zero; se activeaz (n ''1'' logic) dac rezultatul unei opera ii aritmetice sau logice este zero.

147
Interrupt Direction Overflow Trap Sign Zero Auxiliary Carry Parity Carry

OF DF IF TF SF ZF
15 14 13 12 11 10 9 8 7 6 5

AF
4 3

PF
2 1

CF
0

Fig.6. Registrul indicatorilor de condiii la microprocesorul Intel 8086/8088

SF: ( Sign Flag ) indicator de semn; con ine bitul cel mai semnificativ al rezultatului, deci copiaz bitul de semn; va fi ''1'' pentru rezultat negativ i ''0'' pentru un rezultat pozitiv. OF: ( Overflow Flag) indicator de dep ire; se activeaz (n ''1'' logic) cnd apare depa irea capacit ii registrului ce con ine rezultatul, ca urmare a unei opera ii aritmetice cu operanzi cu semn; va fi ''1'' cnd apare transport sau mprumut n/din rangul de semn. TF: ( Trap Flag ) indicator pentru modul de lucru ''pas cu pas''; dac este pozi ionat n ''1'' logic, microprocesorul nu mai lucreaz la viteza dat de semnalul de tact ci n ritmul impus de utilizator. Acest mod de lucru este deosebit de util la depanarea programelor. IF: ( Interrupt Flag ) indicator pentru controlul ntreruperilor; dac este pozi ionat n ''1'' logic (prin instruc iunea corespunz toare), sunt validate cererile de ntrerupere de tip INTR (mascabile); invalidarea acestora se face prin pozi ionarea lui IF n ''0'', caz n care cererile INTR nu vor fi luate n considera ie. DF: ( Direction Flag ) indicator de ''direc ie", are efect n opera iile cu iruri. Dac este pozi ionat n ''1'', dup fiecare transfer, adresa operandului din ir se incrementeaz (cre te cu 1) iar dac este pozi ionat n ''0'' adresa se decrementeaz . Observa ie: indicatorii DF, IF i prin instruc iunile de control specifice: CLC ( Clear Carry ): CF = 0 CLD ( Clear Direction ): DF = 0 CLI ( Clear Interrupt ): IF = 0 CF pot fi pozi iona i n ''0'' sau ''1'' STC ( Set Carry ): CF = 1 STD ( Set Direction ): DF = 1 STI ( Set Interrupt ): IF = 1

11.2.4. Terminale i semnificaia lor Prin multiplexarea n timp a magistralei de date cu cea de adrese la acelea i terminale precum i prin dublarea rolului unor terminale ale

148 microprocesorului n func ie de cele dou moduri de lucru ale sale, a fost posibil nchiderea sa ntr-o capsul cu 40 de terminale.
GND AD14 AD13 AD12 AD11 AD10 AD 9 AD 8 AD 7 AD 6 AD 5 AD 4 AD 3 AD 2 AD 1 AD 0 NMI INTR CLK GND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 Vcc AD15 A16 / S3 A17 / S4 A18 / S5 A19 / S6 BHE / S7 MN / MX RD RQ / GT0 RQ / GT1 LOCK S2 S1 S0 QS0 QS1 TEST READY RESET
Modul minim

Intel 8086 CPU

34 33 32 31 30 29 28 27 26 25 24 23 22 21

HOLD HOLDA WR M / IO DT / R DEN ALE INTA

Fig.3 Intel 8086 - Configuraia semnalelor la pini

Terminalele cu acela i rol n ambele moduri de lucru sunt : AD 0 - AD 15 : linii bidirec ionale cu trei st ri ( three state ), constituie magistrala de adrese i date multiplexate. Pe durata st rii T 1 a ciclului ma in , pe cele 16 linii se ncarc o adres de memorie sau pentru porturi I/O iar pe durata st rilor T 2, T 3 , T w i T 4 liniile constituie magistrala de date. A 16 / S 3 , A 17 / S 4 , A 18 / S 5 , A 19 / S 6 : ie iri cu trei st ri; n starea T 1 reprezint cei mai semnificativi 4 bi i ai magistralei de adrese iar n st rile T 2 - T 4 reprezint informa ii de stare: S 3 , S 4 indic registrul segment utilizat n calculul adresei fizice, S 5 copiaz indicatorul de ntreruperi (IF) iar S 6 = 0.

149 BHE / S 7 ( Bus High Enable ) : ie ire cu trei st ri; n timpul st rii T 1 se activeaz cnd are loc un transfer pe octetul superior al magistralei de date, validnd acest transfer, iar n st rile T 2 - T 4 este bit de stare. RD ( Read ): ie ire cu trei st ri, activ (n ''0'') atunci cnd microprocesorul execut un ciclu ma in de citire memorie sau porturi.
S4 0 0 1 1 S3 0 1 0 1 Registrul segment implicat n adresare ES SS CS DS

READY : intrare activ n ''1'', pentru sincronizarea procesorului cu memoria sau porturile I/O, mai lente. INTR ( Interrupt Request ) : intrare activ n ''1'' reprezentnd cerere de ntrerupere mascabil . TEST : intrare activ n ''0'', utilizat n cazul instruc iunii ESC (Escape) care permite altui procesor s extrag instruc iuni sau operanzi din memorie, din segmentele curente ale lui 8086/8088. Instruc iunea ESC poate ini ia o subrutin executat de un procesor concurent, ca de exemplu 8087 - coprocesor aritmetic; n timpul execu iei subrutinei, procesorul de baz execut programul curent pn cnd devine necesar rezultatul subrutinei. Dac acesta ntrzie, procesorul de baz intr n stare de a teptare pn cnd TEST devine inactiv.
Coprocesor

Begin

End
TEST

Procesor Escape de baz 8086/88

Exec.

Wait

Continue

Tw

Fig. 4 Rolul semnalului TEST n sisteme multiprocesor

NMI ( Not Mascable Interrupt ) : intrare activ n ''1'' reprezentnd cerere de ntrerupere nemascabil (care nu poate fi invalidat prin soft). Este utilizat pentru interven ia oparatorului sau pentru evenimente a c ror luare n considera ie nu suport amnare (avertizare asupra unei iminente fluctua ii a tensiunii de alimentare, interven ie watch dog ). RESET : intrare activ n ''1'', pentru ini ializarea microprocesorului. Se aplic automat la apari ia tensiunii de alimentare sau n timpul

150 func ion rii, de c tre operator. Procesorul ntrerupe toate activit ile pn cnd semnalul devine inactiv. Se efectueaz urm toarele ini ializ ri interne: Indicatorii de condi ii: to i n ''0'' IP = 0000 H CS = FFFF H DS = 0000 H SS = 0000 H ES = 0000 H Fi ierul de instruc iuni: vid; ntreruperile mascabile: invalidate. Prima instruc iune ce se va executa dup ini ializare va fi cea de la adresa FFFF0 H. De regul , la adresa FFFF0 se afl o instruc iune de salt c tre prima instruc iune a sistemului de operare. CLK : intrare pentru impulsurile de tact furnizate de un circuit specializat (generator de tact, tipic Intel 8284) cu frecven a uzual de 8 MHz, nivel TTL i factor de umplere 1/3. MODUL MINIM Se instaleaz dac intrarea de mod este la nivel ridicat, MN/MX =1. M/IO ie ire cu trei st ri ( Memory / Input-Output ); determin o opera ie de citire sau scriere asupra memoriei sau porturilor. Dac este ''1'' logic, se execut un ciclu ma in de acces la memorie iar dac este ''0'' logic se execut un ciclu ma in de transfer cu porturile de intrare / ie ire. WR: ie ire cu trei st ri ( Write ) activ n ''0'' logic; determin o opera ie de scriere n memorie sau n porturi. INTA : ie ire cu trei st ri ( Interrupt Acknowledge ), activ n ''1'' logic, cnd microprocesorul execut un ciclu ma in de acceptare ntrerupere. ALE : ie ire activ n ''1'' ( Address Load Enable ) care se activeaz cnd pe magistrala multiplexat este nc rcat o adres . DT/R : ie ire cu trei st ri ( Data Transmission Reception ), care indic sensul transferului pe magistrala de date. Dac este ''0'' logic, magistrala este orientat c tre microprocesor ( Reception ) iar n caz contrar, c tre sistem ( Transmission ). DEN : ie ire cu trei st ri ( Data Enable ) care valideaz transferul datelor c tre microprocesor. HOLD : intrare pentru cereri de cedare magistrale. Un dispozitiv inteligent extern solicit controlul total asupra magistralelor n vederea accesului direct la memorie (tehnic DMA - Direct Access Memory ). HLDA : ie ire, r spuns la cererea HOLD, confirmnd acceptarea acestei cereri, dup trecerea magistralelor de adrese, date i control n starea SIR (starea de nalt impedan sau starea ''a treia'').

151 Ultimele opt terminale prezentate au alte func ii n modul maxim. MODUL MAXIM Se instaleaz dac intrarea de mo este la nivel cobort, MN/MX =0. RQ/GT0, RQ/GT1 ( R e q uest/ G rant Lines ) : linii bidirec ionale utilizate pentru cedarea magistralelor n urma unui dialog cerere acceptare - renun are. n modul maxim, semnalele HOLD i HOLDA evolueaz n dou semnale mai complexe, RQ/GT0, RQ/GT1, ce pot servi utiliz rii n comun a magistralelor de c tre 8086/8088 i alte dou procesoare. Cererea i cedarea magistralelor necesit trei faze distincte: cererea, alocarea, eliberarea. Un procesor cere pe o linie RQ/GT controlul magistralelor i pe aceea i linie CPU 8086 confirm trecerea lor n starea SIR, deci cedarea lor. n aceast situa ie, unitatea BIU este deconectat de la magistrale iar EU execut instruc iuni din fi ierul intern pn la golirea acestuia sau pn cnd o instruc iune necesit acces la magistrale. Cnd procesorul extern termin opera iile cu magistralele, transmite pe aceea i linie, RQ/GT = 1, cu semnifica ia c CPU 8086 poate s preia controlul asupra magistralelor. Linia RQ/GT0 are prioritate fa de RQ/GT1, n cazul n care apar cereri simultane pe cele dou linii. S2 , S1 , S0 : ie iri cu trei st ri care exprim codificat tipul de ciclu ma in ce va fi va executat, conform tabelului; semnalele se aplic circuitului specializat Intel 8288 care genereaz semnale de comand pentru memorie i porturi I/O, corespunz toare ciclului ma in curent. S2 0 0 0 0 1 1 1 1 S1 0 0 1 1 0 0 1 1 S0 0 1 0 1 0 1 0 1 Tipul ciclului main Acceptare ntrerupere Citire port I/O (intrare date) Scriere port I/O (ieire date) Halt (oprire) Aducere instruciune din memorie Citire memorie Scriere memorie Combinaie neutilizat

LOCK : ie ire cu trei st ri, activ n ''0'', cu semnifica ia c magistralele nu pot fi cedate pe durata LOCK = ''0'', deoarece se afl n execu ie o instruc iune care nu poate fi ntrerupt . Semnalul este activat de prefixul LOCK al unei instruc iuni oarecare i r mne activ pe toat

152 durata execu iei instruc iunii. Prefixul const ntr-un octet plasat naintea octe ilor ce definesc instruc iunea. QS0 , QS1 : ie iri ( Queue Status Lines ), care indic dispozitivelor externe tipul de informa ie preluat de unitatea de execu ie din fi ierul de a teptare n starea anterioar . Informa ia este util pentru un coprocesor, n cadrul instruc iunii ESC, n vederea utiliz rii magistralelor la extragerea unui operand din memorie. QS1
0 0 1 1 QS0 Semnificaie Fr citire din fiier Octetul preluat a fost primul octet al instruciunii Fiierul este gol Octetul preluat nu a fost primul octet al instruciunii

0 1 0 1

11.3 Implementarea stivei


Stivele sunt formate n memoria RAM i sunt adresabile cu registrul segment SS i registrul pointer SP. Un program poate utiliza mai multe stive, fiecare cu lungimea maxim de 64 KB. Registrul SS con ine adresa de baz a stivei iar SP con ine adresa relativ (deplasamentul sau offset-ul) fa de baz , a vrfului stivei. Stivele au loca ii de 16 bi i i func ioneaz ca liste LIFO ( Last In First Out ), adic ultimul operand introdus n stiv este primul care poate fi extras. Un cuvnt este salvat n stiv la adresa relativ (SP-2); citirea din stiv se face prin copiere de la adresa (SP), dup care se face actualizarea registrului pointer SP: (SP+2). Loca iile din stiv sunt de 16 bi i i ca urmare operanzii care se introduc i se extrag n/din stiv sunt cuvinte de 16 bi i iar adresele a dou loca ii consecutive difer prin 2 ( n fiecare loca ie sunt doi octe i). Se pot introduce n stiv operanzi de 16 bi i din registre cu excep ia lui CS i operanzi de 16 bi i din memorie. Extragerea din stiv se face prin copiere ntr-un registru de 16 bi i, cu excep ia lui CS, sau n memorie. Salvarea n stiv se face cu instruc iunea PUSH iar extragerea din stiv cu POP. Decrementarea registrului SP la introducere i incrementarea sa la scoatere se fac automat. Programatorul trebuie s fixeze doar baza stivei n SS i limita superioar a stivei, n SP. Toate opera iile cu stiva se realizeaz apoi foarte simplu, prin instruc iunile PUSH i POP. Adresele la care se fac transferurile se calculeaz automat i nu prezint nici un interes. Tot ceea ce conteaz este ordinea n care se

153
POP AX POP BX 12 34 CC EF 06 EA AA A4 2A 30 C3 34 00 07 0A 00 2A EE 12 FF 00 02 00 C3 EE 08 8E AB 0B 1B 31 CC 12 EE 08 FF 0A 01 FE 00 05 12

AX
206E 206C 206A 2068 2066 2064 2062 2060 205E 205C 205A 2058 2056 2054 2052 2050

PUSH AX 12 34 EF 06 EA AA A4 2A 30 C3 34 00 07 0A 00 2A EE 12 FF 00 02 00 EE 08 8E AB 0B 1B 31 CC 12 EE 08 FF 0A 01 FE 00 05 0E

AX BX
206E 206C 206A 2068 2066 2064 2062 2060 205E 205C 205A 2058 2056 2054 2052 2050

EF 06 EA AA A4 2A 30 C3 CB 00 07 0A 00 2A EE 12 FF 00 02 00

EE 08 8E AB 0B 1B 31 CC 1B EE 08 FF 0A 01 FE 00 05 10

206E 206C 206A 2068 2066 2064 2062 2060 205E 205C 205A 2058 2056 2054 2052 2050

SS SP

SS SP

SS SP

Fig.5 Funcionarea stivei: situaia curent (stnga), introducerea n stiv (mijloc) i extragerea din stiv (dreapta).

face introducerea n stiv , deoarece la extragere aceasta se inverseaz : ''cel din urm va fi cel dinti'' . Calculul adresei se face astfel:
SS: SP: 0 2 0 0 0 5 0 + 1 0 = 0 2 0 6 0 H = 2060 H

- De ce sunt necesare stivele ? - Stivele sunt strict necesare n lucrul cu subrutine (proceduri i func ii), cnd trebuie eliberate registrele interne n vederea apel rii unei subrutine care va nc rca registrele cu propriile sale date. Con inutul registrelor este ns necesar la revenirea din subrutin . De aceea eliberarea registrelor se face prin salvarea lor n stiv , ntr-o anumit ordine i refacerea lor din stiv la revenirea din subrutin n programul apelant. - Nu putem folosi memoria RAM normal pentru salvarea registrelor ? - Ba da, dar con inutul registrelor interne este att de important nct acesta trebuie pus la loc sigur, unde accesul s fie simplu, pentru a nu

154 complica inutil textul programului, dar controlat de instruc iuni speciale, pentru evitarea erorilor de program.

11.4 Organizarea i adresarea memoriei


Pentru microprocesorul Intel 8086, memoria este un ir de 1.048.576 octe i, (1Megaoctet). Toate registrele sale interne de adresare fiind de 16 bi i, nu se pot transfera intern adrese mai lungi de 16 ranguri binare, adic nu se pot adresa spa ii de memorie mai mari de 64 kB. Pentru acoperirea unui spa iu de memorie de 16 ori mai mare (64 kB x 16 = 1 MB), acesta este divizat logic (n mod virtual) n segmente de maxim 64 kB. Microprocesorul poate lucra simultan cu 4 segmente de memorie, fiecare cu dimensiunea ntre 16 octe i i 64 kiloocte i, adresele lor de nceput fiind fixate n cele 4 registre segment . n utilizarea oric rei loca ii de memorie se folosesc dou feluri de adrese: fizic i logic . Adresa fizic este de 20 de bi i i identific n mod unic fiecare byte din spa iul memoriei ntre 00000 H i FFFFF H. Orice schimb de informa ie ntre CPU i memorie utilizeaz adresa fizic , pe care o transmite prin magistrale de adrese. O adres logic este format din doi parametri: adresa de baz i valoarea de offset ; pentru orice loca ie, adresa de baz indic adresa primului octet din segmentul de memorie iar valoarea de offset arat distan a n octe i de la adresa de baz la loca ia adresat . Adresa de baz i offset- ul sunt de 16 bi i fiecare. Primul octet dintr-un segment de memorie are offsetul ''0000''. Segmentele de memorie sunt blocuri care se pot suprapune; nu exist restric ii de delimitare a segmentelor n spa iul adreselor (fig. 6), singura restric ie fiind ca adresa de nceput a unui segment sa fie multiplu de 16, adic s aib ultimii 4 bi i de valoare ''0''. Pot exista segmente adiacente (A, B), segmente par ial suprapuse (B, C i D, E) sau segmente disjuncte (C, D). Definirea unui segment logic se face prin nc rcarea adresei de nceput ntr-un registru segment; nu se specific n nici un fel ct de mare este segmentul dar nu pot fi accesa i dect primii 64 ko, deoarece offset - ul este pe 16 bi i.

155
segm. C segm. A segm. B segm. D segm. E

segmente logice

10000

20000 18000

30000 28000

40000 38000

50000

memorie fizic

Fig.6 Relaia dintre segmentele logice i memoria fizic

Avantajele segmentarii memoriei sunt : Este facilitat programarea modular ; fiecare modul de program poate ocupa unul sau mai multe segmente i poate fi dezvoltat independent fa de celalalte. Permite scrierea programelor independent de adresele de memorie n care vor fi stocate, sau pozi ia lor n memorie poate fi modificat (realocarea dinamic ). Pentru aceasta, este necesar ca programele s nu afecteze con inutul registrelor segment i s nu fac referire la loca ii din afara segmentului curent; utiliznd instruc iuni de modificare a con inutului registrelor segment, un program poate fi mutat oriunde n memorie. Permite deservirea ''simultan '' a mai multor periferice; de exemplu, un program editor de texte care lucreaz cu mai multe imprimante poate transmite cte un bloc de 64 kB fiec rei imprimante care solicit intrarea n ''serviciu'' prin nc rcarea registrului ES cu baza segmentului de date unde se afl textul corespunz tor imprimantei ce solicit date. Se pot utiliza mai multe stive; schimbarea stivei se face prin plasarea adresei de nceput n registrul segment SS i a adresei vrfului stivei (limita de sus) n registrul pointer SP. Dezavantajele segment rii memoriei: Limitarea lungimii programelor la dimensiunea maxim a segmentelor. Adresa fizic se ob ine din doua adrese logice (baz i offset), ceea ce face necesar o opera ie suplimentar de adunare pe 16 bi i i implicit o unitate aritmetic destinat calculului adesei.

156
00002 00003 00004 . . . . Adresa 00000 00001 7 07 07 07 07 07 1 Megabyte Adresa
0 0 0 0

FFFFF 07 0

724 H 0
0 0 1 0

725 H 2
0 1 0 1

0 1 0 1

Cuvnt: 5502 H

Cuvntul de 16 bii este stocat cu octetul superior la adresa mai mare

777 H 6 5 0

778 H 0 4

779 H C 3

77A H B

Un dublu cuvnt (32 de bii) este stocat cu cuvntul superior la adresa mare dw = 3B4C 0065 H

Fig.7 Organizarea informaiei n memorie

Conform conven iilor firmei Intel cuvntul de 16 bi i este memorat n loca ii consecutive de 8 bi i, cu octetul inferior (b 0 - b 7) la adresa de valoare mai mic ( adr ) i cu octetul superior (b 7 - b 15 ) la adr+1 , iar dublul cuvnt este memorat cu cuvntul inferior (b 0 - b 15 ) la adr, adr+1 i cu cuvntul superior (b 16 - b 31) la adr+2, adr+3 (fig.7). Adresarea se poate face la nivel de octet dar i la nivel de cuvnt, adic doi octe i consecutivi, f r restric ii cu privire la adresa de nceput a operanzilor cuvnt. Microprocesorul genereaz cei 20 de bi i ai adresei fizice prin adunarea adresei de baz cu adresa efectiv (deplasament sau offset), fig.8. Con inutul registrului segment este de 16 bi i; pentru a ob ine adresa de baz a segmentului de memorie, de 20 de bi i, se completeaz con inutul registrului segment cu 4 bi i de valoare 0.
bii adugai Adresa de baz:

Registru segment 15 15 0

0 0 0 0 20 bii

Offset sau adres efectiv 0

Adunare 19 Adres fizic pe 20 de bii Fig.8 Calculul adresei fizice din adresa de baz i offset 0

157 Dou adrese fizice consecutive care se termin cu 0, cuprind ntre ele 16 loca ii. Dac DS=1234 H, ES=1235 H, rezult c segmentul de date adresat cu DS con ine 16 octe i: 12340, . . . ,1234F, iar segmentul de date adresat cu ES ncepe la adresa de baz 12350 H. De aceea lungimea minim a unui segment este de 16 loca ii. Pentru ob inerea adresei fizice se combin un registru segment cu un registru index (SI, DI), cu un registru pointer (SP, BP, IP, BX) sau cu un cuvnt de 16 bi i specificat n instruc iune (adres efectiv , EA). Nu este posibil orice combina ie ntre un registru segment i un altul care furnizeaz offset - ul. Registrele segment (care con in cte o adres de baz fiecare) permit adresarea imediat a 4 segmente de memorie. Programele ob in acces la un segment de cod i 3 segmente de date din orice zon de memorie, prin nc rcarea registrelor segment cu adresele de nceput ale segmentulor dorite. n tabelul de mai jos sunt date toate combina iile posibile. Tipul referinei la memorie Registrul segment utilizat CS SS ES DS DS SS DS Registrul segment alternativ CS, ES, SS CS, DS, ES CS, ES, SS Sursa adresei de offset IP SP DI SI EA EA EA

Extragere instruciuni Operaii cu stiva ir de octei - destinaie ir de octei - surs Variabile de program Adresare cu BP ca baz de offset Adresare cu BX ca baz de offset

Orice aplica ie va defini i utiliza segmentele proprii. Registrele de adresare curent (segment) asigur n general ca spa iu de lucru: 64 kbyte pentru coduri, 64 kbyte pentru stiv i 128 kbytes pentru stocarea datelor. Multe aplica ii pot fi srise prin simpla inni ializare a registrelor segment ( i apoi le po i uita !). Structura segmentat a memoriei descurajeaz programele foarte lungi, monolitice. Instruc iunile sunt totdeauna extrase cu CS i IP. Operanzii din stiv sunt ob inu i cu SS i SP, care con ine offset - ul fa de adresa de baz din SS. Majoritatea variabilelor (din memorie) sunt ob inute cu DS - curent, dar un program poate informa BIU cu privire la segmentul n care se afl

158 anumite variabile. Diferen a fa de adresa de baz este calculat de EU; calculul se bazeaz pe modul de adresare specificat n instruc iune; rezultatul calculului se nume te adresa efectiv a operandului (EA). irurile de octe i sunt adresate diferen iat, n func ie de variabile. Operandul surs din ir este ''citit'' cu DS dar poate fi specificat i alt registru segment. Offset-ul este furnizat de SI (registrul index surs ). Operandul destina ie din ir se ob ine cu ES iar offset-ul se ob ine din DI (registrul index destina ie). Opera iile cu iruri se execut sub controlul instruc iunilor specifice, care modific automt registrele SI i DI, dup cum lucreaz cu octe i sau cu cuvinte de 16 bi i. Cnd este folosit BP ca registru pointer (surs de offset) ntr-o instruc iune, variabila este citit cu SS. Registru BP permite un mod convenabil de adresare pentru datele din stiv ; BP poate fi de altfel utilizat la accesarea datelor i cu CS, DS, ES. n adresarea memoriei sunt facilitate modurile frecvente de adresare. Memoria fizic de 1 MB poate fi divizat n dou blocuri de cte 512 kB fiecare: blocul loca iilor cu adrese pare i blocul loca iilor cu adrese impare. Blocul par este conectat la liniile D0 - D7 ale magistralei de date (octet inferior) iar cel impar la liniile D8 - D15 ale magistralei (octet superior). Liniile de adres A1 - A19 se aplic ambelor blocuri de memorie i ca urmare la nc rcarea unei adrese se selecteaz simultan cte o loca ie din fiecare bloc. Transferul de date ntre loca iile selectate i magistrala de date se face ns cu nc dou linii, A0 i BHE (fig.9).

159
FFFFF H FFFFD H FFFFB H FFFF9 H Bloc impar 512 ko 00007 H 00005 H 00003 H 00001 H A1 - A19 BHE D8 - D15 A0 D0 - D7 Bloc par 512 ko 00006 H 00004 H 00002 H 00000 H FFFFE H FFFFC H FFFFA H FFFF8 H

Fig.9 Conectarea blocurilor de memorie la magistrale

BHE 0 0 1 1

A0 0 1 0 1

Se transfer Ambii octei Octet superior (cu adres impar) Octet inferior (cu adres par) Fr transfer

Pentru accesul la un operand cu adres par , A 0 = 0 iar BHE = 1 (inactiv) va invalida blocul impar. Ca urmare, are loc un transfer ntre loca ia adresat i octetul inferior al magistralei de date (fig.10).

a+1

a = adresa par

BHE=1

A0=0

A1-A19

D8-D15

D0-D7

Fig.10 Transfer de octet cu adres par

160

a+1

BHE=0

A0=1

A1-A19

D8-D15

D0-D7

Fig.11 Transfer de octet cu adres impar

Pentru accesul la un operand cu adres impar , linia A 0 =1va invalida blocul par iar BHE = 0 va selecta blocul impar. Ca urmare, are loc un transfer ntre loca ia adresat i octetul superior al magistralei de date (fig.11). n cazul unui transfer pe 16 bi i (cuvnt) ncepnd de la o adres par , ambele blocuri vor fi selectate simultan de liniile A 0 =0 i BHE = 0 . Are loc transferul ntre cele dou loca ii i ntreaga magistral de date D0-D15, ntr-un singur ciclu ma in i se spune c operandul este aliniat , adic ncepe de la adres par .

a+1

BHE=0

A0=0

A1-A19

D8-D15

D0-D7

Fig.12 Transfer de cuvnt cu adres par

n cazul accesului la un cuvnt (16 bi i) care ncepe la o adres impar , se spune c operandul este nealiniat i sunt necesare dou cicluri ma in pentru transfer. n primul ciclu ma in se transfer octetul de la adresa impar (a+1) pe liniile D8 - D15, fiind considerat octet inferior al operandului de 16 bi i. n al doilea ciclu ma in se transfer octetul de la adresa par (a+2) pe liniile D0 - D7, fiind considerat octet superior al operandului de 16 bi i. Toate opera iile, inclusiv direc ionarea corect a octe ilor, sunt coordonate de microprocesor, procesul de transfer fiind invizibil pentru utilizator. n acest caz, principalul dezavantaj este c procesul de transfer are o durat dubl fa de cazul unui operand aliniat . Realocarea dinamic

161

Structura segmentat a memoriei la 8086, 8088, 80186, 80188 face posibil scrierea programelor n mod independent de zona de memorie din care vor fi executate. Sistemul de operare poate aloca segmentele de memorie care sunt libere n momentul intr rii n execu ie - realocarea dinamic , ceea ce permite modul de lucru ''multitasking'' (rularea simultan a mai multor programe). Programele temporar inactive vor fi scrise pe discul magnetic iar spa iul ocupat de ele, alocat altor programe. Dac programul rezident pe disc este necesar mai trziu, el poate fi renc rcat n orice zon disponibil de memorie. Similiar, dac este necesar un spa iu mare de memorie pentru blocuri de date, iar memoria disponibil este format din fragmente neadiacente, un program segmentat poate fi ''compactat'' cu toate segmentele dispuse consecutiv, unificnd astfel zonele libere pentru blocuri masive de date (fig. 9).
segm. de cod nainte de realocare dup realocare

segm. stiv

CS SS DS ES

CS SS DS ES

segm. de cod segm. stiv segm. de date segm. de date Memoria

segm. de date segm. de date Memoria Fig. 9 Realocarea dinamic a memoriei

11.4.1. Locaii de memorie dedicate i locaii rezervate Dou zone de memorie (fig. 10) de la adrese joase i dou zone de la adresele nalte sunt dedicate unor func ii specifice ale procesorului sau rezervate de Intel pentru utilizarea produselor sale soft sau hard. Acestea sunt:

162 00000 - 00007F (128 octe i), utilizat pentru memorarea tabelei de vectorilor de ntrerupere; FFFF0 - FFFFF (16 octe i), zon adresat la ini ializarea sistemului prin activarea semnalului RESET. Pentru asigurarea compatibilit ii sistemului cu produsele Intel, aplica iile nu trebuie s utilizeze zonele de mai sus n alte scopuri.
FFFFF H FFFFC H FFFFB H FFFF0 H

Rezervat Intel Dedicat

Rezervat Intel Dedicat

00080 H 0007F H 00014 H 00013 H 00000 H

Fig. 10 Organizarea memoriei. Zone dedicate, zone rezervate.

11.5 Organizarea porturilor de intrare / ieire


Microprocesoarele Intel 8086 / 88 permit utlizarea unui larg spa iu de adrese pentru dispozitive I/O ( Input/Output ), separat fa de spa iul de memorie. Pentru transferuri rapide i complexe se poate folosi accesul direct la memorie sau coprocesorul Intel 8089 specializat n opera ii I/O. Porturile I/O pot fi adresate ca loca ii de memorie, ceea ce permite utilizarea instruc iunilor de lucru cu memoria, eficiente n privin a adres rii i vitezei de lucru. Spa iul I/O este suprapus ca adrese peste primul segment de 64 ko, n zona 00000 H - 0FFFF H i este accesibil prin instruc iunile dedicate, IN i OUT. Toate porturile sunt considerate n acela i segment; ele sunt adresate ca i loca iile de memorie dar f r registru segment. Un port poate fi de 8 bi i (echivalent cu o loca ie de memorie de 8 bi i), caz n care i adresa lui este de 8 bi i, sau poate fi de 16 bi i (echivalent cu o loca ie de memorie de 16 bi i), caz n care adresa lui este de 16 bi i. Dac portul este de 8 bi i el se poate conecta fie la octetul

163 inferior al magistralei de date (D0 - D7), fie la octetul superior (D8 D15). Adresele asociate porturilor trebuie s corespund conect rii la magistrala de date: dac portul este conectat la D0 - D7, adresa trebuie s fie par iar dac este conectat la D8 - D15, adresa trebuie s fie impar . Pentru un port de 16 bi i, conectarea se face la D0 - D15 iar adresa lui trebuie s fie par , pentru ca transferul datelor s se fac ntr-un singur ciclu ma in . Pentru accesul la un port, unitatea BIU plaseaz adresa portului (0 FFFF) pe liniile A0 - A15 ale magistralei de adrese. Adresa portului este specificat n instruc iune (dac este pe 8 bi i) sau n registrul DX (dac este pe 16 bi i). Instruc iunile IN ( Input - intrare) i OUT ( Output ie ire) transfer datele ntre acumulator i port. Dac portul este de 8 bi i, transferul se face ntre port i AL iar dac portul este de 16 bi i transferul se face ntre port i registrul AX. IN AL, port ; citire port de 8 bi i - adresa = port , data = AL IN AX, DX ; citire port de 16 bi i - adresa = DX, data = AX OUT port , AL ; scriere port de 8 bi i - adresa = port , data = AL OUT DX, AX ; scriere port de 16 bi i - adresa = DX, data = AX n adresarea indirect , se utilizeaz registrul DX pentru adresa de 16 bi i (registrul DX este nc rcat anterior cu adresa). La execu ia instruc iunii, con inutul lui DX este nc rcat pe magistrala de adrese (A0 A15). Se poate adresa orice port n spa iul I/O din domeniul 0000 H FFFF H (65 536 porturi). n adresarea direct sau imediat , adresa portului apare n instruc iune i este n domeniul 00 H - FF H (256 porturi). Dac porturile sunt adresate ca loca ii de memorie, orice mod de adresare a operanzilor din memorie poate fi utilizat pentru acces la porturi (exemplu: un grup de terminale de date poate fi accesat ca un tablou).

11.6 ntreruperi
O ntrerupere opre te temporar execu ia unui program i transfer controlul unei rutine (subprogram) specifice de tratare ce corespunde cauzei ce a generat ntreruperea. Mecanismul prin care se face acest transfer este n esen de tip apel de procedur , ceea ce implic revenirea n programul ntrerupt dup execu ia rutinei de tratare. ntreruperile hardware externe sunt activate de cereri de ntrerupere generate de dispozitive periferice inteligente, sub forma unor semnale electrice, aplicate pe intr rile INTR i NMI ale procesorului; cele interne apar ca urmare a unor condi ii speciale de func ionare a procesorului (de exemplu, modul de lucru pas cu pas).

164 ntreruperile mascabile pot fi dezactivate prin comenzi de program i sunt cele produse de semnale aplicate pe intrarea INTR a procesorului; cele nemascabile nu pot fi dezactivate prin comenzi de program i sunt cele produse de semnale aplicate pe intrarea NMI. ntr-un sistem cu procesor 8086 pot exista maxim 256 de ntreruperi distincte. Fiecare din aceste nivele poate avea asociat o procedur de tip far, numit rutin de tratare. Adresele acestor rutine sunt nregistrate ntr-o tabel de ntreruperi aflat n zona de memorie 00000 - 003FFH, ocupnd deci 1024 octe i. Fiecare nivel ocup 4 octe i, primii 2 reprezentnd offset-ul iar urm torii 2 adresa de segment a procedurii. Practic, un vector de ntrerupere con ine adresa complet a subrutinei de tratare ntrerupere corespunz toare. Tabela vectorilor de ntrerupere con ine trei zone: o zon dedicat , care este utilizat n mod automat de microprocesor pentru cererile de ntrerupere predefinite (00000H00013 H); o zon rezervat , pentru p strarea compatibilit ii cu produsele Intel; o zon disponibil , la dispozi ia utilizatorului (00080H - 003FFH).
Adresa rutinei de tratare (n Hexa)
003FC 003F8 . . 00080 0007C . . 00014 00010 0000C 00008 00004 00000

Tipul ntreruperii INT 255 - Disponibil INT 254 - Disponibil . . INT 32 - Disponibil INT 31 - Rezervat . . INT 5 - Rezervat INT 4 - Depire INT 3 - Breakpoint INT 2 - Nemascabil INT 1 - Mod pas cu pas INT 0 - Eroare de divizare

La apari ia unei ntreruperi au loc urm toarele ac iuni: se salveaz n stiv registrele F, CS, IP; se pun n zero indicatorii IF i TF; se furnizeaz procesorului un octet (0 - 255) numit vector de ntrerupere care identific nivelul asociat ntreruperii curente;

165 prin intermediul tabelei de ntreruperi se execut salt intersegment la adresa rutinei de tratare; Vectorul de ntrerupere poate fi furnizat procesorului n unul din urm toarele moduri: n cazul ntreruperilor hard interne nivelul este implicit; n cazul ntreruperilor hard externe, nivelul este transmis prin magistrala de date n cadrul ciclului ma in de tratare, de c tre dispozitivul care a generat ntreruperea. n cazul ntreruperilor soft, nivelul este con inut n instruc iune.

11.6.1. ntreruperile externe Sunt ini iate la intr rile INTR i NMI ale procesorului. O cerere pe linia NMI genereaz o ntrerupere nemascabil i este predefinit de tipul INT 2, adic procesorul execut accesul la vectorul 2 f r alte informa ii suplimentare. O cerere pe linia INTR este generat , de regul , de un circuit extern specializat, care evalueaz prioritatea n cazul apari iei cererilor simultane din mai multe surse i permite trecerea cererii cu prioritate maxim la momentul respectiv. Intrarea INTR este testat de microprocesor la terminarea execu iei fiec rei instruc iuni. Singurele excep ii de la regul apar n cazul instruc iunilor pentru iruri de date, la care linia INTR este testat dup prelucrarea fiec rui element din ir i n cazul instruc iunii WAIT, la care linia INTR este testat dup fiecare verificare a liniei TEST. Exist cteva situa ii n care cererea de ntrerupere este servit numai dup execu ia instruc iunii urm toare. Este cazul instruc iunilor precedate de prefixe; nu este luat n considera ie cererea de ntrerupere ntre execu ia prefixului i a instruc iunii. De asemenea este cazul instruc iunilor MOV i POP care ncarc registrele de segment; nu se recunoa te nici o cerere de ntrerupere dect dup execu ia instruc iunii urm toare din motive de protec ie. Pentru schimbarea segmentului de memorie este necesar modificarea a dou registre. Dac cererea de ntrerupere intervine ntre modificarea primului registru i cea a celui de-al doilea, exist riscul ca ultimul transfer s nu se mai execute corect ceea ce duce la erori grave n continuarea programului. Pentru servirea cererilor INTR (mascabile) este necesar ca sistemul de ntreruperi s fie activat prin setarea indicatorului IF (IF = 1); setarea se face cu instruc iunea STI ( Set Interrupt ) iar resetarea (IF = 0) se face cu CLI ( Clear Interrupt ).

166 Dac IF = 1, microprocesorul va lua n considera ie cererea de ntrerupere de pe linia INTR. Dup citirea codului ntreruperii pe D0-D7, registrul F (al indicatorilor de condi ii) este depus n stiv ; se salveaz n stiv , de asemenea, registrele CS i IP i se anuleaz IF i TP pentru a invalida eventuale cereri INTR i modul de lucru pas cu pas. Se execut un ciclu ma in special, de tratare ntrerupere, n care CS i IP sunt nc rca i din tabela vectorilor de ntrerupere, n func ie de codul pe 8 bi i al ntreruperii. Subrutina de tratare a ntreruperii trebuie s se ncheie cu instruc iunea IRET care determin revenirea n programul principal i refacerea din stiv a registrelor CS, IP i F cu vechile valori. Cererea de ntrerupere de tip NMI are codul 2 i este luat n considera ie dac are o durat de cel pu in dou st ri. Opera iile efectuate de microprocesor sunt acelea i cu cele de la cererea de tip INTR.

11.6.2.

ntreruperile interne

Sursa de ntrerupere nu este un eveniment extern. ntreruperea apare ca urmare a execu iei unei instruc iuni INT nn sau ca urmare a unui eveniment intern (ntreruperi predefinite). Instruc iunea INT nn este pe doi octe i i realizeaz leg tura cu vectorul nn din tabela de ntreruperi. Are acela i efect cu o ntrerupere extern cu codul nn , dar nu este mascabil i nu se execut o secven de acceptare, deci nu se vor genera semnale INTA. ntreruperile predefinite sunt generate automat de procesor la detectarea unor evenimente interne; acestea sunt: mp r ire la zero - INT 0; func ionare pas cu pas - INT 1; breakpoint (punct de oprire) - INT 3; dep ire - INT 4; ntreruperea INT 0 este generat ca urmare a execu iei unei mp r iri cu ctul mai mare dect valoarea maxim admis . n cazul instruc iunii DIV valoarea maxim a ctului este FF sau FFFF, dup cum mp r itorul este octet, respectiv cuvnt. n cazul instruc iunii IDIV, cele dou valori sunt 7F sau 7FFF. ntreruperea INT 1 este luat n considera ie dac indicatorul TF=1. Efectul ei este modul de lucru pas cu pas, n care dup fiecare instruc iune se poate afi a con inutul registrelor, al loca iilor de memorie, informa ii necesare verific rii i depan rii programelor. Procesorul nu dispune de instruc iuni pentru modificarea direct a indicatorului TF. Opera ia se poate realiza indirect, cu ajutorul stivei. Instruc iunea PUSHF depune

167

Instruciunea curent terminat Secventa de acceptare ntrerupere

INT ? Nu NMI ? Nu INTR ? Nu

Da

Da

Citire cod ntrerupere

Da 0 1 1

Salvare indicatori n stiv IF = ?

Anulare IF si TF

TF = ? 0

Salvare CS si IP

Execuia instruciunii urmtoare

Apel subrutin

NMI ? Nu
valoare veche

Da

TF ? 0

Executie subrutin

Fig.11 Organigrama operaiilor la tratarea cererilor de ntrerupere

Refacere CS, IP, F

Terminare ntrerupere

registrul F n stiv . Indicatorii pot fi modifica i cu instruc iunile logice i

168 renc rca i cu instruc iunea POPF. ntreruperea INT 3, de tip breakpoint - punct de oprire, are codul pe un singur octet i are ca efect oprirea execu iei n punctul din program n care apare INT 3. Serve te test rii i depan rii programelor prin examinarea st rii procesorului (registre, indicatori etc.) n punctul de oprire. ntreruperile INT 4 este generat la apari ia dep irii capacit ii registrelor la execu ia unei opera ii aritmetice, dep ire ce determin setarea indicatorului OF ( Overflow Flag = 1 ); ntreruperea nu se genereaz automat ci numai dac microprocesorul execut instruc iunea INTO, care, n general, trebuie s urmeze dup instruc iunile aritmetice cu operanzi cu semn. Subrutina de tratare con ine, de regul , un mesaj c tre utilizator, care l informeaz cu privire la apari ia dep irii. n concluzie, instruc iunile care genereaz ntreruperi interne sunt: INT nn - determin generarea unei intreruperi interne de tip nn ; microprocesorul extrage vectorul de ntrerupere nn din tabela de ntreruperi i execut subrutina de tratare f r generarea unui ciclu extern de tip INTA; INTO - determin generarea unei ntreruperi predefinite de tip 4, cnd indicatorul de dep ire OF=1, ca urmare a execu iei unei instruc iuni aritmetice cu operanzi cu semn; IRET - ( Interrupt Return ) determin revenirea n programul principal (din subrutin ) prin restaurarea din stiv a registrelor IP, CS i a indicatorilor de condi ii F. Timpul de procesare definit din momentul recunoa terii unei cereri de ntrerupere i pn cnd microprocesorul realizeaz accesul la nceputul subrutinei de tratare, depinde de tipul ntreruperii i este dat n tabelul de mai jos. Tip de ntrerupere Timp (n perioade de tact) ntrerupere extern INTR 61 ntrerupere extern nemascabil NMI 50 INT nn 51 INT 3 52 INTO 53 INT 1 50 n tabelul urm tor sunt prezentate nivelurile de prioritate ale cererilor de ntrerupere interne i externe, care determin ordinea de tratare cnd cererile apar simultan.

169 Tip de ntrerupere Tip 0, INT nn INTO NMI INTR Tip 1 (pas cu pas) Prioritatea 0 - maxim 1 2 3 4 - minim

n fig.11 sunt prezentate opera iile executate de microprocesor la acceptarea i achitarea unei cereri de ntrerupere. O cerere de ntrerupere este luat n considerare numai la terminarea execu iei instruc iunii curente. Dac indicatorul IF=1, procesorul execut secven a de acceptare cerere de ntrerupere extern , preia codul ntreruperii de pe magistrala de date i execut opera iile comune tuturor tipurilor de ntrerupere. Se salveaz n stiv IP, CS i registrul indicatorilor de condi ii, F, dup care indicatorii IF i TF sunt anula i. Dac n timpul proces rii unei cereri de ntrerupere, apare o cerere pe linia NMI naite de realizarea accesului la subrutina de tratare a primei ntreruperi, cererea de pe linia NMI va fi servit cu prioritate. Dup execu ia subrutinei de tratare ntrerupere se refac din stiv registrele CS, IP, F i se revine n programul principal. La ncheierea instruc iunii urm toare se testeaz existen a unei cereri de ntrerupere i dac da, procesul se reia.

170

11.7 Unitate central cu microprocesorul 8086


Dup apari ia lui Intel 8086, a fost lansat familia de circuite Intel necesar realiz rii unit ilor centrale cu 8086. Ea cuprinde: - coprocesoarele 8087, 8089; - 8284 - generator de tact; - 8228 - controler de magistral ; - 8282, 8283 - registre tampon de opt bi i; - 8286, 8287 - amplificatoare bidirec ionale (8 bi i) de magistral .
RES RDY1 RDY2 AEN1 AEN2

Qz
CLK RD WR
M / IO

8284

READY RESET

PCLK OSC +Vcc

ALE BHE MN/MX


A16-A19 AD0 - AD15

Magistrala de adrese STB 8282 DE BHE Memorie RAM ROM

Porturi I/O

8286 T DE

Magistrala de date D0 - D15

Fig. 12 Unitate central cu 8086 n modul minim

Generatorul de tact 8284 genereaz semnalul CLK pentru microprocesor i PCLK pentru circuitele specializate cu diferite func ii n sistem. De asemenea genereaz semnalele RESET i READY c tre microprocesor sincronizate cu semnalul de tact. Pentru generarea semnalului CLK, se divizeaz semnalul generat de un oscilator cu cuar sau un semnal exterior; semnalul PCLK are o frecven de dou ori mai mic i un factor de umplere 1/2. Registrul 8282 este utilizat ca tampon pentru demultiplexarea magistralei comune de date i adrese. Are i rol de amplificator de magistral , asigurnd un fan - out de 20 intr ri TTL. Informa ia de la

171 intr rile DI apare al ie irile DO pe nivelul 1 logic al semnalului STB i este memorat n cele 8 circuite basculante bistabile de tip D. Pentru ca informa ia s fie disponibil la ie iri, este necesar ca semnalul de validare DE =0 .
DI 0 D C Q D C Q D C Q D C Q D C Q D C Q D C Q D C Q DO 0 DO 1 DO 2 A2 DO 3 A3 DO 4 A4 B4 DO 6 DO 7 DE A7 B7 DE A5 B5 A6 B6 B3 B2 A0 B0 A1 B1

DI 1 DI 2 DI 3 DI 4

DI 5 DI 6 DI 7 STB

DO 5

Fig. 13. Schema circuitului 8282

Fig. 14. Schema circuitului 8286

Amplificatorul de magistral 8286 este bidirec ional, pe 8 bi i, cu ie iri cu trei st ri i fan-out 20 pentru ie irile B, 6 pentru ie irile A. Circuitul realizeaz func iile de amplificare i transfer atta timp ct DE = 0. Dac DE = 1 , ie irile trec n starea de nalt impedan . Sensul transferului este stabilit de intrarea T: dac T=1 , transferul se face de la A la B iar dac T=0 , de la B la A. n modul maxim, 8086 poate fi utilizat n sisteme de complexitate mare, de tip multiprocesor. Generarea semnalelor de comand c tre memorie i porturi se face prin intermediul unui circuit specializat din familie, 8288.

172 Controlerul de magistrale, 8288, amplific ie irile de comand i date, realiznd un fan-out 20 pentru ie irile de comand i 10 pentru cele de date. n func ie de combina ia binar dat de liniile de stare, circuitul genereaz semnalele de comand pentru citire/scriere memorie i porturi precum i pentru acceptarea unei cereri de ntrerupere. Circuitul genereaz cteva semnale de control: DEN (validarea transferului pe magistrala de date, DT/R (indic sensul transferului), ALE (Adress Latch Enable - pentru demultiplexarea magistralei de adrese i date)
RES RDY1 RDY2 AEN1 AEN2

Qz
CLK READY RESET

8284

S0 S1 S2

CLK

8086
PCLK OSC BHE MN/MX A16-A19 AD0 - AD15

8288 DEN DT/R ALE STB

INTA MRDC MWTC IORC IOWC Magistrala de adrese

BHE 8282 DE Memorie RAM ROM

Porturi I/O

8286 T DE

Magistrala de date D0 - D15

Fig. 15 Unitate central cu 8086 n modul maxim

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