NO IUNI DESPRE FUNC IONAREA sI ADRESAREA DATELOR LA mP PE 16 BIŢI
4.1.Functionare mP la nivel de magistrala
Dupa cum s-a vazut pe placa de baza a calculatorului PC exista un circuit de ceas (clock) care genereaza un semnal de o anumita frecventa - 14,3 Mhz PC original si peste 100 Mhz la cele actuale- care serveste pentru executia sincronizata a operatiilor din interiorul mP si efectuarea transferurilor ntre diferite blocuri la nivelul magistralei externe.
In timpul functionarii activitatea mP poate fi descompusa n secvente de microoperatii care formeaza asa numitii ciclii masina Functie de natura operatiei care se executa putem avea 5 tipuri de ciclii masina :
Lectura(read). atunci c nd se citesc date din memorie sau de la dispozitivekle de i/o;
Scriere (write) c nd datele se inscriu in locatii de memorie sau intr-un dispozitiv de ilo;
Recunoastere ntrerupere n cazul generarii unei intreruperi pe care mP o identifica;
Oprire (halt) atunci c nd mP este oprit p na la primirea unei intreruperi sau;
Arbitrare magistrala c nd sistemul de calcule este prevazut cu mai multe mP care pot avea acces la o magistrala comuna
Toate aceste opeartii sunt descrise cu lux de amanunte n foile de catalog ale firmelor ce produc mP. Vom exemplifica un astfel de ciclu de lecturi ntr-un mod simplificat caut nd sa vedem ce semnale se vehiculeaza
Dupa cum se observa n fig.4.1. semnalul reprezentat la t=0 este "0" logic, la t=2 incepe sa creasca spre 1 logic, la t=3 deja este "1" logic se mentine 2 ns si apoi "cade" inapoi la "0" logic.
Fig.4.1.
Aceasta este o diagrama de semnal. In cazul acesta este diagrama de ceasului (clock-ului). n timpul unui ciclu de citire apar mai multe semnale care au o functionare sincronizata, reprezentarea lor fac ndu-se pe verticala. Fig.4.2. reprezinta diagrama unui ciclu de citire.
Fig.4.2.
n starea T1 se furnizeaza un semnal AS care face ca informatia de adresa obtinuta din adresa de segment + adrese offset sa fie stabila pe busul de adrese A0 - A19 astfel ca memoria are timp p na n starea T3 sa selecteze aceasta adresa. In starea T3 semnalul (dela Read) face ca informatia furnizata de memorie sau de la dresa selectata sa fie deja prezenta pe busul e date D0 - D15 de unde este memorata de procesor ntr-un registru (AX cel mai adesea.).
In realitate apar mult mai multe semnale care duc la citirea memoriei. Pentru celelalte cazuri exista c te o diagrama la fel ca aceasta dar distributia in timp a semnalelor va fi specifica fiecarui tip de ciclu.
4.2. Moduri de adresare la 8088
Programul care se executa se gaseste memorat in segmentul de cod. Dupa cum am vazut intr-un capitol anterior c nd se incarca o instructiune din memorie adresa acestuia este furnizata de CS ca adresa de baza si IP (pointerul de instructiuni) ca: deplasament. In mod normal continutul lui IP este incrementat pe masura ce instructiunile se executa astfel ca totdeauna sa fie deja selectata instructiunea care urmeaza. Instructiunile de salt neconditionat sau apel proceduri pot nsa modifica IP sau IP si CS, modific ndu-se astfel ordinea secventiala de executie a instructiunilor.
Adresarea datelor
Datele din memorie care formeaza operanzii instructiunilor pot fi adresate in mai multe moduri. Acesti operanzi pot fi continuti n registrii, n memorie, n instructiuni sau porturi de I/O. Operatiile care implica date numai din registrii sunt rapide nefiind nevoie de acces la magistrala pentru acces la memorie.
Pentru aflarea adresei operandului se folosesc denumirea de adresa segment (AS) pentru adrese de inceput a segmentului in care se afla operandul si adresa efectiva (AE) pentru deplasaamentul operandului in cadrul segmentului .
AF (adresa fizica) se calculeaza conform mecanismului
AS *10h + AE = AF
Adresa efectiva este calculata de catre unitatea de executie (EU) si furnizata unitatii de legaturi cu magistrala (BIU) care va calcula adresa de segment dupa algoritmul de mai sus . (Fig. 3.8 din capitolul anterior reda acest mecanism, atunci cīnd am vorbit despre calculul adreselor fizice la procesorul I8088 ).
Registrii folositi si modul de adresare (memorie sau registru) sunt codificate in cadrul instructiuni.
Vom avea urmatoarele tipuri de adresare:
1.Adresare imediata
n acest caz operandul apare chiar in instructiune:
Ex: mov ax,1
Aceasta instructiune va initializa reg. AX cu 1.
2.Adresare directa
AE este obtinut prin furnizarea de catre instructiune a unui deplasament in interiorul segmentului curent (in interiorul segmentului de date de obicei).
Ex. add bx, [200]
Aceastra instructiune aduna la reg. BX continutul locatiei de la adresa efectiva 200.din segmentul de date. Schema dupa care se executa este data in fig. 4.3.
Fig. 4.3.
3. Adresare indirecta (rin registrii) Ae este furnizata de registrii BX, SI sau DI iar registrul segment implicit este bineinteles DS dupa schema din fig.4.4.
Fig. 4.4.
Ex. mov ax, [bx]
Continutul adresei de memorie de la adresa data de BX ( BX contine de fapt offsetul dupa cum am vazut !) este transferat in AX. Observam ca BX,SI,DI contin adrese si nu valori numerice.
4.Adresare bazata sau indexata
AE se obtine adun nd la unul din registrii de baza (BX sau BP) sau index (SI sau DI) un deplasament constant dupa scheme din fig.4.5.
Fig.4.5.
Ex. mov ax, 5 [bx]
La continutul adresei de baza din bx se aduna deplasamentul S si se obtine offsetul operandului. Aceste tipuri de adresare se pot folosi c nd avem structuri de date care pot fi localizate in diferite locuri din memorie.Reg. de baza va contine adresa de inceput a structurii iar deplasamentul va furniza adresa elementelor din structura
5.Adresare bazata si indexata
Este cea mai complexa si se face dupa schema din fig.4.6.
Fig.4.6.
Ex. mov ax,[bx +si +7]
Aceasta din urma combina celelalte anterioare fiind cea mai complexa permit nd adresarea cu 2 indecsi (continuturile reg. de baza si indecsi).
In cele aratate anterior, de obicei registrul segment implicit este cel de date presupun nd ca se adreseaza operanzi de calcul obisnuiti n afara cazului c nd se fooloseste BP c nd reg. de segment mplicit este SS. Daca nu se doreste folosirea implicita a reg. de segment atunci n instructiune se va preciza explicit despre care reg. de segment este vorba cum ar fi n instructiunea urmatoare:
mov bx, ds: bp + 7
Daca nu precizam DS implicit se folosea SS fiind vorba de BP care lucreaza cu SS in mod implicit.
4.3. Codificarea interna a instructiunilor
Instructiunile mP8088 se pot intinde pe 1 p na la 6 octeti. Codificarea contine codul instructiunii (tipul operatiei - adunare, scadere, salt, etc) modul de adresare (cu registru sau cu memoria) deplasamentul operandului sau adresa efectiva cu adresarea directa), date imediate, pe 8 sau 16 biti. Formatul unei instructiuni de INC - incrementare registru-pe 1 octet este prezentat n fig. 4.7.
Fig. 4.7.
unde OP cade ocupa 5 biti si da codul operatiei de incrementare iar cei 3 octeti din c mpul REG specifica unul din registrii general, pointer sau index
Fig.4.8. arata codificarea efectiv a instructiunii INC BP
Mai exista o forma a instructiunii care poate incrementa si orice cuvant de memorie pe l nga registri si ea se scrie pe 2 octeti. Nu vom intra n amanunte spun nd numai ca cei 16 biti au c mpuri bine precizate pentru a indica exact modul de adresare si registrii care intervin n calcul adresei.
Amanunte se gasesc n tabelele ce contin setul de instructiuni ai procesorului
4.4. Stiva (Stack)
O zona speciala de memorie este folosita de programe atunci c nd se executa subprograme sau se transmit parametrii de la un program cu altul.
Aceasta zona poarta numele de stiva (stack n engleza fiindca functionarea ei este asemanatoare cu cea a unei stive fizice de obiecte. Vonm trata aici succint stiva numita LIFO (Last Input First Output). In acest tip de stiva datele au voie sa fie depuse numai prin partea superioara astfel ca ceea ce am depus ultima data (Last input) va fi disponibil fiind deasupra stivei si va putea fi scos eventual (First Output).
Stiva este folosita implicit n mecanismul de apel al procedurilor
. Fig.4.9. ilustreaza un astfel de caz. Atunci c nd s-a ajuns cu pointerul de instructiuni la adresa 1000 se executa un apel la procedura PROC care se gaseste n memorie la adresa 3000. C nd se termina de executat procedura trebuie sa ne ntoarcem inapoi la prima instructiune de dupa instructiunea de apel procedura n cazul nostru). Deci, adresa 1001 trebuie sa fie memorata undeva pentru ca la revenirea din procedura sa reluam programul din acel loc.
Stiva se foloseste pentru a memora aceasta adresa de revenire. Microprocesorul este proiectat astfel inc t automat la executia unui apel de procedura (CALL) salveze in stiva urmatoarea adresa de memorie care contine instructiunea urmatoare din secventa ( de fapt continutul registrului IP). C nd se int lneste in subrutina instructiunea de RETURN (revenire din subprogram) tot automat mP ia din v rful stivei adresa gasita si o incarca in registrul IP (pointerul de instructiuni) execut nd apoi, instructiunea gasita la aceasta adresa (adica instructiunea de la adresa 1001).
Putem defini stiva ca un concept abstract de structura de date asupra carora opereaza instructiuni special proiectate in acest scop.
O zona de stiva este caracterizata de o adresa curenta numita adresa v rfului stivei (top stack) si care la mP 8088 este adresata prin registrul SP (stack pointer - indicator de stiva). Registrul de segment SS (Stack Segment) va indica adresa de inceput a segmentului de stiva in memoria sistemului. Deci si pentru stiva este alocata implicit o zona de 64 Kocteti (lungimea standard a unui segment ! ). Operatiile de baza cu stiva sunt PUSH (depune un cuv nt in stiva) sau POP (extrage un cuv nt din stiva
Fig. 4.9.
La mP 8088 cuvintele transferate in stiva sunt de 16 biti. (2 octeti adica un cuvint ) deci adresa curenta a v rfului stivei se va incrementa sau decrementa cu 2. Fig.4.10. prezinta modul de actiune a unei operatii de PUSH.
Se observa ca stiva "creste" in jos pe masura ce se depun date in ea. Marimea maxima a ei este de 64k. Pot exista mai multe stive definite la un moment dat dar numai una este activa
Stiva este folosita explicit la salvari sau refaceri de date, transmiterea parametrilor catre proceduri etc. Implicit se foloseste in cazul apelurilor de procedura. Deasemeni programele care permit definirea si folosirea functiilor recursive folosesc stiva pentru memorarea valorilor inermediare a parametrilor si valorilor functiilor.
Fig.4.10.
Ce instructiuni (operatii) se pot folosi cu stiva la microP Intel 8088 ?
|