Arhitectura procesorului Intel 8086 Coninut 1. Introducere ......................................................................................................................2 1.1. Scop .........................................................................................................................2 2. Arhitectura procesorului Intel 8086...............................................................................2 Unitile de procesare ale CPU : ..........................................................................................3 2.1. Registrele microprocesorul 8086..............................................................................4 2.1.1. Registrele de uz general ...................................................................................5 2.1.2. Registrele de segment ......................................................................................6 2.1.3. Registrul pointerului de instrunciuni .................................................................6 2.1.4. Registrul indicatorilor de conditie (de stare i control) ......................................6 2.2. Organizarea memoriei ..............................................................................................7 2.3. Generarea adresei fizice ..........................................................................................8 3. Aplicaii ..........................................................................................................................11
Lista de figuri Figura 1. 1 8086 schema bloc .............................................................................................3 Figura 1. 2 Registrele de uz general ........................................................................................5 Figura 1. 3 Registrele segment ................................................................................................6 Figura 1. 4 Indicatorii de condiii...............................................................................................6 Figura 1. 5 Organizarea memoriei Memorarea variabilelor i instrunciunilor .....................8 Figura 1. 6 Memorarea variabilelor de tip word........................................................................8 Figura 1. 7 Memorarea variabilelor de tip pointer.....................................................................8 Figura 1. 8 Adresa fizica i adrese logice.................................................................................9 Figura 1. 9 Generarea adresei fizice........................................................................................9 Figura 1. 10 Exemplul 1 de generare a adresei fizice............................................................10
La baza proiectrii i realizrii familiei lui 8086 au stat patru concepte arhitecturale noi la momentul respectiv : 1. segmentarea memoriei, prin care se permite programarea modular, deschizndu- se astfel calea implementarii tehnicilor de protecie i partajare a memoriei. 2. poibilitatea implementrii cu usurin a unor moduri de adresare caracteristice limbajelor de programare de nivel nalt (bazat, indexat, pentru structuri de date). 3. cresterea puterii de calcul pe baza unui set de regitri optimizat pentru a realiza funcii generale i specializate de procesare a datelor, precum i introducerea unitilor aritmetice de calcul de tipul coprocesoarelor aritmetice, echipamente care se conecteaz pe magistralele microprocesorului n paralel cu acesta, crescnd mult viteza de lucru a istemului n unele aplicaii
L.1 - 2/11 Arhitectura procesorului Intel 8086 4. set de instructiuni codificat anume pentru utilizarea la viteza crescut i cu eficien maxim a memoriei. Caracteristici hardware esentiale ce definesc funcionarea microprocesorului Intel 8086: multiplexarea n timp a magistralei de adrese i date (20 linii de adresa, 16 linii de date) microprocesorul are o configuraie intern comutabil pentru adaptarea la nivelul de complexitate a sistemului n care este utilizat. Unitile de procesare ale CPU : EU (execution unit) unitatea de execuie BIU (bus interface unit) unitatea de interfaa cu magistrala. n EU are loc execuia instructiunilor n timp ce BIU extrage instruciunile, citeste operanzii i scrie rezultatele n memorie. Cele doua unitati pot opera independent una de cealalta i pot asigura n majoritatea cazurilor suprapunerea n timp a etapei de extragere a unei instructiuni cu etapa de execuie a unei instructiuni precedent extrase din memorie. n acest mod, practic "dispare" timpul necesar extragerii instructiunilor din memorie, crescand viteza de lucru a microprocesorului deoarece EU executa instructiuni al caror cod a fost deja adus de catre BIU din memorie n microprocesor. Unitatea de execuie conine regitrii de uz general, unitatea aritmetico-logic, registrul indicatorilor de conditie, un bloc logic de control i o magistral intern de date de 16 bii (Figura 1. 1).
. Figura 1. 1 8086 schema bloc
Funciile EU acoper execuia tuturor instruciunilor, furnizarea datelor i a adreselor ctre BIU, controlul registrelor de uz general i al indicatorilor de conditie. Cu exceptia ctorva pini
L.1 - 3/11 Arhitectura procesorului Intel 8086 de control, unitatea de execuie este complet izolat de "lumea exterioar". Asa cum se evideniaz n Figura 1. 1, EU preia instruciunea urmtoare de executat dintr-o coad de ateptare alimentat continuu de unitatea de interfa cu magistrala. n situatia n care nu exista nici o instrunciune de preluat pentru a fi executat, unitatea de execuie asteapt pn cnd coad este realimentat de ctre BIU. Dac n cursul execuiei instrunciunii este necesar accesul la o locaie de memorie sau la un echipament periferic, EU solicit unitii de interfaa cu magistrala s transfere data, executnd ciclul de magistral corespunzator (citire/scriere la memorie sau port). Totodat, dei magistrala EU are doar 16 bii, se poate accesa n exterior ntregul spaiu de un megaoctet de memorie prin intermediul BIU care asigur relocatarea adresei naintea fiecarui transfer. BIU Unitatea de interfaa cu magistrala execut toate operaiile externe de magistral ce sunt necesare pe parcursul extragerii i execuiei unei instruciuni. Ea se compune din regitrii de segment, un registru de tip contor de program denumit pointer de instrunciuni (instruction pointer), regitri de comunicatie intern, o schem logic pentru generarea adresei pe cele 20 de linii de adresa ale microprocesorului 8086 i pentru controlul magistralei multiplexate precum i o coad de instrunciuni (queue). Aceasta este realizat cu o memorie RAM de 6 octei i contine instrunciuni care sunt extrase n avans de BIU i urmeaz s fie preluate de EU pentru decodificare i execuie. Cele dou uniti de procesare ale CPU opereaz independent una de alta n sensul c, ori de cite ori doi sau mai muli octei din coad sunt liberi, iar EU nu solicit BIU la efectuarea vreunui ciclu de magistral, unitatea de interfa cu magistrala execut n avans cicluri de extragere de instrunciuni pentru a realimenta locaiile libere din coada de instrunciuni. Acest mod de lucru permite BIU s furnizeze EU instrunciuni extrase anterior fr a monopoliza magistrala sistemului cci, n mod normal, n majoritatea situaiilor coad de instrunciuni contine cel putin un octet ce poate fi preluat de EU pentru decodificare i execuie. n plus, cum sistemele cu microprocesor 8086 au uzual magistrala de date de 16 biti, ntr-un singur ciclu de extragere se alimenteaza coad cu doi octeti, cu exceptia cazurilor cnd adresa de la care se citete instrunciunea urmtoare este impar, asa cum se va arta ulterior. Instruciunile extrase n avans de BIU sunt cele care urmeaz n mod logic ntr-o procesare serial a programului, ele aflndu-se n memorie n locaii adiacente i la adrese superioare adresei instrunciunii care se execut la un moment dat. n cazul n care EU executa o instrunciune care transfer controlul programului ctre o alt locaie de memorie, BIU reseteaza coada, extrage instrunciunea de la noua adres, transfernd-o imediat unitii de execuie, apoi ncepe realimentarea cozii de la noua locaie. De asemenea, BIU suspend operatiile de extragere de instrunciuni (cu excepia celei n curs de desfurare) ori de cte ori unitatea de execuie solicit efectuarea pe magistral a unui transfer cu memoria sau cu un port de intrare/ieire.
2.1. Registrele microprocesorul 8086
Pot fi clasificate din punctul de vedere al rolului pe care l au n 5 grupuri: registrele generale (pe 16 bii): AX, BX, CX, DX; registrele indicatoare de adres (pe 16 bii): SP, BP; registrele index (pe 16 bii): I, DI; registrele segment (pe 16 bii): CS, DS, ES, SS; registrul adresei instruciunii curente (pe 16 bii): IP.
L.1 - 4/11 Arhitectura procesorului Intel 8086 2.1.1. Registrele de uz general Microprocesorul 8086 are 8 registre generale de 16 biti grupate n doua seturi a cite 4 registre fiecare: registrele de date (uneori denumite grupul registrelor H&L de la high i low) i registrele pointer i index (denumite i grupul P&I) - Figura 1. 2.
Figura 1. 2 Registrele de uz general
Registrele generale (AX, BX, CX, DX) - sunt utilizate n instruciunile aritmetice i logice. Majoritatea instruciunilor aritmetice utilizeaz n acelai mod toate registrele. Exist ns unele instruciuni aritmetice pentru care anumite registre generale au semnificaii speciale: AX - registru acumulator, BX - registru baz, CX - registru contor, DX - registru date - utilizat implicit n operaiile de nmulire i mprire; i de asemenea poate conine adresa unui port. Toate cele patru registre generale pot fi utilizate i ca perechi de registre pe 8 bii. Registrele indicatoare de adres (SP, BP) - registrul SP are semnificaia de adres curent a vrfului stivei, iar registrul BP este utilizat pentru a permite accesul la informaia coninut n stiv. Registrele index (SI, DI) - sunt utilizate n general pentru adresarea indexat, coninnd adrese relative n segmentul de date curent. Segmentul implicit utilizat n adresare poate s fie modificat prin utilizarea n instruciuni a unor prefixe speciale. Att registrele de date ct i registrele pointer i index pot fi folosite n majoritatea operaiilor aritmetice i logice, oricare dintre ele putnd juca rolul registrului "acumulator" existent la generaiile precedente de microprocesoare. Pentru a permite utilizarea unui set compact, dar puternic de instruciuni, anumite registre sunt folosite n mod implicit de unele instruciuni, aa cum arat Tabel 1.
Tabel 1 Utilizarea implicit a registrelor de uz general REGISTRU OPERATII AX nmuliri, mpriri i I/E pe cuvnt AL nmuliri, mpriri i I/E pe octet, translatri, aritmetic zecimal AH nmuliri i mpriri pe octet
L.1 - 5/11 Arhitectura procesorului Intel 8086 BX Translatri CX Operaii cu iruri de caractere, contor pentru operaraii repetate CL Deplasri i rotiri cu mai mult de o poziie DX nmuliri i mpriri pe cuvnt, I/E cu adresare indirect SP Operaii cu stiva SI, DI Operaii cu iruri de caractere
2.1.2. Registrele de segment Spatiul fizic de memorie de 1 Mb direct adresabil de microprocesorul 8086 este divizat n segmente logice de pn la 64 kb fiecare. CPU are acces direct n orice moment la patru segmente logice ale cror adrese de baza (adresele de nceput ale segmentelor) se afla n regitrii de segment ai microprocesorului. Registrele de segment (Figura 1. 3) conin : adresa de nceput a segmentului de cod (CS) din care sunt extrase instruciunile, adresa de baz a segmentului de date (DS), adresa de baz a segmentului de date suplimentar (ES) i adresa de baz a segmentului de stiv (SS).
Figura 1. 3 Registrele segment 2.1.3. Registrul pointerului de instrunciuni Registrul pointerului de instrunciuni IP (nstruction Pointer) este similar registrului contor de program (Program Counter) al microprocesoarelor pe 8 biti. Este un registru pe 16 bii. Actualizat de catre BIU, el conine deplasamentul (offsetul, distana n octei) instruciunii urmtoare fa de nceputul segmentului de cod curent.
2.1.4. Registrul indicatorilor de conditie (de stare i control) Registrul indicatorilor de conditie (Flags register) conine 6 indicatori de stare i 3 indicatori de control, notai conform cu Figura 1. 4.
Figura 1. 4 Indicatorii de condiii
Indicatorii de condiii sunt utilizai pentru a memora informaii referitoare la rezultatul unor operaii aritmetice sau logice (AF, CF, OF, PF, SF, ZF) i pentru memorarea unor informaii de control pentru microprocesor (DF, IF, TF).
L.1 - 6/11 Arhitectura procesorului Intel 8086 AF (Auxiliar Carry) - 1 dac n execuia unei instruciuni care poziioneaz acest indicator a aprut un transfer de la semioctetul inferior la semioctetul superior al rezultatului (un transport dinspre bitul 7 spre bitul 8 sau un mprumut dinspre bitul 8 ctre bitul 7). Acest indicator este folosit n aritmetica zecimal. CF (Carry) - 1 dac a aprut un transport din sau s-a fcut un mprumut catre cel mai semnificativ bit (MSB) al rezultatului reprezentat pe 8 sau 16 biti. Acest indicator este utilizat de instructiunile ce implic operaii de adunare sau scdere cu numere reprezentate pe unul sau mai multi octei. De asemenea unele instruciuni pot poziiona acest indicator (exemplu: instruciunile de rotire, deplasare de bii). OF (Overflow) - 1 dac n execuia unei instruciuni aritmetice cu semn dimensiunea rezultatului depete capacitatea locaiei de destinaie i a fost pierdut un bit; a aprut o depire aritmetic. Este de remarcat faptul c exist o instructiune (INTerrupt On Overflow) care genereaza o cerere de intrerupere pentru semnalarea apariiei acestei situaii. SF (Sign) - 1 dac s-a obinut un rezultat pentru care bitul cel mai semnificativ este 1 (prin convenie, 0 indic un numr pozitiv, iar 1 - un numr negativ). PF (Parity) - 1 dac s-a obinut un rezultat cu paritate par (conine un numr par de bii cu valoarea 1). Poate fi utilizat pentru verificarea erorilor de transmisie a datelor. ZF (Zero) - 1 dac s-a obinut rezultatul zero. DF (Direction) - indic direcia de parcurgere a irurilor de octei n cazul instruciunilor pe iruri de octei. Stabilete dac operaiile pe iruri lucreaz prin incrementare (cnd are valoarea 1) sau prin decrementare (valoarea 0) IF (Interrupt) - este poziionat pe 1 pentru a permite CPU s recunoasc cererile de ntrerupere externe mascabile. Modificarea valorii lui IF nu are efect asupra ntreruperilor generate intern n CPU sau a celor externe nemascabile. TF (Trace) - este utilizat pentru controlul execuiei instruciunilor n regim pas cu pas n scopul depanrii programelor, CPU genereaz automat o ntrerupere interna dup fiecare instructiune dac TF=1.
EU poziioneaz cei 6 indicatori de stare pentru a reflecta anumite stri ale unei operaii aritmetice sau logice. Un anumit set de instruciuni permit modificarea execuiei unui program n funcie de starea acestor indicatori - cum ar fi instruciunile de salt condiionat.
2.2. Organizarea memoriei Microprocesorul 8086 poate adresa direct un spatiu de 1Mo = 1.048.576 octei organizat liniar cu adresele joase la nceput i adresele nalte la sfirit. Instruciunile i datele pe octet sau cuvnt pot fi plasate liber la orice adres, fie ea par sau impar, pentru a permite o stocare densa a codului programului n memorie acesta fiind unul din conceptele impuse la proiectarea procesorului. Totui, trebuie remarcat faptul c memorarea unei variabile de tip word la o adres impar situaie n care se spune c variabila este nealiniat (unaligned) anuleaz din punct de vedere al transferului variabilei respective avantajul microprocesorului 8086 de a avea o magistral de date de 16 bii. n ceea ce privete instruciunile, alinierea sau nealinierea lor nu afecteaz performanele microprocesorului datorit cozii de ateptare din BIU.
L.1 - 7/11 Arhitectura procesorului Intel 8086
Figura 1. 5 Organizarea memoriei Memorarea variabilelor i instrunciunilor
Conform conventiilor INTEL, o variabila de tip word este ntotdeauna memorat cu octetul cel mai semnificativ n locaia de memorie cu adres superioar. Aceasta regul se extinde i la memorarea variabilelor de tip pointer (variabile pe un cuvnt dublu foloite pentru a adresa date n afara segmentului de date sau de program ce este adresabil n mod curent la momentul respectiv): cuvntul ce conine ofsetul se memoreaz la cele dou adrese inferioare, cuvntul ce conine adresa de baz a segmentului se memoreaz la cele dou adrese superioare la care este stocat pointerul, iar n cadrul fiecarui cuvnt, octetul cel mai semnificativ este la rndul lui memorat la adresa superioar.
Figura 1. 6 Memorarea variabilelor de tip word
ADRESA BAZA SEGMENT : 3B4CH OFFSET : 65H Figura 1. 7 Memorarea variabilelor de tip pointer
2.3. Generarea adresei fizice
Se poate imagina ca fiecare locaie de memorie are doua feluri de adresa: fizic i logic. Adresa fizica este acea valoare pe 20 de bii care identific n mod unic fiecare octet din spaiul de memorie de 1Mo. Ea este cuprins ntre 00000H i FFFFFH i exist pe liniile magistralei multiplexate la nceputul fiecrui ciclu de scriere sau citire n/din memorie.
L.1 - 8/11 Arhitectura procesorului Intel 8086 Programatorul opereaz ns mai mult cu adresa logic dect cea fizic, ceea ce permite scrierea unui program fr a cunoate dinainte locul unde codul acestuia va fi ncarcat n memorie i faciliteaz controlul dinamic al resurselor de memorie. O adres logic const dintr-o valoare de baz a segmentului i o valoare de offset (deplasamnt), ambele fiind mrimi fr semn reprezentate pe 16 bii. Pentru orice locaie de memorie, valoarea de baz a segmentului indic primul octet coninut n segment (nceputul segmentului), iar valoarea de offset reprezinta distana n octei de la acest nceput pn la locaia respectiv. Primul octet (cel mai de jos) aparinnd unui segment are deci offset-ul egal cu zero. Avnd n vedere conceptul de segment logic, rezult c o locaie fizic de memorie poate avea o mulime de adrese logice. Acest fapt este ilustrat n Figura 1. 8 n care locaia de memorie fizic 2C3H este coninut n dou segmente logice suprapuse parial, unul ncepnd la 2B0H, iar altul la 2C0H.
Figura 1. 8 Adresa fizica i adrese logice Ori de cite ori unitatea de interfa cu magistrala acceseaz memoria pentru a extrage o instrunciune sau pentru a obine sau stoca o variabil ea genereaz adresa fizic pe baza adresei logice. Aceasta se realizeaz prin deplasarea la stnga cu patru poziii binare a valorii de baza din registrul de segment i adunarea valorii de offset (deplasament) - Figura 1. 9, Figura 1. 10.
Figura 1. 9 Generarea adresei fizice
L.1 - 9/11 Arhitectura procesorului Intel 8086
Figura 1. 10 Exemplul 1 de generare a adresei fizice
Exemplul 2: Fie baza de segment = 6020H i offset-ul = 4267H
Instruciunile sunt extrase din segmentul de cod, iar offset-ul este dat de registrul IP. Operaiile cu stiva sunt executate n segmentul de stiv curent, iar offsetul este dat de registrul SP, .a.m.d. Offsetul unei variabile din memorie este calculat de unitatea de execuie n funcie de modul de adresare specificat n instrunciune; rezultatul se numete adresa efectiv (effective address EA). In majoritatea cazurilor, utilizarea segmentelor implicite pentru accesul datelor n memorie este convenabil pentru programator. Este posibil ns i accesul unei variabile n oricare dintre segmentele adresabile n mod curent (cu excepia instruciunilor ce manipuleaz iruri de caractere unde operandul destinaie este obligatoriu s se gaseasc in segmentul de date suplimentar). Pentru a obine acest lucru, instruciunea trebuie precedat de un prefix segment override prefix care indic BIU ce registru de segment s utilizeze pentru a accesa variabila respectiv. Tabel 2 Sursele de adresa logica
L.1 - 10/11 Arhitectura procesorului Intel 8086 Modul de obtinere a adresei fizice si structura segmentata a memoriei creaz posibilitatea realizrii de programe ce nu depind de locul unde sunt ncarcate in memorie, adic programe relocatabile n mod dinamic, ceea ce permite utilizarea deplin a memoriei disponibile i realizarea de sisteme multitasking. Astfel, programele inactive pot fi ndepartate din memorie (transferate pe disc) i spaiul ocupat de ele alocat altor programe. Activarea unui program se face prin ncrcarea lui n orice zon liber din memorie i lansarea n execuie. In mod similar, dac un program are nevoie de un spaiu de memorare continuu de capacitate mare, iar zona disponibil este fragmentat, segmentele altui program pot fi compactate pentru a elibera spaiul, situaie ilustrat n figura 4.9 din cursul de Bazele Microprocesoarelor. Pentru a fi relocatabil dinamic, un program trebuie s nu-i ncarce sau modifice registrele de segment sau s transfere controlul ntr-o locaie aflat n afara segmentului curent de cod. Toate offset-urile vor fi relative la valorile fixe continute n registrele de segment. Programul poate fi mutat oriunde n memorie, prin simpla actualizare a adreselor de baz de segment.
3. Aplicaii 1. Cte magistrale are microprocesorul 8086 i cum sunt utilizate ? 2. Explicai care este diferena ntre EU i BIU, i care este rolul fiecreia. 3. Indicai rolul indicatorilor de condiie. 4. Care este rolul unitii aritmetico-logice ALU? 5. Care este rolul registrului IP? 6. Dac registrul de segment CS conine valoarea 2200H, iar registrul IP conine valoarea 4200H, indicai care este adresa din memorie de la care va fi extras urmtoarea instruciune. 7. n locaia de memorie 12234H este stocat variabila de tip cuvnt 2C46H. Precizai cel puin nu segment n care s fie coninut. Indicai cum este memorat variabila.