Microprocesorul 8086. Generalitati
Microprocesorul ca si unitate centrala de prelucrare a fost inventat in 1971 de catre Hoff Tod, angajat al firmei Intel. Unul dintre microprocesoarele realizate de firma Intel in anul 1978 a fost microprocesorul I8086. Acesta contine in jur de 28000 de tranzistori ocupand o suprafata de 37mm patrati. Magistrala interna de date a microprocesorului I8086 contine 16 linii. Registrele interne sunt organizate pe 16 biti.
Principalele caracteristici ale microprocesorului 8086 sunt:
pe magistrala de adresa a microprocesorului sunt multiplexate date si comenzi
uP poate adresa pana la 1Mo (Mb) de memorie
uP poate sa lucreze cu operanzi de diferite dimensiuni; 4 b 16416u203q iti, 8 biti, 16 biti, sir de caractere, etc.
uP are un anumit numar de terminale cu 2 functii
uP se alimenteaza de la o singura tensiune de alimentare
Structura interna a uP 8086
Din schema bloc se observa ca structura uP 8086 contine 2 parti importante:
EU - unitatea de executie, care are ca si sarcina principala executia instructiunilor
BIU - unitatea de interfata cu magistrala externa si are rolul de a transfera operanzi din unitatea de executie spre/dinspre exterior
EU are rolul de a decodifica si executa instructiunile pe care le extrage in mod automat din linia de octeti, care la randul lor sunt furnizati de catre BIU.
Daca in urma decodificarii unei instructiuni este necesara folosirea unui operand, comunica acest lucru la BIU, impreuna cu adresa pe 16 biti a operandului.
Pe durata executiei instructiunilor EU testeaza si seteaza indicatorii (indicatori de conditie).
Daca linia de instructiuni ramane goala, executa ciclii de asteptare pana cand BIU aduce o noua instructiune.
Daca EU executa o instructiune de salt, comunica BIU noua adresa la care se realizeaza saltul si asteapta ca BIU sa aduca instructiunea de la adresa indicate.
BIU are rolul de a asigura interfata uP cu exteriorul, prin intermediul unei magistrale formata din 20 de linii. Obs. Primele 16 linii sunt multiplexate in timp cu informatii referitoare la adrese sau date. Celelalte 4 linii sunt folosite pentru multiplexarea in timp a unor informatii de adresa sau comenzi/stari in care se afla uP la un moment dat. BIU genereaza semnale de comanda pentru citirea/scrierea operanzilor din/in memoria externa. Genereaza semnale de comanda folosite in operatiile de intrare/iesire. Blocul notat linie de instructiuni este in esenta o memorie de tipul FIFO cu capacitatea de 6 octeti. Aceste instructiuni ajung la EU doar in urma unor cereri. Daca in sirul de instructiuni exista cel putin 2 octeti liberi si daca EU nu solicita un transfer cu exteriorul, atunci BIU adduce in mod automat urmatoarea instructiune din memoria externa ca sa completeze linia de instructiuni. Instructiunile pentru uP 8086 sunt codificate pe 16 biti si se afla la adrese successive fata de instructiunea care este in curs de executie. In urma unei ramificari in program, BIU transfera la EU instructiunea aflata la adresa la care s-a facut saltul si apoi umple linia de instructiuni cu instructiuni aflate la adresele successive ale adresei de salt. BIU adduce in mod automat instructiuni pentru ca EU sa castige timp.
Registrele uP 8086
Exista atat register ale EU cat si ale BIU. Registrele EU/de date: Ax, Bx, Cx, Dx sunt organizate pe 16 biti si care pot fi folosite si ca register de cate 8 biti: AH, AL, BH, BL, CH, CL, DH, DL. Toate cele 4 registre pot fi folosite de uz general, pentru stocarea temporara a operanzilor. Cu toate acestea pot sa aiba si functii speciale, cum ar fi:
Ax - registru accumulator; in acest registru se salveaza rezultatele operatiilor aritmetice si logice;
Bx - registru de baza, folosit adesea pentru obtinerea unor adrese;
Cx - registru contor, folosit in toate instructiunile de incrementare si decrementare;
Dx - registru de date, folosit pentru pastrarea unui operand necesar unei operatii aritmetice.
Setul de registre segment
CS -pentru codul programului, DS - pt date, SS - pt arhivare, ES - pt date.
CS organizat pe 16 biti reprezinta segmental de cod si contine adresa de inceput pt un anumit segment de 64 Ko in care se gasesc instructiuni (cod de program). DS si ES sunt registre segment de date si contin adrese de inceput pt cate un segment de 64 Ko. SS este un segment de stiva, folosit pt salvarea temporara a unor informatii de date. Este organizat pe 16 biti. IP este registrul indicator de program, organizat tot pe 16 biti si contine adresa unei instructinui care sa gaseste in interiorul segmentului de cod de program definit cu ajutorul continutului registrului CS. Continutul registrului IP in mod normal de functionare este incrementat cu o unitate. Adresa fizica a unei instructiuni care trebuie adusa unitatii de executie a uP se va obtine cu ajutorul registrelor CS si IP. Registrul IP contine deplasamentul in cadrul unui segment de cod definit cu ajutorul registrului CS. Pt accesarea locatiilor de memorie din cadrul segmentelor de date de stiva si de date suplimentare, se vor folosi urmatoarele register organizate pe 16 biti: SP, BP, DI si SI. Registrul SP este indicator de stiva; are un rol similar cu cel al registrului IP fata de registrul CS cu observatia ca SP contine deplasamentul in cadrul segmentelor de stiva. Registrul BP este indicator de baza; cu ajutorul acestui registru se pot face diferite tipuri de adresari. Registrele DI si SI sunt folosite in cadrul operatiilor de transfer de siruri de caractere sau blocuri de date. Registrul SI va contine adresa de inceput a zonei de memorie in care se afla un sir de caractere sau un bloc de date care urmeaza a fi transferat/mutat in alta zona a memoriei de date. Registrul DI la fel ca SI se foloseste in cazul unor instructiuni similar cu observatia ca acesta contine adresa de inceput din cadrul memoriei de date, la care se vor transfera sau muta datele.
Segmentarea memoriei. Avantaje si dezavantaje
In unitatea de interfata cu magistrala exista o unitate aritmetica capabila sa calculeze adresa fizica conform modelului indicat. uP poate sa lucreze la un moment dat cu maxim 4 segmente. Segmentele de memorie pot uneori sa se suprapuna partial, sau chiar total. Daca toate cele 4 segmente se suprapun total rezulta ca lungimea maxima a programului care poate sa fie realizat este de 64 ko. Aceste programe au extensia .com. Daca segmentele nu se suprapun total, sau ocupa zone de memorie total diferite, programul rezultat va avea extensia .exe. Exista restrictive ca toate registrele de segment sa contina adrese multiplu de 16.
Avantajele segmentarii memoriei:
este permisa scrierea programelor independent de pozitia pe care acestea le vor ocupa in memorie;
se pot declara si utilize un numar mare de stive;
este facilitata programarea modulara; fiecare modul poate sa ocupe unul sau mai multe segmente;
Dezavantajele segmentarii memoriei:
limitarea dimensiunii programelor datorita dimensiunii segmentelor;
obtinerea adresei fizice se obtine prin insumarea a doua adrese logice, rezulta scaderea vitezei de executie a programelor.
Mecanismul de adresare a unei locatii de memorie
Pentru a obtine o adresa fizica se utilizeaza urmatoarele resurse ale uP:
unitatea aritmetica pt calcularea adreselor;
un registru segment;
un registru asociat registrului de segment, care contine un deplasament.
Inainte de obtinerea adresei fizice continutul registrului segment este deplasat cu 4 locatii la stanga. In urma acestei faze rezulta faptul ca cu ajutorul continutului unui registru segment vom putea obtine adrese multiplu de 16. La noul cod obtinut se adauga deplasamentul continut intr-un registru intern al uP. Pt accesul la instructiunile unui program se folosesc registrul segment de cod (CS) si registrul indicator de program (IP). Pt accesul la stiva se folosesc registrul segment de stiva (SS) si indicatorul de stiva (SP). Pentru lucrul cu siruri de caractere/date se foloseste ca si sursa registrul segment de date (DS) cu deplasamentul mentionat in registrul DI, iar ca destinatie se foloseste registrul segment de date suplimentare ES cu deplasamentul mentionat in registrul DI. Spatial adresabil direct de catre uP 8086 este de 1 Mb, adica adresa de la 00000h la FFFFFh. In spatial de memorie cuprins intre 00000h si 000FFh sunt stocati vectorii de intrerupere, iar spatial de memorie de la FFFF0h pana la FFFFFh sunt activati in urma aparitiei semnalului de RESET.
Impartirea fizica a memoriei. Modurile de transfer de date
uP 8086 poate adresa o memorie a carui capacitate este de 1 Mb. Fizic aceasta memorie poate fi impartita in 2 bancuri (blocuri) de cate 512 Kb. Un bloc de memorie va contine toate locatiile de memorie care au adresa para, iar celalalt bloc va contine toate locatiile de memorie care au adresa impara. Blocul care contine locatiile de memorie cu adrese pare este conectat la magistrala inferioara de date (liniile D0-D7), iar blocul care contine locatiile de memorie cu adrese impare este conectat la magistrala superioara de date (liniile D8-D15). Liniile de adresa (A1-A19) sunt folosite pentru adresarea simultana a celor 2 blocuri de memorie. Suplimentar, pt activarea unei locatii de memorie cu adresa para respective impara, se folosesc semnalele de pe linia A0negat, BHEnegat.
Registrul de stare al uP 8086
Este un registru pe 16 biti. Dintre cei 16 biti, doar 9 sunt active, restul fiind rezervati de catre firma producatoare. Valorile acestor biti se modifica, dupa caz, dupa efectuarea fiecarei instructiuni a unui program. Starea fiecarui bit poate fi testataprin program si in functie de valoarea logica se pot lua anumite decizii. Dintre cei 9 biti de stare, 4 pot sa fie setati direct prin program. Continutul registrului de stare este urmatorul: 15x 14x 13x 12x 11OF 10DF 9IF 8TF 7SF 6ZF 5x 4AF 3x 2PF 1x 0CF. Bitii marcati cu x sunt bitii rezervati de firma producatoare.
CF - repr indicatorul de transport; trece in 1 logic ori de cate ori are loc o depasire sau un imprumut fata de continutul acumulatorului.
PF - indicator de paritate; este trecut in 1 logic cand rezultatul unei operatii aritmetice sau logice este un octet ce contine un numar par de unitati.
AF - indicator de transport auxiliar; trece in 1 logic daca in urma operatiilor aritmetice si logice apare un transport/imprumut intre digitii unui octet.
ZF - indicator de egalitate sau zero; este trecut in 1 logic daca rezultatul unei operatii aritmetice sau logice este 0.
SF - indicator de semn, contine bitul cel mai semnificativ al rezultatului care in cazulin care este 1 indica un rezultat negative, inver, indica un rezultat pozitiv.
OF - indicator de depasire; se activeaza atunci cand apare depasirea capacitatii registrelor ca urmare a unei operatii aritmetice cu operanzi de semn.
Urmatorii 3 biti pot sa fie setati prin program.
TF - indicatorul pentru modul de lucru "pas cu pas"; daca este setat in 1 logic atunci uP 8086 lucreaza in modul instructiune cu instructiune.
IF - indicatorul de intreruperi; daca contine valoarea 1 logic atunciuP 8086 a acceptat o cerere de intrerupere sosita la pinul sau extern INTR.
DF - indicatorul de directive; se foloseste in cazul operatiilor cu siruri de caractere; daca acest bit este setat, atunci instructiunea de deplasare a sirurilor incrementeaza adresa operanzilor din sir dupa fiecare transfer; daca bitul DF este resetat, atunci adresele sunt decrementate.
Terminalele uP 8086 si functiile acestora
uP 8086 poate sa lucreze in 2 moduri: modul minim si modul maxim de functionare. Acest fapt poate sa fie selectat aplicand un anumit nivel de tensiune pepinul MN/MXnegat. Pt cele 2 moduri de lucru, anumiti pini ai uP indeplinesc aceleasi functii. Terminalele care au acelasi rol pt cele 2 moduri de lucru sunt:
AD0-AD15 - terminale bidirectionale cu 3 stari (L, H, infinit). Pe aceste linii sunt multiplexate in timp informatiile referitoare la adresa pe accesarea memoriei externe si date.
A16/S3, A17/S4, A18/S5, A19/S6 - aceste linii doar de iesire sunt folosite doar pt multiplexarea in timp a informatiilor legate de adrese, respective de stare a uP. S3 si S4 indica registrul segment folosit la calculul adresei fizice. S5 copiaza indicatorul de stare IF. S6 este totdeauna in 0 logic.
BHEnegat/S7 - este o iesire cu 3 stari. Acest terminaleste folosit pt transferul de date pe magistrala superioara de date.
RDnegat - terminal de iesire cu 3 stari. Acest terminal este folosit in cazul in care uP efectueaza un ciclu de citire de date.
READY - este folosit pt sincronizarea uP cu perifericele in cazul unui transfer de date.
INTR - este un terminal la care sosesc cererile de intrerupere.
INTR A - este un terminal de iesire prin intermediul caruia uP confirma acceptarea unei intreruperi.
NMI - este o intrare prin care uP-ului i se transmit intreruperi nemascabile.
RESET - acest terminal este folosit pt initializarea uP-ului (conform specificatiilor producatorului)
TESTnegat - este o intrare utilizata de instructiunea WAIT. Daca semnalul aplicat pe TESTnegat este nul rezulta ca executia programului continua; in caz contrar uP ramane in stare de asteptare.
CLK - este un terminal de intrare pe care se aplica un semnal periodic care dicteaza ritmul de executie al instructiunilor. Cu ajutorul terminalului MN/MXnegat se poate impune modul de functionare a uP (MN=mod minim, MXnegat=mod maxim)
Pentru modul minim de functionare uP mai utilizeaza urmatoarele terminale:
M/IOnegat - terminal cu 3 stari; indica circuitul extern cu care comunica uP: memories au circuite de intrare-iesire.
WRnegat - se activeaza ori de cate ori uP executa un ciclu de scriere; semnalele WRnegat, respectiv RDnegat nu pot sa fie activate simultan
ALE - este o iesire folosita pt demultiplexarea informatiilor legate de adresa si date, care circula pe magistrala externa a uP.
DT/Rnegat - un terminal care indica faptul ca uP initiaza (impune) un anumit sens de transfer a datelor
DEHnegat - este un pin cu 3 stari de iesire, care este folosit pt a indica (confirma) ca datele au fost preluate de catre uP.
HOLD - terminal de intrare.
HOLDA - terminal de iesire. La aparitia unui semnal de nivel 1 logic, pe pinul HOLD al uP-ului i se solicita cedarea magistralei. Daca HOLDA este in nivel I logic uP accepta cedarea magidtralei.
Pentru modul maxim de functionare uP foloseste urmatoarele terminale: S0negat, S1negat, S2negat. Cu ajutorul acestor semnale se poate identifica precis ciclul pe care il executa uP. Aceste semnale sunt folosite de circuite integrate specializate, care la randul lor vor genera semnale de comanda pt unitati de memories au circuite de intrare-iesire.
Sistemul de intreruperi
Intreruperile permit abandonarea pe moment de catre uP a executiei unei secvente de instructiuni si inceperea executiei unei subroutine de program. Adresa de inceput a acestei subroutine care deserveste un anumit tip de intrerupere poate sa fie plasata oriunde in memoria de program. uP 8086 admite 2 tipuri de intreruperi: interne sau externe, clasificate in functie de cauzele care le produc. uP 8086 poate trata 2la8=256 de tipuri de intreruperi, fiecare intrerupere in final identificata printr-un cod. Legatura dintre intreruperi si subrutinele care deservesc acestor intreruperi este realizata prin intermediul unei tabele de vectori de intrerupere. Un vector de intrerupere ocupa in memoria de program 4 octeti. Cu ajutorul unui vector de intreruperi uP 8086 poate sa genereze o adresa fizica din spatial de memorie direct adresabil. Spatial de memorie folosit pt setul de vectori de intreruperi este cuprins intre 00000h si 003FFh. Tabela cu vectorii de intreruperi este impartita in 3 domenii:
zona dedicate unor intreruperi specific, date de uP;
zona rezervata, folosita de firma producatoare pt a asigura compatibilitate cu alte produse;
zona pusa la dispozitie pt utilizator.
Intreruperile externe provenite din exterior, sosesc la pinii NMI, respective INTR. Intreruperea NMI nemascabila nu poate fi inhibata de catre utilizator. Ori de cate ori la pinul NMI soseste o cerere de intrerupere, uP abandoneaza temporar executia secventei curente de program si realizeaza in mod automat accesul la subroutina care deserveste aceasta intrerupere. Cererile de intreruperi care sosesc la pinul INTR sunt selectate in prealabil de un circuit specializat exterior, care ami are rolul de a stabili prioritatea lor. uP testeaza in mod automat nivelul semnalului aplicat la pinul INTR. Obs. Intreruperea INTR este acceptata doar daca bitul IF este setat in 1 logic. Indicatorul IF poate fi setat sau resetat de catre utilizator. Se recomanda ca pe durata efectuarii unor initializari intreruperile care sosesc la pinul INTR sa fie invalidate. Instructiunile care se pot seta sau reseta sunt: STI si CLI. Dupa acceptarea unei cereri de intrerupere, bitul IF este resetat in mod automat.
|