Sunteți pe pagina 1din 8

Laborator 3 /////////////////////////////////////////////// Introducere in structura microprocesorului 8086 ///////////////////////////////////////////////

Cuvinte cheie memorie, capacitatea unei memorii, ordine de memorare a octetilor intr-un cuvint, octet high (cel mai semnificativ octet) octet low (cel mai putin semnificativ octet), adresa, continut, adresa fizica, adresa logica, segment, deplasament, registru

Introducere A descrie un microcomputer inseamna a-i descrie componentele functionale. Descrierea acestor componente, precum si a interactiunilor dintre ele este numita "arhitectura" calculatorului. In general, aceasta se refera la citi registri are un calculator, ce functii au, cita memorie poate fi conectata, cum este ea adresata, precum si facilitati de intrare/iesire. In general, un microsistem de calcul contine urmatoarele componente principale: - unitatea centrala (UC), constituita din microprocesor (CPU - Central Processor Unit). CPU este un circuit integrat ce contine circuitele care controleaza functiile calculatorului, registri, indicatori, etc. - memoria, folosita ca dispozitiv de stocare a datelor si a instructiunilor. - sistemul de intrari/iesiri (I/O), format din ansamblul porturilor de intrare/iesire si a circuitelor de control pentru interfata cu echipamentele periferice. Conexiunea intre CPU si memorie si sistemul I/O este realizata prin intermediul magistalelor (BUS - in engleza). Structura memoriei Pentru ca un program sa fie executat, el trebuie incarcat in memoria computerului, care va stoca atit instructiunile cit si datele programului. Instructiunile si datele sunt pastrate in format binar. Memoria unui computer este alcatuita dintr-o secventa continua de locatii direct adresabile, fiecare locatie fiind descrisa prin 2 componente:

- adresa locatiei de memorie; - continutul locatiei de memorie; ADRESA > CONTINUT Pentru a accesa continutul unei locatii de memorie, unitatea centrala a unui sistem de calcul va trebui sa comunice subsistemului de memorie adresa fizica pentru acea locatie. Nu pot exista doua locatii de memorie cu aceeasi adresa. Fiecare sistem de calcul are caracteristic dimensiunea (in biti) a celei mai mici locatii de memorie direct adresabila. Exista sisteme de calcul care acceseaza locatiile de memorie la nivel de : - 1 bit (bit - adresabil); - 1 octet (byte - adresabil); - 1 cuvint (word - adresabil). Pentru a accesa o locatie de memorie, unitatea centrala (CPU) va comunica modulului de memorie adresa acestei locatii utilizind ADDRESS-BUS (magistrala de adrese). Dimensiunea ADDRESS-BUS - ului da capacitatea de memorie (dimensiunea ei) a unui sistem de calcul. O unitate centrala poate accesa 2^n locatii de memorie, unde n este dimensiunea ADDRESS-BUS - ului. In general, dimensiunea memoriei este exprimata in Kiloocteti(Ko) sau Megaocteti (Mo), unde: 1Ko 1Mo = 2^10 octeti = 2^20 octeti (1024 octeti) (1024 Ko)

De exemplu o unitate centrala care are o magistrala de adrese de dimensiune 20 va putea accesa 2^20 locatii de memorie (2^20 = 1Mo ); Ordinea de memorare a octetilor pentru valori multioctet In cazul valorilor reprezentate pe mai mult de un octet ( ex: cuvinte, dublu cuvinte ) este importanta ordinea in care sunt memorati octetii acestei valori. Inainte de a enumera conventiile de ordonare a octetilor unei valori multi-octet, sa introducem doi termeni mult uzitati: cel mai semnificativ octet (octet high) si cel mai putin semnificativ octet (octet low). In cadrul unui cuvint (format din doi octeti) cei doi sunt notati dupa cum urmeaza: cuvint: b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 | || | \ / \ / \________________________/ \__________________________/ | | cel mai semnificativ octet cel mai putin semnificativ octet

Conventiile de ordonare a octetilor unei valori multi-octet sunt: - BIG ENDIAN: octetul mai semnificativ este memorat in locatia de memorie cu adresa cea mai mica; - LITTLE ENDIAN: octetul mai semnificativ este memorat in locatia de

memorie cu adresa cea mai mare. Exemplu: Daca se va memora valoarea pe 16 biti 1234H in memorie la adresa A si consideram ca cea mai mica locatie adresabila are dimensiunea de 1 octet, dispunerea octetului cel mai semnificativ (12H) si a octetului mai putin semnificativ (34H) ar putea fi in cele 2 moduri: BIG ENDIAN 12H 34H A A+1 LITTLE ENDIAN 34H 12H A A+1

Adresarea memoriei la microprocesorul Intel 8086 Cea mai mica locatie direct adresabila de microprocesorul INTEL 8086 este octetul (deci unitatea centrala este byte-adresabila), iar conventia de ordonare a octetilor in cuvint este LITTLE ENDIAN. Iata un exemplu: creste adresa ... 0C F7 ... 3B 2F ...

octet cel mai putin semnificativ ----| --> cuvintul F70Ch octet cel mai semnificativ -----------

octet cel mai putin semnificativ ----| --> cuvintul 2F3Bh octet cel mai semnificativ -----------

In cazul unui sistem de calcul ce utilizeaza ca unitate centrala un microprocesor INTEL 8086, fiecare locatie de memorie are 2 tipuri de adresa: - adresa fizica; - adresa logica; Adresa fizica este o valoare de 20 de biti, identificind in mod unic fiecare locatie din spatiul de adresare al microprocesorului. Adresa fizica poate lua valori in domeniul 00000(H) - FFFFF(H) Deci, pentru a putea reprezenta o adresa fizica a unei locatii de memorie, avem nevoie de o secventa de 20 de biti. Dar 8086 a fost proiectat sa efectueze operatii aritmetice pe numai 16 biti si sa manipuleze date pe 16 biti. In aceste conditii, este necesar un mecanism aditional pentru lucrul cu memoria. Acesta este mecanismul de segmentare. Un segment este o unitate logica de memorie, de cel mult 64 Ko (2^16 octeti) lungime, format din locatii continue de memorie. Fiecare segment incepe la o adresa multiplu de 16 (deci ultimii 4 biti dintr-o adresa fizica - pe 20 biti - au valoarea 0). Nu exista restrictii asupra locatiilor segmentelor, in sensul ca ele pot fi adiacente, disjuncte, partial suprapuse sau suprapuse in intregime. Deci o locatie de memorie fizica poate fi continuta in unul sau mai multe segmente logice. In orice moment, un program poate accesa continutul a patru

segmente: -

segmentul de cod segmentul curent de date segmentul curent de stiva extrasegmentul curent

Vom vedea imediat ca fiecare dintre aceste segmente are cite un registru dedicat in microprocesor. Problema care se pune imediat este: cum anume putem obtine valoarea adresei fizice a unui octet in memorie (pe 20 biti) daca lucram cu mecanismul de segmentare. Deja am subliniat diferenta intre doua tipuri de adrese: fizica (in domeniul 00000h ... FFFFFh) si logica (adresele cu care lucreaza efectiv programele). O adresa logica are 2 componente, fiecare de 16 biti (1 cuvint), considerate ca valori intregi fara semn: - baza segmentului (adresa primei locatii de memorie continuta de segment; reamintim, ea este multiplu de 16); - deplasament sau offset (deplasamentul este valoarea, in octeti, a locatiei destinatie relativ la inceputul segmentului; evident, cea mai mica locatie din segment are deplasamentul 0); Adresa logica este scrisa in forma SEGMENT:OFFSET Exemple de adrese logice: 1000:4563(H), 3462:8952(H), AF00:45AD(H) Transformarea ADRESA LOGICA -> ADRESA FIZICA este transparenta acum pentru programator. ADRESA FIZICA = SEGMENT * 16 + DEPLASAMENT sau ADRESA FIZICA = SEGMENT * 10(H) + DEPLASAMENT Exemplu: Adresa logica 1000:4563(H) va fi transformata de microprocesor in adresa fizica: 1000(H) * 10(H) + 4563 (H) = 10000(H) + 4563(H) = 14563(H) Din formulele de mai sus, se poate trage urmatoarea concluzie: O ADRESA FIZICA POATE FI OBTINUTA DIN MAI MULTE ADRESE LOGICE DIFERITE !!! Inainte de a incheia acest capitol, sublinem urmatorul aspect: microprocesorul Intel 8086 acceseaza intotdeauna memoria pentru cuvinte memorate la adresa para. In aceste conditii, un cuvint memorat la adresa para este citit printr-o singura operatie de acces la memorie, pe cind un cuvint memorat la adresa impara necesita doua operatii de acces la memorie (care transfera doua cuvinte la adrese pare, din fiecare din acestea un octet, cel "nedorit", fiind ignorat). Este evident deci, ca citirea cuvintelor memorate la adresa para este mai rapida. INTREBARI SI EXERCITII: 1. Cite locatii de memorie pot fi accesate de o unitate centrala prevazuta cu 12 linii de adrese. 2. Cite locatii de memorie pot fi accesate de o unitate centrala prevazuta cu 20 linii de adrese. 3. Stiind ca o unitate centrala poate accesa 65536 locatii de memorie, cite linii de adresa are? 4. Care este valoarea segmentului din adresa logica

245F : 5634 (H) ? Dar valoarea offset-ului? 5. Calculati adresa fizica ce este calculata de un microprocesor INTEL 8086 pe baza adresei logice: F000:FFF0 (H) 6. Calculati adresa fizica ce este calculata de un microprocesor INTEL 8086 pe baza adresei logice: FFFF:0000 (H) 7. Gasiti 3 exemple de adresa logica care sa identifice locatia de memorie de la adresa fizica: 37AF2 (H) 8. Care este dimensiunea maxima a unui segment de memorie la un microprocesor INTEL 8086? Argumentati. 9. Care din urmatoarele segmente au portiuni comune in memorie cu segmentul de adresa 35F2(h) a. 4053 (H) b. 3110 (H) c. 8173 (H) d. 4610 (H) 10. Daca un microprocesor INTEL 8086 depune in memorie, la adresa fizica 89654(H) valoarea pe 16 biti ABCD(H), care va fi continutul locatiei de memorie cu adresa fizica 89655(H)? 11. Incepind de la adresa fizica A0000(H), este memorat sirul de caractere "LABORATOR ASO". Care va fi continutul locatiei de memorie de la adresa fizica A000C(H) ?

REGISTRI Registrul este o locatie in interiorul unitatii centrale si este utilizat pentru pastratrea datelor si adreselor locatiilor de memorie in timpul executiei instructiunilor. Accesul la continutul unui registru este mult mai rapid decit accesul la cotinutul locatiilor de memorie. Numarul registrilor unei unitati centrale depinde de tipul unitatii centrale. Spre deosebire de locatiile de memorie care sunt identificate prin adrese, registrii unei unitati centrale sunt identificati prin numele lor. REGISTRII microprocesorului INTEL 8086 Microprocesorul INTEL 8086 are urmatoarele categorii de registri: a) Registri generali. Exista 8 registri generali care pot fi impartiti in 2 seturi: - registri de date : AX, BX, CX, DX - registri de pointer si index : SP, BP, SI si DI Toti registrii sunt pe 16 biti ( 1 cuvint ). Registrii de date pot fi accesati separat pentru octetul high si octetul low astfel incit pot fi priviti ca fiind alcatuiti din 2 registri de 8 biti. Astfel, registrul AX poate fi accesat in partea high cu numele AH iar in partea low cu numele AL. Analog, registrii BX, CX, DX pot fi accesati si pe octet sub numele: BH, BL, CH, CL, DH, DL. Registrii de pointer si de index pot fi utilizati doar ca registri de 16 biti. b15 b8 b7 b0 b15 b0

AX AH AL b15 b8 b7 b0 BX BH BL b15 b8 b7 b0 CX CH CL b15 b8 b7 b0 CX CH CL

SI

DI

SP

BP

b) Registri de segment Reamintim ca spatiul de memorie este impartit in segmente logice de maximum 64 Ko. In orice moment, unitatea centrala are acces la 4 segmente. Adresa fiecarui astfel de segment este pastrata in unul din registrii de segment ai microprocesorului. Fiecare registru de segment este de 16 biti (1 cuvint) si nu poate fi accesat la nivel de octet. CS : pastraza adresa segmentului de cod (segmentul de unde sunt citite instructiunile pentru a fi executate). SS : pastreaza adresa segmentului de stiva. Operatiile cu stiva sunt efectuate in locatiile de memorie delimitate de acest segment. DS : pastreaza adresa segmentului de date; in aceasta zona de memorie sunt pastrate datele si variabilele programului. ES : pastreaza adresa extrasegmentului; extra segmentul este, cel mai adesea, utilizat tot pentru pastrarea datelor unui program. c) Pointerul de instructiuni Pointerul de instructiuni (IP) este un registru de 16 biti (1 cuvint), ce contine deplasamentul (offset-ul) in segmentul de cod (identificat de valoarea ce se gaseste in registrul CS) de unde va citi unitatea centrala urmatoarea instructiune. Programele nu au acces direct la pointerul de instructiuni. d) Registrul indicatorilor de conditie ( Flags ) Registrul indicatorilor de conditie contine o serie de biti care reflecta rezultatul unor operatii aritmetice si logice, precum si biti care controleaza direct modul de executie a instructiunilor. b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 -- -- -- -- OF DF IF TF SF ZF -- AF -- PF -- CF

Carry Flag (CF) reflecta transportul in exterior al bitului cel mai semnificativ al rezultatului unei operatii aritmetice. Valoarea bitului CF poate fi modificata si de instructiunile de deplasare si rotire. Exemplu: Daca in registrul AL avem valoarea 80(H) iar in registrul CL valoarea 87(H),iar microprocesorul executa o instructiune de adunare a registrului AL cu registrul CL, rezultatul va fi 07H iar flagul CF va fi pozitionat (va avea valoarea 1). Parity Flag(PF) va fi pozitionat (valoarea 1) daca rezultatul ultimei operatii aritmetice efectuate de microprocesor are o valoare para. Paritatea unei valori este reprezentata de numarul bitilor de valoare 1. Flagul de Transport Auxiliar (AF) este pozitionat daca a existat un transport de la nivelul inferior la nivelul superior al semioctetului rezultatului unei operatii aritmetice. Exemplu: Daca in registrul AL avem valoarea 10011000(B) iar in registrul DL avem valoarea 01001100(B) si microprocesorul va executa o operatie de adunare a continutului registrului AL cu continutul registrului DL: * *!! 1 0 0 1 1 0 0 0 + 0 1 0 0 1 1 0 0 1 1 1 0 0 1 0 0 S-au marcat prin * rangurile bitilor la a caror sumare exista transport de la rangul precedent.

Se observa ca exista transport de la rangul b3 la rangul b4 deci de la semioctetul inferior la semioctetul superior. In acest caz, AF va deveni 1. Zero Flag (ZF) va avea valoarea 1 daca rezultatul unei operatii aritmetice este 0. Sign Flag (SF) reflecta semnul rezultatului unei operatii aritmetica; deoarece numerele binare negative sint reprezentate in cod complementar fata de 2, SF va reflecta valoarea bitului cel mai semnificativ al rezultatului: 0 daca rezultatul este pozitiv; 1 daca rezultatul este negativ; Utilizarea celor doi indicatori de stare si control va fi explicata pe parcursul laboratoarelor ce vor urma.

INTREBARI SI EXERCITII: 1. Daca in registrul AX exista valoarea 4532(H), ce valoare exista in registrul AL? 2. Daca registrul AH contine valoarea 34(H) iar registrul AL contine valoarea 12(H), ce valoare se gaseste in registrul AX? 3. Daca registrul AL contine valoarea 214(10) iar registrul AH contine valoarea 39(10), ce valoare se gaseste in registrul AX? 4. Care este valoarea maxima intrega pozitiva care poate fi incarcata in registrul BL. 5. Care este valoarea maxima intrega pozitiva care poate fi incarcata in registrul DX? 6. Daca registrul AX contine valoarea 86FF(H), iar microprocesorul executa o instructiune de adunare la registrul AL a valorii 1, ce valoare se va gasi in AX in urma executiei acestei instructiuni? Care va fi valoarea flagurilor CF, ZF, SF, AF ?

S-ar putea să vă placă și