Você está na página 1de 19

1.

Arhitectura

Etapele executiei unui program:

Extragere instructiune Citire operand(daca operatia o cere) Executia instructiunii Scriere rezultatului(daca instructiunea o cere)

CPUEU (unitatea de executie) executa instructiunile BIU (unitatea de interfata cu magistrala) extrage instructiunile citeste operanzi scrie rezultatul in memorie

2. EU

EU

Unitatea aritmetica si logica Registrii de uz general

Registrul indicator de conditie Bloc logic de control Magistrala interna de 16biti

Executa instructiunile ce sunt introduse de BIU in coada de instructiuni.

2.1. Registrii de uz general


8 registrii de 16 biti grupati in doua seturi a cate 4 registrii

registrii de date (hight si low) : AX acumulator BX - base CX- contor DX- data

registrii pointer si index: SP stack pointer BP- base pointer SI source index DI destination index

Registrele high si low pot fi folosite ca entitati pe 8 biti(doar registrele de date)

2.2. Indicatori de conditie

9 biti de control

15 14 13 12

11

10

4 AF

2 PF

0 CF

OV DF IF TF SF ZF

3 de control TF trap flag (1)atunci cand procesorul intra in executia pas cu pas DF direction flag semnaleaza autoincrementarea(1) sau autodecrementarea(0) registrilor SI si DI in cazul sirurilor de caractere IF- intrerupt flag STI activeaza intreruperile mascabile CLI le dezactiveaza 6 de stare OF overflow flag cand are loc o depasire aritmetica SF sign flagSF=1 cel mai semnificatif bit =1 (negativ). SF=0-pozitiv ZF zero flag valoarea zero a rezultatului ZF=1 AF auxiliar flagtransport catre bitul 8 dinspre bitul 7 sau imprumut invers PF parity flagPF=1 rezultatul are un nr par de biti cu valoarea 1 CF cary flag a existat un transport catre MSB sau imprumut

3. BIU

BIU

Registrii de segment Registru de tip contor numit pointer de instructiuni (IP) O coada de instructiuni Registrii de comunicatie interna O sechema logica pentru generarea de adrese pe 20 biti si pentru controlul magistralei multiplexate

Coada de instructiuni are 6Kb si contine instructiuni ce urmeaza a fi preluate de microprocesor.BIU alimenteaza in avans coada de instructiuni, chiar daca microprocesorul nu o cere. BIU suspenda sau reseteaza alimentarea coazii de instructinuni ori de cate ori EU solicita(ex:cand EU vrea sa citeasca sau sa scrie un operand din memorie sau porturile I/O).

3.1. Registrele de segment


4 registrii pe 16 biti

CS- code segment DS- data segment SS- stack segment ES- extra segment

Deoarece memoria de 1Mb este impartita in segmente de maxim 64Kb, exista 4 segmente adresabile la un moment dat ale caror adresa de inceput se afla in cele 4 registre de segment.

3.2. Registrul pointer de instructiuni

IP instrucion pointer contor pentru urmatoarea instructiune; offsetul octetului curent masurat de la inceputul segmentului de cod.

4. Memoria

1 Mb = 220 bytes = 1.048.576 bytes Adrese pare si impare. O variabila de tip word aflata la adresa impara este nealineata si este nevoie de doua cicluri de magistrala pentru accesarea ei. Se anuleazaavantajul microporcesorului de a avea o magistala de date pe 16 biti. O variabila de tip word se memoreaza cu octetul cel mai semnificativ la adresa superioara. O variabila de tip pointer (double word): ofsetul se memoreaza la adresele inferioare, adresa segmentului la adresele superioare.

Val variabilei word la 246H este: 8C04H.

Val offsetului pointerului la 4H: adresa de segment 3B4CH, iar offsetul 65H

1.1. Segmentarea memoriei


Memoria de 1 Mb este segmentata in blocuri de memorie de maxim 64Kb. Fiecare segment are asignat o adresa de baza(adresa celei mai de jos locatii din segment). Adresa de baza trebuie sa fie multiplu de 16. Segmentele pot fi adiacente, suprapuse partial sau total (o locatie fizica poate sa apartina unui singur segment, mai multor segmente sau niciunui segment).

BIU are 4 registre segment adresabile la un moment dat: CS, DS, SS, ES. Fiecare aplicatie trebuie sa-si defineasca de la inceput adresele de bazaale segmentelor. Daca 64Kb de cod, 64Kb de stiva si 128Kb de date sunt suficiernte atunci registrele segment nu vor suferii modificari pe parcursul rularii programului.

1.2. Generarea adresei fizice

Fiecare locatie din memorie are 2 tipuri de adrese: fizicasi logica. Adresa fizica reprezinta valoarea pe 20 biti ce identifica in mod unic fiecare octet din memorie de la 0Hla FFFFFH. Adresa logica este formata din adresa de baza a segmentuluisi valoarea de offset(numarul de octeti de la inceputul segmentului pana la octetul curent), ambele pe 16 biti. Unitatea de interfata cu magistala acceseaza memoria folosind adresa fizica. Aceasta se realizaeaza prin deplasarea la stanga cu 4 biti a adresei de baza a segmentului si adunarea acesteia cu offsetul.

Instructiunile sunt extrase din segmentul de cod iar ofsetul este dat de registrul IP, operatiilecu stiva sunt executate in segmentul de stiva curent iar ofsetul este dat de registrul SP, s.a.m.d. Offsetul este calculat de unitatea de executie.

1.3. Stiva
Stiva este implementata cu ajutorul SS (registru de segment) si SP (registru indicator de stiva). SPcontine varful stive(TOS- top of stack) Offsetul fata de de adresa de baza din SS. Pot fi mai multe stive de max 64Kb insa numa una singura adresabila la un moment dat. Elementele stivei ->word(16 biti) =>SP se incrementeaza(POP) sau decrementeaza(PUSH) cu 2 unitati.Cu alte cuvinte, stiva creste in jos in memorie, catre adresa de baza a segmentului de stiva.

1.4. Selectia memoriei

Spatiu de memorie este divizat fizic in doua zone(bank) a cate 512Kb fiecare. Lower bank-> zonei inferioare a magistralei de date(bitii D7-D0) adrese pare Upper bank ->zonei superioarea magistralei(D15- D8)- adrese impare

A19-A1 -pt accesarea locatiei unui octet simultan in cele doua bank-uri A0-se foloseste pt selectia bank-ului inferior. BHE selectia bank-ului superior(adrese impare)

O adresa para se acceseaza atunci cand A0=0 si BHE=1, datele transferanduse pe liniile inferioare ale magistralei de date(D7-D0) .

O adresa impara se acceseaza atunci cand A0=1 si BHE=0, iar datele se transfera pe liniile superioare ale magistralei de date(D15-D8);

8086 poate accesa o locatie din lower bank simultan cu una din upper bank pentru a efectua transferul unei date de tip word. Cand octetul low al cuvintului ce trebuie transferat se afla la o adresa para (deci se afla in lower bank), cuvantul este aliniat si poate fi transferat intr-un singur ciclu de magistrala. Liniile A19-A1 adreseaza locatia corespunzatoare din ambele bank-uri, bank-uri care sunt amandoua selectate simultan, cel inferior prin A0=0 iar cel superior prin BHE = 0 . Cand octetul mai putin semnificativ al cuvantului se afla la o adresa impara, cuvantul estenealiniat si se va transfera in doua cicluri de magistrala. In prima faza, octetul low este transferat pe bitii D15-D8, cu semnalele de selectie A0=1 si BHE = = 0 . Adresa de memorie este incrementata in a doua faza, ceea ce face A0=0 si octetul high aflat in lower bank va fi transferat pe liniile D7-D0.

2. Spatiul de intrare/ iesire

Spatiul propriu-zis este de 64ko porturi de 8 biti sau 32 ko porturi de 16biti. Instructiunile INput si OUTput transfera date intre acumulator (AL pentru transfer pe octet si AX pentru transfer pe cuvint) si porturile localizate in spatiul de intrare/iesire. Spre deosebire de memorie, spatiul de I/E nu este segmentat: pentru a accesa un port, unitatea de interfata cu magistrala plaseaza adresa portului (cuprinsa, deci, intre 0H si FFFFH) pe cele mai putin semnificative 16 linii ale magistralei de adrese.

5. Sistemul de intreruperi
Executia prog. principal este orpita in mod asincron printr-o cerere de intrerupere. Procesorul termina de executat instructiunea curenta si, prin intermediul unui vector de intrerupere, ajunge la rutina de tratare a intreruperii respective. La sfarsitul acestei subrutine, procesorul revine in programul principal, reluandu-l de la instructiunea urmatoare celei ce a fost executata inainte de acceptarea intreruperii. Fiecare intrerupere are un cod num tipul intreruperii.8086 poate strata 256 de intreruperi

Vectorii de intrerupere

Legatura dintre tipul intreruperii si procedura care deserveste intreruperea este reprezentata de tabela vectorilor de intrerupere. Aceasta tabela ocupa primul ko de memorie incepand cu adresa zero si are pana la 256 de intrari, corespunzand la 256 de vectori de intreruperecate unul pentru fiecare tip de intrerupere ce poate fi definit intr-un sistem cu microprocesor 8086.

Un vector de intrerupere al microprocesorului 8086 reprezinta un pointer (4 octeti) continand adresa rutinei de tratare a intreruperii asociate. Cuvantul cel mai semnificativ al pointerului contine adresa de baza de segment si se va incarca in registrul CS iar cuvantul mai putin semnificativ contine ofsetul fata de inceputul segmentului al subrutinei respective ofset ce se va incarca in registrul IP astfel incat urmatoarea instructiune ce se va extrage si executa va fi prima instructiune din cadrul subrutinei de intrerupere. Cum fiecare intrare in tabela vectorilor de intrerupere are o lungime de 4 octeti, CPU calculeaza locatia vectorului asociat unei intreruperi anume prin simpla inmultire cu 4 a numarului (cuprins intre 0 si 255) ce reprezinta tipul intreruperii respective (figura 4.32.).

0divide error,

1single-step

2NMI

3breakpoint

4overflow

urmatorii 27 (deci pina la locatia 07FH) sunt rezervati de firma INTEL, restul (vectorii 32 pina la 255) sunt la dispozitia utilizatorului.

externe generate de un echipament extern o nemascabile (NMI -Non Maskable Interrupt) pentru a semnala microprocesorului aparitia unui eveniment "catastrofal" ce semnifica existenta unui pericol major

implica salvarea in stiva a continutului registrului indicatorilor de conditie (SP este decrementat cu 2) si apoi resetarea indicatorilor IF si TF (dezactivandu-se, deci, automat intreruperile mascabile si intreruperea pentru modul de operare pas-cu-pas). Registrele CS si IP sunt incarcate cu adresele continute de vectorul 2, urmand extragerea si executia primei instructiuni din rutina de tratare a intreruperii nemascabile.

mascabile(INTR INTrerupt Request) activata de controlerul de intreruperi 8259A primeste cererile de intrerupere de la echipamentele de I/E atasate la el; determina care dintre solicitanti (daca apar mai mult de unul, la un moment dat) are cea mai inalta prioritate; activeaza linia INTR catre microprocesor daca solicitantul selectat are un nivel de prioritate mai mare decit al acelui care este servit in acel moment (daca exista vreunul in aceasta situatie). Aparitia semnalului INTR cauzeaza actiuni diferite ale CPU in functie de starea indicatorului de conditie de activare a intreruperii mascabile (IF). Starea acestuia este controlata de instructiunile STI (IF=1) si, respectiv, CLI (IF=0). Nici o actiune nu are loc insa pana la terminarea executiei instructiunii curente. Apoi, daca IF=0 (ceea ce inseamna ca intreruperile ce apar pe linia INTR sunt mascate, dezactivate) CPU ignora cererea de intrerupere si continua cu executia urmatoarei instructiuni. Daca intreruperile sunt activate (deci daca IF=1), atunci CPU recunoaste intreruperea (o accepta) si urmeaza sa o proceseze. Recunoasterea unei intreruperi mascabile implica executia de catre microprocesor a doua cicluri de magistrala de acceptare a intreruperii INTA cycles. o Pe durata primului ciclu, CPU isi trece in stare de inalta impedanta driver-ele de magistrala si furnizeaza semnalul de control INTA ( INTerrupt Acknowledge) din starea T2 pina in starea T4. Rolul acestui prim ciclu INTA este de a avertiza controlerul de intreruperi ca cererea transmisa pe linia INTR este onorata de microprocesor.

Pe parcursul celui de-al doilea ciclu INTA initiat de catre microprocesor 8259A plaseaza pe liniile cele mai putin semnificative ale magistralei de date (AD7-AD0) un octet ce contine tipul intreruperii asociate liniei Interrupt Request activata de echipamentul ce a solicitat intreruperea. In acest mod se realizeaza identificarea sursei externe ce a generat intreruperea.

Circuitul ofer dou moduri de evaluare a prioritilor: modul complet nlnuit (fully nested mode) n care o cerere de ntrerupere poate ntrerupe programul n curs de execuie dac nivelul de ntrerupere pe care apare nu este mascat (n registrul IMR) i dac prioritatea ataat nivelului de ntrerupere este strict mai mare dect cea a nivelului de ntrerupere n curs de servire (indicat de bitul setat cel mai prioritar din registrul ISR). modul special mascat (special mask mode) n care o cerere de ntrerupere aprut pe un nivel de ntrerupere nemascat poate ntrerupe programul n curs de execuie indiferent de nivelul de prioritate pe care a aprut.

interne (software) generate intern de CPU in urma executarii unor instructiouni specifice o Instructiune INT n genereaza o intrerupere de tip n. Vectorul intreruperii respective nu mai trebuie furnizat de nimeni, intrucat se afla codificat direct in instructiune. o INTO (INTerrupt Overflow), provoaca ntrerupere TIP=4 dac flag-ul overflow a fost setat n urma apariiei unor depiri laefectuarea operaiilor aritmetice; o IDIV, cu TIP=0, generat automat dac apare o eroare de depire laoperaia de mprirre; o SINGLE STEP, cu TIP=1, se genereaz automat dup execuia fiecrei instruciuni, dac flag-ul TF (test flag) a fost setat n o Toate instructiunile interne (unele exceptii prezinta intreruperea pas-cu-pas) au urmatoarele caracteristici: 1. Codul tipului intreruperii este fie predefinit, fie continut in instructiune. 2. Nu are loc nici un ciclu de magistrala de recunoastere a intreruperii.

3. O intrerupere interna nu poate fi dezactivata (cu exceptia intreruperii pascu-pas ce este inhibata de resetarea indicatorului TF). 4. Orice intrerupere interna (cu exceptia intreruperii pas-cu-pas) are prioritate mai mare decit orice intrerupere externa. Ordinea de prioritate este: I. intrerupere interna (cu exceptia pas-cu-pas) II. NMI III. INTR IV. intreruperea pas-cu-pas

Subrutina de tratare a intreruperii

Cand se intra in subrutina de tratare a intreruperii se salveaza in stiva indicatorii de conditie, registrii CS, IP iar TF si IF sunt resetati.Subrutina de tratare a unei intreruperi trebuie sa salveze toti registrii pe care ii utilizeaza inainte de a-i initializa si sa-i restaureze inainte de terminarea rutinei.Ca urmare, in cazul procesarii unor intreruperi simultane, stiva trebuie sa aiba la dispozitie un spatiu suficient.

Toate subrutinele de intrerupere trebuie sa se termine cu instructiunea IRET (Interrupt RETurn). IRET extrage din stiva trei cuvinte succesive pe care le incarca in IP, CS si registrul indicatorilor de conditie, determinand astfel reluarea executiei programului cu instructiunea ce urma in mod logic, daca nu s-ar fi efectuat saltul la intrerupere.

Segmente de stare task (TSS)

Cand se comuta un task: salveaza contextul in reg TSS, incarca contextul taskului care devine activ

Un TSS este un segment special de memorie, pe care procesorul l utilizeaz pentru a suporta mutitasking.

Cnd un apel sau ntrerupere, printr-o poart determin o modificare n privilegiu, noile SS:ESP, sunt ncrcate din TSS. Registrul de task (TR) conine selectorul TSS activ, curent.

Cnd apare o comutare de task, toate registrele task-ului curent executat sunt salvate n TSSul activ. Registrul task se ncarc, apoi, cu selectorul unui nou TSS, i fiecare registru general este ncrcat cu valorile respective, din noul TSS.

TSS mai conine legturanapoi (back link) care reprezintselectorul TSS-ul executat anterior.

8259A

Set de instructiuni

Instructiuni de uz general mov Ax,Bx Instructiuni de transfer intrare/iesire IN/OUTIN AL 12h Instructiuni aritmeticeadd, sub, dec, mul, div

Instructiuni cu operanzi pe biti

Instructiuni logice AND, OR, XOR Instructiuni de deplasere si rotireSHL, SAL

Você também pode gostar