You are on page 1of 7

2.6.

ARHITECTURA MICROPROCESORULUI 8086


2.6.1. Structura microprocesorului Microprocesorul 8086 este format din dou componente principale: EU (Executive Unit) - execut instr. main prin intermediul componentei ALU (Aritmetic and Logic Unit). BIU (Bus Interface Unit) - pregtete execuia fiecrei instruciuni main. Citete o instruciune din memorie, o decodific i calculeaz adresa din memorie a unui eventual operand. Configuraia rezultat este depus ntr-o zon tampon cu dimensiunea de 6 octei, de unde va fi preluat de EU. EU si BIU lucreaz n paralel - n timp ce EU execut instruciunea curent, BIU pregtete instruciunea urmtoare. Cele dou aciuni sunt sincronizate - cea care termin prima ateapt dup cealalt.
F AX: BX: CX: DX: AH BH CH DH SP BP DI SI 87 AL BL CL DL 0 F CS DS SS ES IP Adrese 0

ADR

ALU

Date

FLAGS

Zon Tampon

EU

BIU

2.6.2. Regitrii generali EU Registrul AX este registrul acumulator. El este folosit de ctre majoritatea instruciunilor ca unul dintre operanzi. Registrul BX - registru de baz. Folosit de obicei in adresare. Registrul CX - registru de numrare (registru contor) pt instr care au nevoie de indicaii numerice. Registrul DX - registru de date. mpreun cu AX se folosete n calculele ale cror rezultate depesc un cuvnt. Fiecare dintre regitrii AX, BX, CX, DX au capacitatea de 16 bii. Fiecare dintre ei poate fi privit n acelai timp ca fiind format prin concatenarea (alipirea) a doi (sub)regitri. Subregistrul superior conine cei mai semnificativi 8 bii (partea HIGH) ai registrului de 16 bii din care face parte. Avem astfel regitrii AH, BH, CH, DH. Subregistrul inferior conine cei mai puin semnificativi 8 bii (partea LOW) ai registrului de 16 bii din care face parte. Exist astfel regitrii AL, BL, CL, DL. Regitrii SP i BP sunt regitri destinai lucrului cu stiva. O stiv se definete ca fiind o zon de memorie n care se pot depune succesiv valori, extragerea lor ulterioar fcndu-se n ordinea invers depunerii. Registrul SP (Stack Pointer) puncteaz spre elementul ultim introdus n stiv (elementul din vrful stivei). Registrul BP (Base pointer) puncteaz spre primul element introdus n stiv (indic bazei stivei). Regitrii DI i SI sunt regitrii de index utilizai de obicei pentru accesarea elementelor din iruri de octei sau de cuvinte. Denumirile lor (Destination Index i Source Index) precum i rolurile lor vor fi clarificate n capitolul 4.

2.6.3. Flagurile Un flag este un indicator reprezentat pe un bit. O configuraie a registrului de flaguri indic un rezumat sintetic a execuiei fiecrei instruciuni. Pentru 8086 registrul FLAGS are 16 bii dintre care sunt folosii numai 9.
F x E x D x C x B OF A DF 9 IF 8 TF 7 SF 6 ZF 5 x 4 AF 3 x 2 PF 1 x 0 CF

CF (Carry Flag) este flagul de transport. Are valoarea 1 n cazul n care n cadrul ultimei operatii efectuate (UOE) s-a efectuat transport n afara domeniului de reprezentare a rezultatului si valoarea 0 in caz contrar. De exemplu, pt 1001 0011 + 0111 0011 rezult un transport de cifr semnificativ si 1 0000 0110 valoarea 1 este depus automat n CF PF (Parity Flag) - Valoarea lui se stabilete a.. mpreun cu numrul de bii 1 din reprezentarea rezultatului UOE s rezulte un numr impar de cifre 1. AF (Auxiliary Flag) indic valoarea transportului de la bitul 3 la bitul 4 al rezultatului UOE. De exemplu, n adunarea de mai sus transportul este 0. ZF (Zero Flag) primete valoarea 1 dac rezultatul UOE este egal cu zero i valoarea 0 la rezultat diferit de zero. SF (Sign Flag) primete valoarea 1 dac rezultatul UOE este un numr strict negativ i valoarea 0 n caz contrar. TF (Trap Flag) este un flag de depanare. Dac are valoarea 1, atunci maina se oprete dup fiecare instruciune. IF (Interrupt Flag) este flag de ntrerupere. Asupra acestui flag vom reveni n capitolul 7. DF (Direction Flag) - pt operare asupra irurilor de octei sau de cuvinte. Dac are valoarea 0, atunci deplasarea n ir se face de la nceput spre sfrit, iar dac are valoarea 1 este vorba de deplasri de la sfrit spre nceput. OF (Overflow Flag) este flag pentru depire. Dac rezultatul ultimei instruciuni nu a ncput n spaiul rezervat operanzilor, atunci acest flag va avea valoarea 1, altfel va avea valoarea 0.

2.6.4. Regitrii de adres i calculul de adres Adresa unei locaii nr. de octei consecutivi dintre nceputul memoriei RAM i nceputul locaiei respective. Decizie proiectare 8086 - Capacitate RAM - 1 MB = 220 bytes ; astfel, o adres trebuie s se reprezinte pe 20 de bii. Capacitatea regitrilor i a cuvintelor este de 16 bii. Problema care apare este cum se poate obine o adres de 20 de bii folosind cuvinte de cte 16 bii? Pentru rezolvarea situaiei s-a introdus conceptul de segment de memorie. Segmentul de memorie reprezint o succesiune continu de octei ce are urmtoarele proprieti: (i) ncepe la o adres multiplu de 16 octei ; rezulta cei mai puin semnificativi 4 bii ai adresei sunt zero! Deci sunt suficieni 16 bii pt localizarea nceputului unui segment. (ii) are lungimea multiplu de 16 octei (iii) lungimea este de maximum 64 Ko = 26 * 210 bytes = 216 bytes, deci sunt suficieni 16 bii pentru a reprezenta orice adresa din interiorul unui segment. Vom numi offset sau deplasament adresa unei locaii fa de nceputul unui segment. O specificare de adres este o pereche de numere de cte 16 bii, unul reprezentnd adresa de nceput a segmentului, iar al doilea deplasamentul (offset-ul) n cadrul segmentului. n scriere hexazecimal o adres se exprim sub forma:

s3s2s1s0 : o3o2o1o0
Deci determinarea adresei din specificarea de adres se face conform regulii:

a4a3a2a1a0 := s3s2s1s00 + o3o2o1o0


Acest calcul de adresa este efectuat de ctre componenta ADR din BIU. Spre exemplu, specificarea 7BC1 : 54A3 indic adresa 810B3, ca rezultat al sumei 7BC10 + 54A3.

Exist mai multe specificri pentru aceeai adres. De exemplu, 810B : 0003 localizeaza de asemenea locatia de adresa 810B3. Acest mecanism de adresare este tipic pentru 8086 i poart numele de mod de adresare real (Real Address Mode). ncepnd cu 80286, mai apare modul de adresare protejat (Protected Virtual Address Mode), iar ncepnd cu 80386 mai apar nc dou moduri de adresare: mod paginat si mod virtual 8O86, toate acestea fiind introduse pentru a permite adresarea de ctre IBM-PC a mai mult de 1 Mo. Detalii n cap. 10. Arhitectura 8086 permite existena a patru tipuri de segmente:
-

segment de cod, care conine instruciuni ; segment de date, care conine date asupra crora se acioneaz n conformitate cu instruciunile; segment de stiv; segment suplimentar (extrasegment).

Fiecare program este compus din unul sau mai multe segmente, de unul sau mai multe dintre tipurile de mai sus. n fiecare moment al execuiei este declarat activ cte un singur segment din fiecare tip. Regitrii CS (Code Segment), DS (Data Segment), SS (Stack Segment) i ES (Extra Segment) din BIU rein adresele de nceput ale segmentelor active, corespunztor fiecrui tip. Registrul IP conine offsetul instruciunii curente n cadrul segmentului de cod curent, el fiind manipulat exclusiv de ctre BIU. 2.6.5. Reprezentarea instruciunilor main O instruciune main 8086 are maximum doi operanzi. Pentru cele mai multe dintre instruciuni, cei doi operanzi poart numele de surs, respectiv destinaie. Dintre cei doi operanzi, maximum unul se poate afla n memoria RAM. Cellalt se afl fie ntr-un registru al EU, fie este o constant ntreag. Astfel, o instruciune are forma: numeinstruciune destinaie, surs

Formatul intern al unei instruciuni este variabil, el putnd ocupa ntre 1 i 6 octei. Primul octet, numit cod identific instruciunea de executat. Al doilea octet, numit octetmod specific pentru unele dintre instruciuni natura i locul operanzilor (registru, memorie, constant ntreag etc.). Majoritatea instruciunilor folosesc pentru reprezentare fie numai octetul cod, fie octetul cod urmat de octetmod (deci 1-2 octeti). Urmtorii maximum patru octei, dac apar, identific fie o adres de memorie, fie o constant reprezentat pe mai mult de un octet. 2.6.6. Adrese FAR i adrese NEAR Prin definiie, o adres n care se specific doar offsetul, urmnd ca segmentul s fie preluat implicit dintr-un registru de segment poart numele de adresa NEAR (adres apropiat). O adres NEAR se afl ntotdeauna n interiorul unuia din cele patru segmente active. O adres n care programatorul specific explicit adresa de nceput a segmentului poart numele de adres FAR (adres ndeprtat). O adres FAR se poate specifica n unul din urmatoarele trei moduri: - s3s2s1s0 : specificare_offset unde s3s2s1s0 este o constant; - CS : specificare_offset ; DS : specificare_offset ; ES : specificare_offset ; SS : specificare_offset; - VARDOUBLE , reprezentand numele unei variabile de tip dublucuvnt ce conine o adres FAR (pointer). 2.6.7. Calculul offsetului unui operand. Moduri de adresare n cadrul unei instruciuni exist mai multe moduri de a calcula offsetul unui operand pe care aceasta l solicit:
-

modul registru, dac pe post de operand se afl un registru al mainii; modul imediat, atunci cnd n instruciune se afl chiar valoarea operandului (nu adresa lui i nici un registru n care s fie coninut); modul adresare la memorie, dac operandul se afl efectiv undeva n memorie. n acest caz, offsetul su se calculeaz dup urmtoarea formul:

adresa_offset = [ BX | BP ] + [ SI | DI ] + [ constanta ] bazat indexat direct La instruciunile de salt mai apar dou tipuri de adresri : Adresare relativ - poziia urmtoarei instruciuni de executat se exprima n raport cu poziia curent. Poziia este indicat prin numrul de octei de cod peste care se va sri, numr ce ia valori ntre -128 i 127. O astfel de adres mai poart numele de adres scurt (SHORT Adress). Adresarea indirect apare atunci cnd locul viitoarei instruciuni de executat este indicat printr-o adres, aflat ntr-o locaie, a crei adres este dat ca operand instruciunii de salt. Desenul din figura 2.16 sugereaz acest mecanism.

Salt indirect prin Y

Y:

Adresa instruciunii X

X:

Instruciunea de executat

Adresarea indirect asigur o mai mare flexibilitate n controlul succesiunii instruciunilor. De exemplu, coninutul locaiei Y poate s difere de la un moment la altul a execuiei programului, ceea ce permite execuia la momente diferite a unor instruciuni diferite n urma saltului indirect prin Y. Adresarea indirect poate fi la rndul ei adresare indirect NEAR sau adresare indirect FAR.

You might also like