CATEGORII DOCUMENTE |
Arhitectura sistemelor din familia PC
Structura si functionarea de principiu a unui sistem pe baza de microprocesor
Structura unui sistem pe baza de microprocesor include urmatoarele componente: microprocesor, memorie de instructiuni, memorie de date, circuite de interfata. Microprocesorul contine ca element esential o unitate aritmetica si logica care lucreaza cu operanzi sub forma de cuvinte de 8 sau 16 biti. Activitatea microprocesorului se desfasoara secvential pe baza executiei unor instructiuni inscrise in memoria de instructiuni.
Memoria de date este utilizata pentru scrierea si respectiv citirea datelor. Prin circuitele de interfata si echipamentele de intrare/iesire se realizeaza comunicatia intre sistem si utilizator.
Componentele structurale ale calculatorului sunt conectate intre ele prin intermediul urmatoarelor magistrale
magistrala de date prin care se transfera instructiuni sau date;
magistrala de adrese
magistrala de control
Structura microprocesorului
Aceasta structura poate fi vazuta in figura 2. Microprocesorul dispune de mai multi registri generali pe 16 biti. El este format din doua componente mari:
EU (Executive Unit) care executa instructiunile masina prin intermediul componentei ALU (Aritmetic and Logic Unit).
BIU (Basic
Input Unit) este componenta care pregateste executia
fiecarei instructiuni masina. In esenta,
aceasta componenta citeste o instructiune din memorie, o
decodifica si calculeaza adresa din memorie a unui eventual operand. Configuratia
rezultata este depusa intr-o zona tampon cu dimensiunea 6
octeti (notata ZT in
fig.2), de unde va fi preluata de catre EU.
ZT
Fig.2 Structura
microprocesorului 8086
Cele doua componente lucreaza in paralel, in sensul ca in timp ce EU executa instructiunea curenta, BIU pregateste instructiunea urmatoare. Cele doua actiuni sunt sincronizate, in sensul ca cea care termina prima asteapta dupa cealalta.
Registrii generali EU
Registrul AX este registrul acumulator. El este folosit de catre majoritatea instructiunilor ca unul dintre operanzi.
Registrul BX este folosit in principal ca registru de baza.
Registrul CX este folosit in principal ca registru de numarare (registru contor) pentru instructiunile care au nevoie de indicatii numerice.
Registrul DX este un registru de date. Impreuna cu registrul AX se foloseste in calculele ale caror rezultate depasesc dimensiunea unui cuvant.
Fiecare dintre registrii AX, BX, CX, DX au capacitatea de 16 biti. Fiecare dintre ei poate fi privit in acelasi timp ca fiind format prin concatenarea (alipirea) a doi (sub) registri. Subregistrul superior contine cei mai semnificativi 8 biti (partea HIGH) ai registrului de 16 biti din care face parte. Exista astfel registrii AH, BH, CH, DH. Subregistrul inferior contine cei mai putin semnificativi 8 biti (partea LOW) ai registrului de 16 biti din care face parte. Exista AL, BL, CL, DL.
Registrii SP si BP sau registrii destinati lucrului cu stiva. O stiva se defineste ca fiind o zona de memorie in care se pot depune succesiv valori, extragerea lor ulterioara facandu-se in ordinea inversa depunerii.
Registrul SP (Stack Pointer) adreseaza ultimul element introdus in stiva (elementul din varful stivei).
Registrul BP (Base pointer) adreseaza primul element introdus in stiva (indica bazei stivei).
Registrii DI si SI sunt registrii de index utilizati de obicei pentru accesarea elementelor din siruri de octeti sau de cuvinte. Denumirile lor (Destination Index si Source Index).
Flagurile
Un flag este un indicator reprezentat pe un bit. O configuratie a registrului de flaguri indica un rezumat sintetic a executiei fiecarei instructiuni. Pentru 8086 acest registru (notat FLAGS in fig.2) are 16 biti dintre care sunt folositi numai 9. Structura in detaliu a registrului FLAGS este data in figura 3.
CF (Carry Flag) este flagul de transport. Are valoarea 1 in cazul in care in cadrul operatiei s-a facut transport in afara domeniului de reprezentare a rezultatului. De exemplu, daca se efectueaza urmatoarea adunare intre doi octeti:
10010011+
01110011
.....
100010110
rezulta un transport de cifra semnificativa. Valoarea 1 este depusa automat in CF. In absenta transportului, in CF se va depune valoarea 0.
PF (Parity Flag) este flagul de paritate. Valoarea lui se stabileste in asa fel incat impreuna cu numarul de biti 1 din reprezentarea rezultatului instructiunii sa rezulte un numar impar de cifre 1.
AF (Auxiliary Flag) indica valoarea transportului de la bitul 3 la bitul 4 al rezultatului executiei instructiunii. De exemplu, in adunarea de mai sus transportului este 0.
ZF (Zero Flag) primeste valoarea 1 daca rezultatul instructiunii este egal cu zero si valoarea 0 la rezultat diferit de zero.
SF (Sign Flag) primeste valoarea 1 daca rezultatul executiei instructiunii este un numar strict negativ si valoarea 0 in caz contrar.
TF (Trap Flag) este un flag de depanare. Daca are valoarea 1, atunci masina se opreste dupa fiecare instructiune
IF (Intrerrupt Flag) este flag de intrerupere.
DF (Direction Flag) este folosit cand se opereaza asupra sirurilor de octeti sau de cuvinte. Daca are valoarea 0, atunci deplasarea in sir se face de la inceput spre sfarsit, iar daca are valoarea 1 este de deplasari de la sfarsit spre inceput.
OF (Overflow Flag) este flag pentru depasire. Daca rezultatul ultimei instructiuni nu a incaput in spatiul operanzilor, atunci acest flag va avea valoarea 1, astfel va avea valoarea 0.
Semnificatiile de mai sus sunt generale. De fapt, fiecare instructiune isi specifica modul propriu de setare si interpretare a flagurilor.
Microprocesorul 8086 considera memoria ca pe un sir de 1 Mocteti. O adresa a unei locatii de memorie trebuie deci reprezentata pe 20 de biti. Capacitatea registrelor si a cuvintelor este insa de 16 biti. Datorita acestui fapt apare necesitatea impartirii spatiului de 1 Moctet in segmente logice de 64 de Ko. Microprocesorul lucreaza cu 4 segmente concomitent, adresele lor de inceput fiind in registrele de segment. Segmentele sunt blocuri de memorie care se pot si suprapune. Adresele de inceput trebuie sa fie multiplu de 16, deci cei mai putini semnificativi 4 biti sunt 0.
Vom numi deplasament offset) adresa unei locatii fata de inceputul unui segment. Deoarece segmentul are 64 Ko, sunt suficienti 16 biti pentru reprezentarea oricarui deplasament.
Vom numi specificare de adresa o pereche de numere de cate 16 biti, primul reprezentand adresa de inceput a segmentului, iar al doilea deplasamentul in cadrul segmentului. In scriere hexazecimala, o adresa se exprima sub forma:
s3s2s1s0:o3o2o1o0
Mecanismul de calcul al adresei fizice este prezentat in fig.
Fig. 4
Adresa fizica:
a4a3a2a1a0 = s3s2s1s00+o3o1o1o0
Deplasamentul se afla intr-unul dintre registrele interne. Pentru a obtine adresa fizica, continutul registrului segment se deplaseaza la stanga cu 4 ranguri, completand cu zerouri la dreapta, apoi se aduna deplasamentul, obtinandu-se in final adresa fizica. Acest calcul este efectuat de catre componenta ADR din BIU.
Exemplu: Presupunem ca (SS) = 2590H si (SP) = 1248H.
Adresa fizica a varfului stivei va fi:
25900 + 1248 = 26B48H, si va fi specificata astfel: 2590:1248.
Pentru codurile instructiunilor adresa de baza a segmentului va fi in registrul CS (Code Segment) iar deplasamentul in IP.
Este usor de observat ca exista mai multe specificari pentru aceeasi adresa. De exemplu adresa 7BC1:54A3 care indica adresa fizica 810B3, mai poate fi specificata si prin: 810B:0003. In acest fel este posibila suprapunerea mai multor segmente in aceeasi arie de memorie.
Acest mecanism de adresare este tipic pentru 8086 si se mai numeste mod de adresare real (Real Adress Mode).
Incepand cu microprocesorul 80286 mai apare modul de adresare protejat (Protected Virtual Adress Mode) iar incepand cu 80386 mai apar inca doua moduri de adrese:
- mod paginat
- mod virtual 8086
Ultimele 3 moduri au fost introduse pentru a permite adresarea de catre IBM-PC a mai mult de 1 Mo.
Arhitectura microprocesorului 8086 permite existenta a 4 tipuri de segmente:
segment de cod, care contine instructiuni masina;
segment de date, care contine date asupra carora se actioneaza conform instructiunilor;
segment de stiva;
segment suplimentar de date (extrasegment).
Fiecare program este compus din unul sau mai multe segmente. In fiecare moment al executiei este declarat activ cate un singur segment din fiecare tip. Registru CS (Code Segment), DS (Date Segment), SS(Stack Segment) si ES (Extra Segment) din BIU retin adresele de inceput ale segmentelor active, corespunzator fiecare tip.
Registrul IP
(Instruction Pointer) contine offsetul (deplasamentul) instructiunii
curente din cadrul segmentului de cod curent, el fiind manipulat exclusiv de
BIU.
Desi combinatia registru de segment - registru pentru accesul in interiorul unui segment se face in mod implicit, programatorul are posibilitatea de a modifica aceasta combinatie.
Microprocesorul 8086 poate lucra cu operanzi pe bit, digit, octet, cuvant , cuvant dublu sau bloc. In cazul in care se transfera operanzi pe cuvant, daca acesta se afla la o adresa para, transferul are loc intr-un singur ciclu, iar daca acesta se afla la o adresa impara transferul are loc in doi cicli.
Conform conventiilor firmei INTEL cuvantul (16 biti) este memorat astfel: octetul mai putin semnificativ la o adresa de valoare mai mica.
Exemplu:
Cuvantul 1A2B
este memorat la adresa fizica 00100H astfel:
00100H: 2B
00101H: 1A
La fel se memoreaza si cuvantul dublu, adica cuvantul mai putin semnificativ se memoreaza la o adresa mai mica.
Exemplu: F2C056AB (dublul cuvantului) se memoreaza la adresa fizica 01000H astfel:
01000H: AB
01001H: 56
01002H: C0
01003H: F2
Spatiul de memorie direct adresabil al microprocesorului 8086 este de 1 Mo cu adresele de la 00000H la FFFFFH. Adresarea se poate face la nivel de octeti dar si la nivel de cuvant, doi octeti succesivi, fara a exista restrictii referitoare la adresa de inceput a operanzilor cuvant. In spatiul de memorie exista doua zone, una la inceput, in domeniul 00000H - 0007FH si alta la sfarsit, in domeniul FFFF0H - FFFFFH care au destinatii speciale, fiind fie zone dedicate fie zone rezervate. Prima zona este folosita la memorarea tabelei vectorilor de intrerupere iar a doua este adresata in urma activarii semnalului RESET.
REZERVAT |
FFFFFH FFFFCH |
||||
DEDICAT |
FFFFBH FFFF0H |
||||
DISPONIBIL |
Fig. 6 00080H |
||||
REZERVAT |
0007FH 00014H |
||||
DEDICAT |
00013H 00000H |
Fizic, memoria poate fi impartita in doua blocuri: blocul par si blocul impar. Blocul par cuprinde doar locatii cu adrese pare, iar cel impar cuprinde doar locatii cu adrese impare. Blocul impar este conectat la jumatatea inferioara a magistralei de date, D0 - D7, iar cel impar la jumatatea superioara a magistralei de date D8 - D15.
Fig. 7
Transferul unui octet sau cuvant se face sub controlul a doua linii A0 si BHE conform tabelului:
BHE |
A0 |
Se transfera |
ambii octeti |
||
octet superior la/de la adresa impara |
||
octet inferior la/de la adresa para |
||
fara transfer |
Pentru accesul la un operand aflat la o adresa para, linia A0 va selecta blocul par, iar linia BHE va invalida blocul impar. Ca urmare va avea loc transferul intre locatia adresata si jumatatea inferioara a magistralei de date. Fig. 8 prezinta acest transfer unde "a" este adresa para a opernadului octet.
Fig.8 Transfer de octet la/de la adresa para
Daca se doreste accesul la un operand octet aflat la o adresa impara, a + 1 in figura 9, linia A0 va invalida blocul par in timp ce BHE = "0" logic va selecta blocul impar. Ca urmare va avea loc transferul intre locatia adresata si jumatatea superioara a magistralei de date.
Fig.9 Transfer de octet la/de la adresa impara
In cazul unui transfer pe cuvant, care este memorat incepand cu o adresa para, fig. 10, ambele blocuri vor fi selectate simultan de liniile A0 = BHE = "0" logic. Va avea loc transferul intre cele doua locatii adresate, a si a + 1, si intreaga magistrala de date. Transferul are loc intr-un singur cilcu de magistrala si se spune ca operandul este aliniat.
Fig.10 Transfer de octet la/de la adresa para
In cazul unui acces la un operand cuvant, memorat incepand cu o adresa impara, fig.11, se spune ca operandul este nealiniat si sunt necesari doi ciclii de magistrala. La primul ciclu avem BHE = "0" logic si A0 = "1" logic ca urmare se va transfera octetul de la adresa impara, a + 1 in figura, pe jumatate superioara a magistralei de date, care este octetul mai putin semnificativ al operandului.
Urmeaza apoi al doilea ciclu, in care adresa este incrementata, deci A0 = "0" logic si BHE = "1" logic, ca urmare se va transfera octetul de la adresa para, a + 2, pe jumatatea inferioara a magistralei de date, acest octet fiind cel mai putin semnificativ al operandului. Aceste operatii sunt executate de microprocesor automat, inclusiv directionarea corecta a octetilor catre jumatatile corespunzatoare ale registrelor interne ale sale si tot procesul este transparent pentru utilizator, doar ca transferul este mai lung cu patru stari.
Sintaxa unei astfel de instructiuni este:
MOV D,S
S - sursa
D - destinatia
Transferul se poate efectua intre doua registre sau intre un registru si memorie. Transferul se poate efectua la nivel de octet sau de cuvant (2 octeti). Exemplu:
MOV AL,ACH
Instructiunea are ca efect transferul octetului AC in registrul AL
MOV AX,DX
Instructiunea are ca efect transferul continutului registrului DX in registrul AX.
Microprocesorul 8086 dispune de instructiuni pentru operatii de adunare, scadere, inmultire si impartire asupra unor operanzi la nivel de octet sau cuvant cu si fara semn.
Instructiunile de adunare au sintaxa:
ADD D,S
Sau
ADC D,S
Se aduna continutul destinatiei cu sursa si eventual cu Carry (ADC)
INC D
Instructiunea incrementeaza operandul destinatie.
Instructiunile de scadere au sintaxa:
SUB D,S
Sau
SBB D,S
Se scade din operandul destinatie operandul sursa, eventual si Carry (SBB - subtract with borrow).
Instructiunile de inmultire au sintaxa:
MUL S
Sau:
IMUL S
Instructiunea MUL executa inmultirea acumulatorului AX cu operandul sursa , operanzii fiind considerati fara semn, iar IMUL considera operanzii cu semn
Instructiunile de impartire au sintaxa:
DIV S
Sau:
IDIV S
Instructiunea imparte continutul acumulatorului cu continutul operandului sursa. Daca sursa este un octet, atunci deampartitul este continutul registrului AX, impartitorul este S, catul se obtine in AL iar restul in AH. Daca S este un operand pe 2 octeti atunci deampartitul este continutul registrilor DX si AX, impartitorul este S, catul se obtine in AX, iar restul in DX.
Instructiuni logice
AND D,S
OR D,S
XOR D,S
NOT D
TEST D,S (se executa SI logic intre D si S dar singurul efect este pozitionarea indicatorilor de conditii)
Instructiuni de deplasare
SHL/SHR D,1
Sau
SHL/SHR D,CL
Deplasarea se face la stanga sau la dreapta a operandului D (destinatie) cu un rang sau cu un numar de ranguri binare continut in reg. CL
Instructiuni de rotire
ROL/ROR D,1
Sau
ROL/ROR D,CL
Rotirea se face la stanga sau la dreapta a operandului D (destinatie) cu un rang sau cu un numar de ranguri binare continut in reg. CL
JMP OP
Instructiunea executa un salt neconditionat la adresa data de operandul OP.
JCC OP
Instructiunea executa un salt conditionat de o conditie "CC"
Exemplu JZ - salt la zero
JNC - salt daca nu s-a pozitionat Carry
JE - salt in caz de egalitate
Etc
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1885
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved