Sunteți pe pagina 1din 149

Mircea DOBRICEANU

SISTEME CU
MICROPROCESOARE

MANUAL

pentru învăţământ cu frecvenţă redusă


Prof. univ. dr. ing. Mircea DOBRICEANU

SISTEME CU MICROPROCESOARE

MANUAL

pentru învăţământ cu frecvenţă redusă


Referenţi ştiinţifici:
Prof. univ. dr. ing. Alexandru BITOLEANU – Universitatea din
Craiova
Prof. univ. dr. ing. Dan SELIŞTEANU – Universitatea din Craiova

Copyright  2012 Universitaria


Toate drepturile sunt rezervate Editurii Universitaria Craiova

Descrierea CIP a Bibliotecii Naţionale a României

DOBRICEANU, Mircea

SISTEME CU MICROPROCESOARE /
Mircea DOBRICEANU – Craiova: Universitaria, 2012

ISBN 978-

Apărut: 2012
TIPOGRAFIA UNIVERSITĂŢII DIN CRAIOVA
Str. Brestei, nr. 156A, Craiova, Dolj, România
Tel.: +40 251 598054

Tipărit în România
Cuprins

SISTEME CU MICROPROCESOARE

CUPRINS

Unitatea
de Titlu Pagina
învăţare
INTRODUCERE 9

1 CONCEPTE GENERALEPRIVIND MICROPROCESOARELE 13


Obiectivele unităţii de învăţare nr. 1 14
1.1. Definiţii şi terminologie 14
1.2. Arhitecturile von Neumann şi Harvard 19
1.3. Arhitectura de bază a unui microprocesor 20
1.3.1. Structura standard a microprocesorului 20
1.3.2. Unitatea aritmetică şi logică (ALU) 22
1.3.3. Unitatea de comandă şi control 23
1.3.4. Grupul de registre 25
1.4. Principiul de funcţionare al microprocesorului 29
Lucrare de laborator: 30
Test de autoevaluare 30
Lucrare de verificare – unitatea de învăţare nr. 1 31
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 31
Concluzii 32
Bibliografie – unitatea de învăţare nr. 1 32

2 MICROPROCESOARELE INTEL 80x86: ARHITECTURI ŞI 33


MAGISTRALE
Obiectivele unităţii de învăţare nr. 2 34
2.1. Arhitectura INTEL 80x86 34
2.2. Magistrale 40
2.2.1. Aspecte generale 40
2.2.2. Magistrala de date 41
2.2.3. Magistrala de adrese 42
2.2.4. Magistrala de control 43
Lucrare de laborator 44
Test de autoevaluare 45
Lucrare de verificare – unitatea de învăţare nr. 2 45
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 45
5
SISTEME CU MICROPROCESOARE
Cuprins
Concluzii 45
Bibliografie – unitatea de învăţare nr. 2 46

3 MICROPROCESOARELE INTEL 80x86:REGISTRELE ŞI 47


ORGANIZAREA MEMORIEI
Obiectivele unităţii de învăţare nr. 3 48
3.1. Registrele 48
3.1.1. Aspecte generale 48
3.1.2. Registrele de uz general 49
3.1.3. Registrele de segment 54
3.1.4. Registrele de uz special 56
3.2. Organizarea memoriei 58
Lucrare de laborator 63
Test de autoevaluare 63
Lucrare de verificare – unitatea de învăţare nr. 3 63
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 64
Concluzii 64
Bibliografie – unitatea de învăţare nr. 3 64

4 MICROPROCESOARELE INTEL 80x86: SETUL DE 65


INSTRUCŢIUNI
Obiectivele unităţii de învăţare nr. 4 66
4.1. Aspecte generale privind programarea în limbaje de asamblare 66
4.2. Precizări privind reprezentarea numerelor în sistemele cu 68
microprocesoare
4.3. Tipuri de date utilizate în limbaje de asamblare 71
4.4. Setul de instrucţiuni al microprocesoarelor INTEL 80x86 73
4.4.1. Sintaxa unei instructiuni în limbaj de asamblare 73
4.4.2. Grupe de instrucţiuni 74
Lucrare de laborator 85
Test de autoevaluare 85
Lucrare de verificare – unitatea de învăţare nr. 4 85
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 86
Concluzii 86
Bibliografie – unitatea de învăţare nr. 4 86

5 MICROPROCESOARELE INTEL 80x86: TEHNICI DE ADRESARE 87


A MEMORIEI
Obiectivele unităţii de învăţare nr. 5 88
5.1. Tehnici de adresare a memoriei 88
5.1.1. Aspecte generale 88
5.1.2. Moduri de adresare 89
5.2. Ciclurile de bază ale unui microprocesor 93
5.3. Moduri de operare 96
5.4. Execuţia instrucţiunilor 98
Lucrare de laborator 102
Test de autoevaluare 102
6
SISTEME CU MICROPROCESOARE
Cuprins
Lucrare de verificare – unitatea de învăţare nr. 5 103
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 103
Concluzii 103
Bibliografie – unitatea de învăţare nr. 5 104

6 MICROPROCESOARELE INTEL 80x86: LUCRUL CU STIVE ŞI 105


SUBRUTINE
Obiectivele unităţii de învăţare nr. 6 106
6.1. Caracteristici ale convertoarelor analog numerice (CAN) 106
6.1.1. Aspecte generale 106
6.1.2. Instrucţiuni pentru lucru cu stiva 109
6.2. Lucrul cu subrutine 111
6.2.1. Aspecte generale 111
6.2.2. Instrucţiuni pentru lucru cu subrutine 112
6.2.3. Transferul de parametri între program şi subrutine 116
Lucrare de laborator 116
Test de autoevaluare 117
Lucrare de verificare – unitatea de învăţare nr. 6 117
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 117
Concluzii 117
Bibliografie – unitatea de învăţare nr. 6 118

7 MICROPROCESOARELE INTEL 80x86:SISTEMUL DE 119


ÎNTRERUPERI
Obiectivele unităţii de învăţare nr. 7 120
7.1. Aspecte generale 120
7.2. Întreruperi software 123
7.3. Întreruperi hardware 125
7.4. Controlerul de intreruperi I8259A 127
Lucrare de laborator 129
Test de autoevaluare 129
Lucrare de verificare – unitatea de învăţare nr. 7 129
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 129
Concluzii 130
Bibliografie – unitatea de învăţare nr. 7 130

8 TEHNICI PENTRU ÎMBUNĂTĂŢIREA PERFORMANŢELOR 131


MICROPROCESOARELOR
Obiectivele unităţii de învăţare nr. 8 132
8.1. Paralelismul - tehnica unei prelucrări mai rapide 132
8.2. Coada pentru preluare anticipată ("prefetch queue") 136
8.3. Pipeline - suprapunerea execuţiei mai multor instrucţiuni 138
8.4. Memoria cache - căi multiple de acces la memorie 142
8.5. Arhitectura VLIW 143
8.5.1. Prezentare generală 143
8.5.2. Prezentare funcţională 144
8.6. Multiprocesarea 147
7
SISTEME CU MICROPROCESOARE
Cuprins
8.6.1. Prezentare generală 147
8.6.2. Arhitecturi de sisteme multiprocesor 148
Lucrare de laborator 149
Test de autoevaluare 149
Lucrare de verificare – unitatea de învăţare nr. 8 150
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 150
Concluzii 150
Bibliografie – unitatea de învăţare nr. 8 150

8
SISTEME CU MICROPROCESOARE
Introducere

SISTEME CU MICROPROCESOARE

INTRODUCERE

„Sisteme cu microprocesoare” este una din disciplinele domeniu (DD21), din planul de
învăţământ (semestrul 7).

Structura acestei discipline este indicată în următorul tabel.


Numărul orelor pe semestru/activităţi
Total SI S L P
56 28 - 28 -

Obiectivele acestei discipline vizează acumularea unor cunoştinţe care să ofere


studenţilor o serie de competenţe generale şi specifice, în concordanţă cu planul de
învăţământ:

a) competenţe generale:
- obţinerea de experienţă în abordarea unor subiectelor tehnice complexe într-un timp
relativ scurt, privind sistemele cu microprocesoare;
- familiarizarea cu cele mai importante arhitecturi de microprocesoare;
- dezvoltarea gândirii logice, înţelegerea conceptului de sistem cu microprocesor.

b) competenţe specifice:
- înţelegerea conceptelor precum: magistrala, memorie, interfaţarea acestora,
întreruperi etc;
- înţelegerea execuţiei unei instrucţiuni ciclu cu ciclu;
- însurşirea metodelor atât teoretice cât şi practice în domeniul sistemelor cu
microprocesoare.

Disciplina conţine 8 unităţi de învăţare, enumerate în tabelul următor.

9
SISTEME CU MICROPROCESOARE
Introducere

Nr. Denumirea unităţii de învăţare


crt.
1. Concepte generale privind microprocesoarele
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
6. Microprocesoarele INTEL 80x86: lucrul cu stive şi subrutine
7. Microprocesoarele INTEL 80x86: sistemul de întreruperi
8. Tehnici pentru îmbunătăţirea performanţelor microprocesoarelor

Laboratorul se efectuează pe parcursul a 14 săptămâni (2 ore în fiecare săptămână


distribuite conform calendarului disciplinei).
Şedinţele de laborator sunt în concordanţă cu unităţile de învăţare. Denumirile lor sunt
detaliate în următorul tabel.

Nr.
Denumirea şedintei de laborator
crt.
1. Instructajul de protecţia muncii; Prezentarea lucrarilor de laborator;
2. Programarea în limbaj de asamblare folosind simulatorul SMS32: utilizarea
registrelor interne;
3. Programarea în limbaj de asamblare folosind simulatorul SMS32: accesul la
memorie;
4. Programarea în limbaj de asamblare folosind simulatorul SMS32: utilizarea stivei şi
lucrul cu subrutine;
5. Programarea în limbaj de asamblare folosind simulatorul SMS32: programarea unor
sisteme reale simulate;
6. Programarea în limbaj de asamblare folosind simulatorul SMS32: programarea
folosind întreruperile;
7. Introducere în sisteme cu microprocesoare;
8. Microsistem cu microprocesor – modul Z3EV: descriere şi funcţionare hardware;
9. Microsistem cu microprocesor – modul Z3EV descriere şi funcţionare software;
10. Microsistem cu microprocesor – modul Z3EV: programarea microsistemului folosind
consola;
11. Microsistem cu microprocesor – modul Z3EV: programarea microsistemului folosind
PC;
12. Microsistem cu microprocesor – modul Z3EV: Programare avansată. Gestionarea
întreruperilor;
13. Microsistem cu microprocesor – modul Z3EV: interfaţa de comunicaţie paralelă;
14. Evaluare finală

Disciplina este prevăzută cu examen care se va susţine în sesiunea de examene.


Modalitatea de evaluare şi notare la această disciplină se face conform celor indicate
în continuare (la forma de învăţământ zi această disciplină este prevăzută cu 2 ore de
laborator/săptămână).
10
SISTEME CU MICROPROCESOARE
Introducere

răspunsurile la examen 60%


Stabilirea notei finale activităţi aplicate atestate la laborator 30%
(procentaje) teste pe parcursul semestrului 10%
teme de control -

Pentru aprofundarea noţiunilor cuprinse în unităţile de învăţare studenţii pot consulta o


serie de poziţii bibliografice (indicate la fiecare unitate de învăţare în parte), dintre care cele
mai reprezentative sunt următoarele:
1. Dobriceanu Mircea; Sisteme cu microprocesoare; Manual universitar pentru
învăţământul cu frecvenţă redusă, Editura Universitaria Craiova, 2012
2. Dobriceanu Mircea; Sisteme de achiziţie şi microprocesoare, Editura Universitaria
Craiova, 2003. p. 304, ISBN 973-8043-289-8
3. Rotar Dan; Arhitectura sistemelor de calcul, Editura ALMA MATER, 1997
4. Muscă Gheorghe; Programarea în limbaj de asamblare, Editura Teora, 1997

După cum se observă, disciplina este prevăzută cu un curs multiplicat, curs în format
electronic postat pe sit-ul facultăţii şi platforme de laborator corespunzătoare şedinţelor
enumerate anterior.

Instrucţiuni pentru parcurgerea materialului de studiu


Pentru a putea parcurge în mod corespunzător materialul ce va fi prezentat în
continuare, studenţii trebuie sa posede cunoştinţe temeinice acumulate în anii anteriori de
studiu întrucât „Echipamente electrice şi electronice pentru autovehicule” este în corelaţie cu
alte discipline din planul de învăţământ, studiate anterior: „Electronică analogică”, „Măsurări
electrice şi electronice”, etc.
Studenţii vor primi gratuit, la începutul anului de studiu, cursul în format tipărit.
În plus, ei vor primi şi parola care le va oferi acces la baza de date cu informaţii
arhivate pe sit-ul facultăţii, corespunzătoare acestei discipline.
Pentru a putea descărca şi utiliza materialul electronic, studenţii trebuie să dispună de
un calculator compatibil IBM PC cu conexiune la INTERNET. Facultatea le oferă aceste
facilităţi prin intermediul reţelelor de calculatoare din cadrul laboratoaelor de informatică.

Materialul corespunzător disciplinei „Sisteme cu microprocesoare” este structurat în 8


unităţi de învăţare ( 4 unităţi de învăţare de câte 3 ore fiecare şi 4 unităţi de învăţare de câte 4

11
SISTEME CU MICROPROCESOARE
Introducere
ore fiecare), corespunzătoare celor 14 cursuri de câte 2 ore de la specializarea
Electromecanică zi. Ca urmare, se recomandă cate 2 ore de studiu individual pe săptămână.
Eventuale neclarităţi vor fi lămurite în cadrul şedinţelor de laborator, care sunt corelate
cu unităţile de învăţare.
În plus sunt prevăzute consultaţii periodice, al căror program se va afişa la avizierul
laboratorului.

12
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

Unitatea de învăţare nr. 1

CONCEPTE GENERALE
PRIVIND MICROPROCESOARELE

Cuprins Pagina
Obiectivele unităţii de învăţare nr. 1 14
1.1. Definiţii şi terminologie 14
1.2. Arhitecturile von Neumann şi Harvard 19
1.3. Arhitectura de bază a unui microprocesor 20
1.3.1. Structura standard a microprocesorului 20
1.3.2. Unitatea aritmetică şi logică (ALU) 22
1.3.3. Unitatea de comandă şi control 23
1.3.4. Grupul de registre 25
1.4. Principiul de funcţionare al microprocesorului 29
Lucrare de laborator 30
Test de autoevaluare 30
Lucrare de verificare – unitatea de învăţare nr. 1 31
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 31
Concluzii 32
Bibliografie – unitatea de învăţare nr. 1 32

13
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
OBIECTIVELE unităţii de învăţare nr. 1

Principalele obiective ale Unităţii de învăţare nr. 1 sunt:


• Însuşirea cunoştinţelor referitoare la terminologia utilizată
în lucrările din domeniul microprocesoarelor
• Însuşirea noţiunilor fundamentale referitoare la arhitectura
şi funcţionarea microprocesoarelor

1.1. Definiţii şi terminologie


În cele ce urmează se prezentă câteva definiţii strict necesare pentru înţelegerea
noţiunilor de bază privind termeni şi notaţii utilizate în lucrările din domeniul
microprocesoarelor.
 Circuit integrat - componentă electronică de mici dimensiuni, (cu suprafaţa măsurată în
milimetri pătraţi) ce conţine un număr de tranzistoare elementare interconectate; el poate
avea funcţii cablate sau programate. Circuitele integrate sunt clasificate în mai multe
categorii, în funcţie de densitatea de integrare:
 circuite integrate simple;
 circuite integrate pe scară medie (MSI - Medium Scale Integration);
 circuite integrate pe scară largă (LSI - Large Scale Integration);
 circuite integrate pe scară foarte largă (VLSI - Verry Large Scale Integration), etc.
 Unitate centrală sau Unitate centrală de procesare - acea componentă a unui calculator
care realizează prelucrarea datelor pe baza unui program şi controlul întregului sistem. Se
utilizează frecvent notaţia CPU (Central Processing Unit) ceea ce desemnează de data
aceasta în mod exclusiv un microprocesor.
 Microprocesor - este un circuit integrat VLSI complex care poate efectua operaţii
aritmetice şi logice sub controlul unui program memorat, fiind definit ca unitatea centrală a
unui calculator.
 Microcalculator - sistem de calcul în care unitatea centrală este un microprocesor; un
microcalculator mai cuprinde: blocuri de memorie, circuite pentru transferul informaţiei
(porturi de intrare - ieşire) şi dispozitive periferice - tastatură, monitor, unitate de discuri,
imprimantă etc.

14
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
 Hardware - ansamblu de elemente care compun un calculator (structuri mecanice, cabluri,
cutii, circuite, etc.).
 Software - reprezintă un sistem de programe cu care este dotat un calculator.
 Sistem de operare - totalitatea programelor care permit utilizatorului accesul deplin la
toate resursele sistemului. Conţine programe cu denumiri specifice după funcţiile realizate,
care asigură accesul la echipamentele periferice (tastatură, monitor, unităţi externe de
memorie etc.) organizarea informaţiei sub formă de fişiere şi o gamă largă de operaţii
asupra acestora (deschiderea, închiderea, transferul, afişarea, crearea, ştergerea,
modificarea şi altele). Cele mai răspândite sisteme de operare sunt MS-DOS, WINDOWS
şi LINUX.
 Instrucţiunea - reprezintă cea mai simplă operaţie (comandă) pe care o poate transmite
programatorul către o unitate centrală (care poate fi un microprocesor). Unitatea centrală
poate recunoaşte şi executa numai instrucţiunile codificate pentru care a fost construită;
acestea formează setul de instrucţiuni caracteristic unităţii centrale.
Un şir de instrucţiuni, organizate logic după un algoritm, formează un program; prin
intermediul programului, utilizatorul transmite sistemului de calcul o anumită sarcină
privind prelucrarea datelor (task).
 Memoria - este un şir finit de locaţii numerotate. O locaţie este definită de două entităţi
informaţionale: conţinutul şi adresa.
 Conţinutul este un şir de cifre binare 0 sau 1 (Binary Digit = bit) care poate reprezenta o
dată (un număr sau un caracter în cod binar, o stare, etc.) sau o comandă (instrucţiune).
Numărul de cifre binare dintr-o locaţie reprezintă dimensiunea locaţiei (formatul
memoriei)
 Adresa este numărul de ordine al unei locaţii de memorie; adresa permite identificarea
fiecărei locaţii în şirul ordonat de locaţii ce alcătuiesc memoria unui sistem de calcul.
Structura memoriei organizată pe locaţii, cu delimitarea anumitor zone este numită
"harta memoriei". Se pot evidenţia două astfel de zone:
- Memoria de date (locaţiile conţin "date");
- Memoria de programe (locaţiile conţin instrucţiuni codificate).
Memoria sistemului este organizată sub forma unei matrice, cu liniile având un număr de
celule (biţi), egal cu cel al cuvântului de instrucţiune sau de date, fiecărei linii îi
corespunde, în mod unic, o adresă proprie. Selectarea unei astfel de celule permite accesul
de la microprocesor la această celulă de memorie sau însens invers, sensul transferului de
informaţie fiind indicat de unitatea de comandă şi control.

15
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
Apariţia unei operaţii cu memoria de la o anumită adresă va determina activarea tuturor
celulelor de memorie elementare de la adresa respectivă (de pe linia cu aceeaşi adresă). Prin
intermediul semnalului R/W (citeşte/scrie), unitatea de comandă şi control va indica operaţia
ce se execută, deci sensul fluxului de informaţie (de la microprocesor la memorie, pentru
operaţie de scriere, sau de la memorie la microprocesor, pentru o operaţie de citire).
Microprocesorul poate conţine pe cip atât memorie ROM (eventual programe), cât şi
memorie RAM (de uz general, sau, sub denumirea de registre, celule cu destinaţie specială în
memorarea, decodificarea şi executarea instrucţiunilor, a operaţiilor aritmetice si logice etc.).
O memorie ROM poate fi doar citită; informaţia din ea este permanentă şi nu dispare la
încetarea alimentarii calculatorului. Memoria RAM permite scrierea şi citirea informaţiilor.
Ea este o memorie volatilă (se pierde informaţia din ea, prin oprirea alimentarii circuitului).
 Magistrala - reprezintă legaturi multiple şi complexe între diferitele părţi funcţionale ale
microprocesorului.
Magistralele conectează semnalele de date, adrese, control, ale unei secţiuni, cu
semnalele omologe ale celorlalte secţiuni, constituind calea de legătura dintre ele.
Exista două seturi de magistrale în orice sistem microprocesor:
 magistrale interne (reprezentând canalele de legătura între diversele unităţi funcţionale
din unitatea centrala (CPU) a sistemului);
 magistrale externe (reprezentând caile de comunicaţie între CPU şi componentele
externe acestuia).
Fiecare grup de magistrale poate fi subdivizat în trei categorii, după tipul informaţiei
transferate:
 magistrale de adrese;
 magistrale de date;
 magistrale de control.
O magistrală poate avea mai multe linii, permiţând transferul simultan al unui cuvânt de
informaţie (adresă sau dată), caz în care magistrala se numeşte magistrală paralelă. Există
deasemenea magistrale seriale, pentru care datele sunt transmise multiplexat în timp (un
cuvânt este transmis bit cu bit, pe aceeaşi linie), care sunt, in mod evident, mult mai lente
decât magistralele paralele. Practic, toate magistralele interne ale CPU, cât şi cele externe care
conectează CPU cu memoria, şi cu majoritatea interfeţelor de intrare/ieşire ale sistemului,
sunt organizate ca magistrale paralele. Legaturi seriale se utilizează mai ales pentru
transmiterea datelor la/de la echipamente aflate la distanţă de CPU (terminale, linii telefonice,
etc.).

16
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
Deoarece unitatea centrală nu poate alimenta simultan un număr prea mare de circuite
exterioare (există valori limitate ale curenţilor pe care acesta îi suportă sau generează), este
necesară amplificarea semnalelor de pe magistralele sistemului. Aceasta adaptare a
semnalelor este efectuată cu diferite tipuri de circuite, distingându-se în esenţă următoarele:
 circuite tampon amplificatoare de magistrala (drivere);
 circuite tampon bidirecţionale (buffere bidirecţionale);
 circuite pentru reţinerea datelor (latch).

Magistrala de date este destinată atât transferului unidirecţional de instrucţiuni de la


memorie (citire a programului), cât şi celui bidirecţional, de date între memorie, unitatea
centrală şi/sau interfeţele de intrări/ieşiri (informaţia parcurge magistrala în ambele sensuri,
sau de la procesor la una dintre unităţile externe acestei unităţi, sau de la una dintre aceste
unităţi spre procesor). Direcţia transferului de informaţie este supervizată de către unitatea de
comandă şi control a microprocesorului, prin generarea de semnale specifice (citire sau
scriere). Lungimea cuvântului microprocesorului determină numărul de linii de conexiune din
magistrala de date (8, 16, 32, etc.).

Magistrala de adrese este o magistrală unidirecţionala. Ea vehiculează codul binar


reprezentând locaţia (adresa) datei ce se va utiliza în cadrul operaţiei ce se execută. Astfel, ea
poate selecta adresa celulei de memorie de la care se citeşte o noua instrucţiune sau dată, sau
la care se memorează un rezultat. Multe microprocesoare utilizează magistrala de adrese şi
pentru configurarea adresei echipamentului de intrare - ieşire, selectat la o operaţie de INPUT
sau OUTPUT. Este sarcina unităţii de comandă şi control de a delimita şi indica, prin
generarea de semnale de control specifice, dacă este vorba de o operaţie de citire sau scriere
din memorie sau intrare - ieşire.
Adresabilitatea unui microprocesor este dată de numărul de biţi ai magistralei de adrese.
Un număr uzual de 65536 (64 ko) celule de memorie vor necesita 16 linii de adresă pe această
magistrală. (216=65536). În general, se vor putea adresa 2N celule de memorie prin intermediul
a N linii de adresă.

Magistrala de control furnizează informaţii suplimentare necesare pentru indicarea


operaţiei ce se efectuează. Numărul de semnale de pe aceasta magistrală depinde de numărul
de semnale de control necesare pentru microprocesorul utilizat. Tipice sunt semnalul de ceas
al sistemului (care asigură funcţionarea secvenţiala cu o periodicitate fixă a întregului sistem
microprocesor), semnalele de citire/scriere în memorie, citire/scriere pentru intrare/ieşire din
sistem etc.

17
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
Corelate cu magistrala de adrese, semnalele de pe magistrala de control permit selecţia
unică a echipamentului sau a celulei de memorie căreia/de la care, prin intermediul
magistralei de date, se transmite/preia informaţia, conform operaţiei ce se execută.
Conectarea pe liniile magistralelor, în sensul transferului de informaţie pe magistrală,
este efectuată prin circuitele tampon respective, care sunt selectate (deschise) doar în cazul
adresării circuitului respectiv.

De reţinut !
Microprocesor - este un circuit integrat VLSI complex care poate
efectua operaţii aritmetice şi logice sub controlul unui program memorat,
fiind definit ca unitatea centrală a unui calculator.
Reprezentarea informaţiei se face prin cuvinte de instrucţiuni şi
respectiv cuvinte de date.
Fiecare instrucţiune din programul microprocesorului va fi formată din
unul sau mai multe cuvinte de instrucţiune. Acestea "spun" procesorului
ce are de făcut. Cuvântul de instrucţiune constă din doua părţi:
 codul operaţiei (care indică ce operaţie se va executa);
 operanzii (care indică asupra cui se va efectua operaţia conţinută în
codul operaţiei).
Instrucţiunile sunt memorate în ordinea executării, iar microprocesorul
le citeşte şi le execută secvenţial. În esenţă, se citeşte un cuvânt de
instrucţiune, se decodifică, obţinându-se operanzii, locaţia lor şi se
execută operaţia indicată. Apoi se trece la o nouă instrucţiune etc.
Un şir de instrucţiuni, organizate logic după un algoritm, formează un
program; prin intermediul programului, utilizatorul transmite sistemului
de calcul o anumită sarcină privind prelucrarea datelor (task).
Fiecare cuvânt de instrucţiune sau date are asociat, în mod unic, un
număr care reprezintă adresa sa.
A citi o anumita instrucţiune sau data din memorie va însemna, în mod
practic, a se activa, prin intermediul funcţiilor de control, acea celula de
memorie, a cărei adresă este cea dorită.
Magistralele reprezintă legaturi multiple şi complexe între diferitele părţi
funcţionale ale microprocesorului.

18
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

1.2. Arhitecturile von Neumann şi Harvard


Modul de conectare şi funcţionarea componentelor de bază ale unui sistem de calcul, s-au
bazat şi se bazează încă, în marea majoritate a structurilor utilizate, pe aşa numita arhitectura
de tip von Neumann utilizată practic în exclusivitate la realizarea microprocesoarelor uzuale
(Fig.1.1).

Logica de
Unitate
control
control
Memorie Unitatea aritmetică
Program şi logică (ALU)
şi Date
Unitate intrare/ieşire
(I/O)

Fig. 1.1. Arhitectura Von Neumann

Configuraţiile numerice ce folosesc microprocesoare realizate utilizând structura


corespunzătoare arhitecturii von Neumann nu fac distincţie între memoria pentru program şi
cea pentru date, structura de memorie fiind exterioară microprocesorului şi accesată prin
magistrale unice de adrese şi date, multiplexate sau nu. În această arhitectură unitatea
aritmetică şi logică va executa câte o singură instrucţiune la un moment dat, într-o secvenţă de
program. Deşi mai lentă decât în sistemele în care se execută mai multe instrucţiuni deodată
(procesare paralelă) arhitectura von Neumann este mai simplu de implementat.
Arhitecturile recentelor tipuri de microprocesoare au elemente de prelucrare paralelă, ca
şi în cazul procesoarelor numerice de semnal DSP (Digital Signal Processors), conform cu
aşa numita arhitectură Harvard care prezintă secţiuni de memorie diferite pentru program şi
date şi deci implicit magistrale de date şi adrese separate pentru fiecare secţiune (Fig.1.2).

Logica de
Unitate
control
control
Memorie Unitate intrare/ieşire Memorie
Program (I/O) Date
Unitatea aritmetică
şi logică (ALU)

Fig. 1.2. Arhitectura Harvard


Arhitectura Harvard permite o paralelizare completă a lanţului de citire/decodificare
instrucţiuni respectiv efectuare operaţii de calcul şi transfer al datelor în sistem. Acest mod de
19
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
operare (tip pipeline) conduce la creşteri sensibile ale performanţelor (viteza de procesare)
respectivelor sisteme, faţă de cele “clasice”, realizate în arhitectură von Neumann.

De reţinut !
Arhitectura de tip von Neuman, conţine o singură memorie şi o singură
magistrală pentru transferul datelor din şi dinspre unitatea centrală de
procesare.
Magistrala unică de date şi instrucţiuni este numită magistrală
bidirecţională şi ea oferă anumite avantaje sistemului, din punctul de
vedere al flexibilităţii modului de lucru cu exteriorul. Câteva din aceste
avantaje ale unei magistrale unice de date şi instrucţiuni sunt:
 se foloseşte o memorie unică pentru stocarea datelor şi instrucţiunilor
(memoria principală, externă procesorului). Rezultă simplificarea
UCP din punctul de vedere al automatului de adresare a memoriei şi
al numărului de registre implicate.
 folosirea unei memorii unice, unde se stochează atât date cât şi
instrucţiuni creşte flexibilitatea sistemului, pentru că nu există
restricţii privind adresele de stocare a datelor şi instrucţiunilor în
memoria principală.
Acest mod de organizare are şi dezavantaje, din punctul de vedere al
vitezei de lucru şi din punctul de vedere al unei relative creşteri în
complexitate a unităţii de control, care trebuie să interpreteze în mod
corect cuvintele citite din memorie ca fiind date, sau instrucţiuni.
Arhitectura Harvard prezintă memorii separate de date şi program şi
deci implicit magistrale de date şi adrese separate pentru fiecare tip de
memorie oferind viteză crescută.

1.3. Arhitectura de bază a unui microprocesor


1.3.1. Structura standard a microprocesorului

Deşi există o mare varietate de microprocesoare, produse de diferite firme, cu multe


deosebiri în structura şi tehnologia lor de fabricaţie, toate au o schemă structurală comună,
rezultată din operaţiile de bază pe care le efectuează. Caracteristicile structurale şi funcţionale
comune rezultă din filosofia proiectării microprocesoarelor, ca instrumente complexe pentru

20
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
realizarea unor sisteme numerice flexibile, rapide, puternice şi la un preţ de cost deosebit de
avantajos.
Arhitectura standard a unui microprocesor (Fig.1.3) are blocurile componente:
 unitatea aritmetică şi logică (ALU);
 unitatea de comandă şi control;
 grupul de registre.
Blocurile componente sunt conectate între ele şi înspre/dinspre exterior prin intermediul
magistralelor de date şi de adrese iar accesul la magistrale este realizat de semnalele de
control generate de unitatea de comandă şi control.

Memorie
de
instructiuni
(ROM)
Magistrală Magistrală
externă externă
de date de adrese
Memorie
de
date
n-biţi (RAM) m-biţi

Registre generale
Registrul I/O .. Registrul adrese
.
Mag. internă adrese m-biţi
Mag. internă date n-biţi

Registrul de
instrucţiuni (IR) Numărător de
Registrul indicatori
de condiţii adrese (PC)

... OPCODE Adresă


operand
Unitatea
aritmetică
şi Decodificatorul
logică instrucţiunii (ID)
(ALU)

Unitatea de comandă şi
control TACT
Registru
acumulator

Microprocesor
Fig. 1.3. Arhitectura standard a unui microprocesor

21
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

De reţinut !
Microprocesorul operează în mod secvenţial, determinat de către un
program memorat, format din instrucţiuni.
Majoritatea modelelor de microprocesoare au circuitele logice interne
împărţite în cinci părţi componente principale: unitatea de control;
unitatea aritmetică şi logică (ALU); unitatea de intrare/ieşire (I/O);
memorie internă / registre; magistrale. Uneori, primele două sunt apelate
împreună sub numele unitate centrală de prelucrare, deşi acelaşi termen
este folosit adeseori ca sinonim al întregului procesor. Toate cele cinci
părţi ale microprocesorului interacţionează, unitatea de intrare/ieşire se
află sub controlul unităţii de control, iar operaţiile unităţii de control pot
fi determinate de rezultatele calculelor executate de ALU

1.3.2. Unitatea aritmetică şi logică (ALU)

Unitatea aritmetică şi logică care procesează informaţia realizând operaţii aritmetice şi


logice, fiind un circuit combinaţional, prezintă două intrări şi o ieşire necesitând atât pentru
cuvintele de intrare, cât şi pentru cele de ieşire registre de memorare temporară. Unul din
cuvintele de intrare este preluat de pe magistrala internă de date a microprocesorului unde a
fost depus de către un alt registru sau a fost adus din memoria externă, iar celălalt cuvânt de
intrare se află într-un registru numit registru acumulator, cuvântul rezultat în urma procesării
va fi încărcat tot în registrul acumulator, deci registrul acumulator conţine unul din operanzi
înainte de procesare, precum şi rezultatul în urma procesării.
Comenzile necesare procesării, de exemplu: încărcarea celor doi operanzi,
executarea operaţiei şi încărcarea acumulatorului cu rezultatul procesării
sunt primite de la unitatea de comandă şi control.

De reţinut !
Unitatea aritmetică şi logică execută prelucrarea datelor realizând
următoarele funcţii:
 funcţii aritmetice: adunare, scădere, înmulţire, împărţire;
 funcţii logice: SI, SAU, SAU EXCLUSIV, NU şi complement.
Fiecare funcţie este activată de o instrucţiune corespunzătoare care
furnizează şi operanzii implicaţi în operaţie.

22
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

1.3.3. Unitatea de comandă şi control


Coordonează funcţionarea tuturor unităţilor interne pentru execuţia operaţiilor conţinute
în mod codificat în instrucţiuni.
Funcţiile unităţii de comandă sunt:
 Extragerea instrucţiunii din memoria externă.
Se ''citeste'' instrucţiunea din zona care conţine programul aflat în execuţie. Instrucţiunea
are două zone de informaţie:
 zona de cod, care conţine operaţia caracteristică instrucţiunii;
 zona de date (adresă operanzi).
 Decodificarea instrucţiunii.
Fiecare instrucţiune are ca efect o succesiune specifică de operaţii elementare, numite
microoperaţii. Secvenţa de microoperaţii este generate de unitatea de comandă pe baza
codului instrucţiunii; determinarea acestei secvenţe în funcţie de cod, este numită
''decodificare''.
 Execuţia propriu-zisă constă în activarea succesivă a unităţilor interne pentru efectuarea
operaţiilor din secvenţa corespunzătoare instrucţiunii.
Codul instrucţiunii permite obţinerea tuturor informaţiilor necesare execuţiei operaţiilor
impuse de instrucţiune:
 numărul de octeţi din formatul instrucţiunii;
 tipul operaţiei principale (adunare, scădere, transfer, salt etc.);
 numărul operanzilor implicaţi în operaţie;
 adresa fiecărui operand ( dacă este operand aflat temporar într-un registru intern, se
specifică acest registru; dacă este operand în memorie, se specifică adresa sau cum se
obţine adresa lui).
Fiecare instrucţiune corespunde unei operaţii fundamentale, care, în general se
realizează în mai multe etape (Fig.1.4).
Execuţia unei instrucţiuni este un şir de operaţii elementare:
 starea - corespunde unei perioade de tact (T) şi este durata unei operaţii elementare
(de exemplu, incrementarea unui registru);
 ciclul maşină - conţine 3…5 stări şi corespunde unei etape din execuţia unei
instrucţiuni (de exemplu, citirea unei locaţii de memorie, transferul de date între un
registru intern şi o locaţie de memorie etc.); o instrucţiune conţine 1 - 5 cicluri maşină,
dintre care primul ciclu maşină este de citire memorie (citirea codului instr.).

23
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

Fig. 1.4. Diagramele de timp pentru semnalul de tact şi ciclu maşină

În desfăşurarea în timp a unei instrucţiuni, unitatea de comandă şi control selectează şi


adresează unităţile interne ale microprocesorului care realizează funcţii specifice rolului lor.
Realizarea concretă a unităţii de comandă şi control este specifică fiecărui
tip de microprocesor şi determină multe din performanţele sale.
Ca structură, unitatea de comandă şi control este un automat secvenţial cu
număr finit de stări, care funcţionează pe baza unui microprogram introdus
în procesul de fabricaţie. Acest microprogram nu poate fi modificat de
utilizator şi corespunde setului de instrucţiuni, fiind un interpretor de
instrucţiuni. De aceea, setul de instrucţiuni este fix pentru fiecare tip de
microprocesor.

De reţinut !
Unitatea de control este cea care supervizează funcţionarea corectă a
ansamblului de elemente unite în structura microprocesorului în corelaţie
cu restul microsistemului. Comenzile generate de unitatea de control
rezultă în urma decodificării instrucţiunii, a cererilor de întrerupere
primite de la elementele microsistemului şi a impulsurilor de tact. În
general, unitatea de control este implementată prin microprograme, adică
algoritmul de funcţionare este înscris ca o succesiune de cuvinte într-o
memorie ROM (Read Only Memory).
Pe măsură ce complexitatea microprocesoarelor a crescut, unitatea de
control a devenit tot mai sofisticată.

24
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

1.3.4. Grupul de registre


În componenţa microprocesorului se pot considera două categorii de registre:
 registre speciale;
 registre de uz general.
Registrele speciale numite şi registre de lucru, sau registre interne ale
microprocesorului, au funcţii predefinite specifice în funcţionarea acestuia. Deşi uneori pot fi
setate la valori iniţiale specificate, aceste registre nu sunt accesibile prin program, la execuţia
instrucţiunilor. În această categorie sunt: registrul acumulator, registrul numărător de adrese
al programului, registrul indicatorilor de condiţii, registrul de instrucţiuni, registrul de
adresare a memoriei şi registrul de intrare/ieşire.

 Registrul acumulator – A(Acumulator). Acumulatorul este registrul cel mai


frecvent utilizat, fiind conectat la magistrala internă de date şi la unitatea aritmetică
şi logică. Când se prelucrează două cuvinte, la început un cuvânt se află în
acumulator, iar după prelucrare rezultatul dintre cele două cuvinte este trecut din
unitatea aritmetică şi logică tot în acumulator. De asemenea registrul acumulator
participă la transferul informaţiei între o sursă (locaţie de memorie, port de
intrare/ieşire-I/O) şi o destinaţie (locaţie de memorie, port de intrare/ieşire-I/O).
Transferul are loc în două etape: cuvântul de la sursă este deplasat în acumulator iar
apoi din acumulator este deplasat la destinaţie. Numărul de celule ale acumulatorului
este egal cu lungimea cuvântului prelucrat de microprocesor care în cazul structurii
prezentate este n. Există structuri de microprocesoare care pot conţine mai multe
acumulatoare, existând şi instrucţiuni diferite pentru fiecare din acumulatoare, iar
acumulatoarele pot fi considerate şi împreună pentru a se putea lucra cu cuvinte de
lungime multiplu de n-biţi. Avantajul mai multor acumulatoare rezultă din
posibilitatea de a lucra acumulator la acumulator.

 Registrul numărător de adrese al programului - PC (Program Counter). Programul


ce constă din succesiunea de instrucţiuni ce trebuie executate de microprocesor este
înscris în locaţii de adrese succesive ale unei memorii externe. Adresa locaţiei ce
conţine instrucţiunea care trebuie adusă din memoria externă este înscrisă în registrul
numărător de adrese al programului. Conţinutul de m-biţi al numărătorului de adrese
este automat mărit cu o unitate după ce instrucţiunea a fost adusă din memorie,
pregătindu-se astfel adresa pentru instrucţiunea următoare. Numărătorul de adrese

25
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
este un numărător cu prescriere, rezultă că se pot introduce şi alte valori decât cele
ale numărării în ordine naturală, deci se pot efectua salturi în citirea locaţiilor
memoriei. Prin comanda de RESET (iniţializare) aplicată microprocesorului la
punerea în funcţiune după conectarea tensiunii sau se aplică din exterior, numărătorul
este încărcat cu o adresă fixată de către producător 0000.
 Registrul indicatorilor de condiţii - F(Flag). Reprezintă un grup de bistabile
(fanioane, steguleţe) asamblate sub forma unui registru şi citite simultan vor genera,
împreună cu conţinutul acumulatorului, cuvântul de stare al programului PSW
(Program Status Word). Din starea biţilor registrului F se poate afla dacă rezultatul
operaţiei efectuate este 0 sau nu, dacă el este un număr pozitiv sau negativ, dacă
numărul biţilor din rezultat ce au valoarea 1 este un număr par sau impar etc.
Semnificaţia principalilor biţi indicatori de condiţii (de stare) întâlniţi la majoritatea
microprocesoarelor este:
- Carry (CF), Indicatorul de transport: este utilizat pentru a indica depăşirea
preciziei de lucru a microprocesorului, în urma efectuării unei operaţii aritmetice
(de exemplu, adunarea a două numere a căror sumă depăşeşte dimensiunea
cuvântului de date al procesorului). Rezultatul se va memora în aceste cazuri în
acumulator, cu excepţia bitului cel mai semnificativ, memorat in indicatorul de
transport (carry), utilizat astfel ca o extensie a acumulatorului. Acest bit poate fi
astfel ulterior testat, sau utilizat în operaţii ulterioare ale ALU. Avem:
CF = 1, dacă rezultatul ultimei operaţii în ALU a generat transport;
CF= 0, dacă rezultatul ultimei operaţii în ALU nu a generat transport.
Carry poate fi iniţializat uzual (0 sau 1), prin instrucţiuni specifice ale
microprocesorului. Valoarea sa se va modifica însă, în cursul efectuării de operaţii
în ALU.
- Zero (ZF), Indicatorul de zero: este utilizat pentru a indica faptul că rezultatul
unei operaţii aritmetice sau logice a fost 0 sau nu. Acest bit nu poate fi iniţializat
direct printr-o instrucţiune specifică. Avem:
ZF = 1, dacă s-a obţinut rezultat nul la ultima operaţie aritmetică sau logică;
ZF = 0, dacă nu s-a obţinut rezultat nul la ultima operaţie aritmetică sau logică.
- Paritate (PF, Indicatorul de paritate: este utilizat pentru a indica tipul sumei
modulo 2 a rezultatului ultimei operaţii efectuate în ALU. Astfel:
PF = 0, dacă rezultatul are un număr impar de biţi cu valoarea 1;
PF = 1, dacă rezultatul are un număr par de biţi cu valoarea 1.

26
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
Acest bit este uzual testat în cadrul programelor de verificare a corectitudinii
informaţiilor codificate, sau la transmisii de date.
- Semn (SF), Indicatorul de semn: este utilizat pentru a indica semnul rezultatului
unei operaţii efectuate în ALU. Astfel:
SF = 0, dacă s-a obţinut un rezultat pozitiv (sau zero);
SF = 1, dacă s-a obţinut un rezultat negativ.
Semnul rezultatului este decis în funcţie de valoarea celui mai semnificativ bit al
sau, considerat ca bit de semn, numerele fiind tratate ca numere reprezentate în
complement faţă de doi.
Se pot adăuga şi alţi biţi de condiţie care să reflecte dacă anumite funcţiuni
sau stări hardware ale microprocesorului sunt îndeplinite sau nu, iar unele
microprocesoare posedă instrucţiuni ce pot înscrie anumiţi biţi de condiţie.

 Registrul de instrucţiuni - IR (Instruction Register). După ce un cuvânt instrucţiune


este adus din memorie prin registrul I/O pe magistrala internă de date a
microprocesorului, acesta va fi înscris în registrul de instrucţiuni care păstrează
instrucţiunea pe durata executării acesteia. Instrucţiunea este divizată este divizată în
două câmpuri: câmpul codului operaţiei OPCODE şi câmpul operandului (adresa
operandului). Biţii din codul operaţiei se aplică decodificatorului instrucţiunii care,
apoi prin unitatea de control, va genera toate semnalele de control necesare execuţiei
instrucţiunii reprezentată de codul operaţiei. Câmpul adresa operandului se aplică
registrului de adresă pentru a forma adresa din memorie unde se află operandul
necesar operaţiei specificate de OPCODE.

 Registrul de adresare a memoriei. Este conectat la magistrala externă de adresare a


memoriei care transferă conţinutul registrului numărător de adrese ce conţine un
cuvânt binar de m biţi şi care reprezintă adresa unei locaţii de memorie sau adresa unui
port I/O. Încărcarea registrului de adrese se poate face nu numai de la numărătorul de
adrese ci şi de la alte elemente ale microprocesorului, rezultând că pe magistrala de
adrese se pot aplica şi cuvinte de adresă diferite de conţinutul registrului numărător de
adresă.

 Registrul de intrare/ieşire. Realizează legătura între magistrala de date interioară a


microprocesorului şi magistrala de date exterioară, deci vehiculează cuvintele de date
şi instrucţiuni.

27
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
Registrele de uz general sunt adresabile de către utilizator, şi pot fi folosite pentru
stocarea şi manevrarea datelor programului - operanzi, date, adrese de memorie conţinând
date utile programului, etc. Uzual, aceste registre conţin informaţiile cele mai utilizate de
către program. Aceasta conduce la o sporire a vitezei de lucru globale a sistemului, deoarece
timpii de acces la registrele interne sunt sensibil mai reduşi decât timpii de acces la memoria
externa a sistemului. Aceste registre sunt conectate atât la alte registre interne ale
microprocesorului, cât şi la magistralele externe, prin intermediul magistralelor interne şi al
circuitelor tampon.
În cazul cel mai general microprocesorul poate conţine, atât memorie ROM
şi RAM, pe lângă, registre (fizic tot memorie RAM). Registrele alcătuiesc un
element cu totul aparte faţă de memorie, din punctul de vedere al
programării microprocesorului. Astfel, datele memorate de către registre
pot fi manipulate, modificate, operate în ALU, prin instrucţiuni specifice de
operare cu registrele, sau coordonat de către secţiunea de CONTROL.
Totodată, aceste instrucţiuni sunt cele mai rapide. O operaţie tipică cu un
registru durează câteva zeci de nanosecunde, faţă de sute de nanosecunde
necesare atunci când se operează cu memoria externă.

De reţinut !
Se pot considera două categorii de registre ale unui microprocesor:
 registre speciale au funcţii predefinite specifice în funcţionarea
microprocesorului; aceste registre nu sunt accesibile prin program, la
execuţia instrucţiunilor.
 registre de uz general sunt utilizate pentru manipularea şi memorarea
temporară a datelor. În general, orice registru de acest tip este
accesibil programatorului, prin instrucţiuni specifice, fiind posibile:
- încărcarea cu un cuvânt dorit de date, deplasarea informaţiei între
registre, sau între registre şi memorie, rotirea conţinutului
acestora;
- tratarea unei perechi de registre ca reprezentând date pe cuvinte
cu lungime dublă (la registre de 8 biţi, perechi de 16 biţi) şi
posibilitatea operării cu acestea.

28
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

1.4. Principiu de funcţionare al microprocesorului


La un moment dat numărătorul de adrese PC conţine adresa la care în memorie se află
instrucţiunea ce trebuie să fie executată. Acest cuvânt de adresă este pus pe magistrala de
adrese şi aplicat memoriei de programe care trimite instrucţiunea în registrul de instrucţiuni şi
în acelaşi timp unitatea de control incrementează numărătorul de adrese pentru instrucţiunea
următoare. Există şi anumite instrucţiuni de salt care modifică ordinea de numărare naturală
din numărătorul de adrese caz în care se prescrie adresa la care se face saltul pentru
instrucţiunea următoare de executat.
Execuţia unei instrucţiuni (ciclu instrucţiune) se descompune în:
 etapa de aducere a instrucţiunii din memorie (fetch) identic ca procedură pentru orice
instrucţiune;
 etapa de execuţie a instrucţiunii care necesită un timp variabil în funcţie de complexitatea
instrucţiunii.
Biţi din câmpul de cod al instrucţiunii (operaţiei) denumit OPCODE se aplică
decodificatorului de instrucţiuni - ID (Instruction Decoder) care, prin unitatea de control, va
genera semnalele de control asociate execuţiei operaţiei respective.
Câmpul cu adresa operandului este aplicat registrului de adrese pentru localizarea
adresei din memorie de unde trebuie luat operandul necesar operaţiei în curs de execuţie.
În executarea unei instrucţiuni unitatea de control primeşte, pe lângă ieşirile
decodificatorului, la aplicarea câmpului OPCODE, şi impulsuri de ceas (tact).
O instrucţiune este constituită din mai mulţi octeţi, ceea ce rezultă că desfăşurarea
ciclului instrucţiune poate necesita unul sau mai multe apeluri la memorie sau la un dispozitiv
intrare/ieşire. Fiecare apel la memorie sau la un dispozitiv intrare/ieşire al unei instrucţiuni
defineşte un interval de timp numit ciclu maşină (Machine Cycle), deci un ciclu instrucţiune
cuprinde unul sau mai multe cicluri maşină. Fiecare ciclu maşină se desfăşoară în mai multe
perioade de tact, o perioadă constituind o stare (State).
Impulsurile de tact care sincronizează activitatea unităţii de comandă şi control sunt
generate de un circuit specializat inclus sau nu în microprocesor numit generator de tact
(Clock Driver).
Unitatea de comandă şi control generează la rândul ei un semnal de sincronizare
(SYNCRO) corelat cu tactul sistem, care permite sincronizarea blocurilor exterioare
microprocesorului (memorie, periferice) cu etapele consecutive din derularea unei
instrucţiuni. Cunoscând numărul de stări necesare acesteia şi frecvenţa tactului se poate

29
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
determina durata în unităţi de timp a realizării instrucţiunii respective.
Pentru scurtarea timpului de realizare a instrucţiunii, ciclurile instrucţiune se suprapun.
Deoarece etapele de transfer pentru fetch şi pentru execuţie nu se suprapun se poate realiza în
paralel (pipeline) executarea instrucţiunii curente cu aducerea instrucţiunii următoare. Această
metodă (tip conductă) este curent folosită la microprocesoarele moderne de mare viteză
extinzându-se paralelismul la grupuri de instrucţiuni care sunt aduse, în timp ce alte grupuri
sunt executate.

Lucrare de laborator
Lucrarea aferentă acestei unităţi de învăţare se intitulează
„INTRODUCERE ÎN SISTEME CU MICROPROCESOARE
Descriere şi funcţionare - Hardware”.
Obiectivele laboratorului sunt:
 Să cunoască resursele hardware ale microsistemului;
 Să înţeleagă modul de lucru cu microsistemul;
 Să înveţe să folosească microsistemul pentru a realiza programe de
operare cu acesta.
Studenţii utilizează un microsistem experimental Sistem cu
Microprocesor 32 biţi - modul Z3EV
Microsistemul de învăţare cu microprocesor pe 32 biţi este un sistem
didactic cu microprocesor, bazat pe procesorul Intel 80386EX, care
acoperă toată problematica apărută în timpul studierii sistemelor cu
microprocesor
Microsistemul conţine toate componentele tipice necesare studierii unui
astfel de sistem: microprocesor, memorie RAM şi EPROM, tastatură şi
display cu cristale lichide, interfaţă paralelă şi serială, intrări şi ieşiri
analogice

Test de autoevaluare
1. Ce este hardware-ul? Dar software-ul?
2. Ce este microprocesorul? Dar microcalculatorul?
3. Ce înseamnă memoria şi care sunt tipurile de memorie dintr-un
sistem cu microprocesor?

30
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

4. Ce înseamnă magistrală (bus) şi care sunt magistralele dintr-un sistem


cu microprocesor?
5. Care sunt componentele principale ale arhitecturii von Neumann?
6. Care sunt componentele principale ale arhitecturii Harvard?
7. Care sunt părţile componente ale unui microprocesor?
8. Ce rol are unitatea aritmetică şi logică în cadrul unui microprocesor?
9. Ce rol are unitatea de commandă şi control în cadrul unui
microprocesor?
10. Care sunt şi ce rol îndeplinesc registrele în cadrul unui
microprocesor?
11. Care sunt indicatorii de condiţii ai unui microprocesor?
12. Cum funcţionează un microprocesor?

Lucrare de verificare la Unitatea de învăţare 1


Această unitate de învăţare se va regăsi în lista de subiecte pentru
examen prin următoarele subiecte:
1. Definiţii şi terminologie utilizate în sisteme cu microprocesoare.
2. Arhitecturile von Neumann şi Harvard: scheme bloc, principia de
funcţionare.
3. Structura standard a microprocesorului: schemă bloc, rolul blocurilor
componente.
4. Principiul de funcţionare al microprocesorului.

Răspunsuri şi comentarii la întrebările din testul de


autoevaluare

Răspunsurile la întrebările din testul de evaluare se găsesc în textul


unităţii de învăţare.

31
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele

Concluzii
Microprocesoarele reprezintă unităţi centrale integrate într-un singur
circuit integrat pe scară foarte largă (VLSI – Very Large Scale
Integration), care au căpătat o largă dezvoltare o dată cu dezvoltarea
tehnologiei de integrare şi cu răspândirea utilizării sistemelor cu
microprocesor în cele mai diverse domenii de activitate.

Bibliografie

1. Dobriceanu Mircea; Sisteme cu microprocesoare; Notiţe de curs,


Tipografia Universităţii din Craiova, 2012 şi format electronic
postat pe http://www.em.ucv.ro
2. Dobriceanu Mircea; Sisteme de achiziţie şi microprocesoare,
Editura Universitaria Craiova, 2003, p.304, ISBN 973-8043-289-8

32
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale

Unitatea de învăţare nr. 2

MICROPROCESOARELE INTEL 80x86:


ARHITECTURI ŞI MAGISTRALE

Cuprins Pagina
Obiectivele unităţii de învăţare nr. 2 34
2.1. Arhitectura INTEL 80x86 34
2.2. Magistrale 40
2.2.1. Aspecte generale 40
2.2.2. Magistrala de date 41
2.2.3. Magistrala de adrese 42
2.2.4. Magistrala de control 43
Lucrare de laborator 44
Test de autoevaluare 45
Lucrare de verificare – unitatea de învăţare nr. 2 45
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 45
Concluzii 45
Bibliografie – unitatea de învăţare nr. 2 46

33
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
OBIECTIVELE unităţii de învăţare nr. 2

Principalele obiective ale Unităţii de învăţare nr. 2 sunt:


• Cunoaşterea arhitecturilor privind microprocesoarele
80x86;
• Cunoaşterea şi diferenţierea magistralelor pentru
microprocesoarele 80x86;

2.1. Arhitectură INTEL 80x86

Microprocesoarele INTEL 80x86 au evoluat continuu (Tab. 2.1), cea ce a dus la apariţia
a noi membrii care au contribuit la creşterea performanţelor hardware şi software a acestor
componente. Principalul avantaj al acestor microprocesoare costă în păstrarea compatibilităţii
software între diferitele generaţii începând cu microprocesorul 8086, adică un program scris
pentru o versiune mai veche de procesor se poate executa pe orice versiune ulterioară fără
modificări, ceea ce a permis dezvoltarea continuă a aplicaţiilor pentru aceste microprocesoare.

Tab.2.1. Evoluţia microprocesoarelor INTEL 80x86


Tip Anul Latime Laţime Spaţiu de Alte caracteristici
lansării registre mag. de adresare
(biţi) date/ad fizic/virt.
rese
4004 1971 4 4 4KB 45 instrucţiuni, tehnologie PMOS,
primul dispozitiv programabil folosit în
calculatoare
8008 1972 8 8 16KB 45 instrucţiuni, tehnologie PMOS, lent
8080 1973 8 12 64KB ciclul maşină 2 microsecunde, 500000
instrucţiuni-secundă, de 10 ori mai rapid
decât 8008, tehnologie NMOS, folosit ca
microprocesor pentru
microcolculatoarele anilor 70, necesită 3
tensiuni de alimentare
8085 1975 8 12 64KB ciclul maşină,3 microsecunde, 246
instrucţiuni, doar o sursă de alimentare
de 5 V, vândut în 100 mil de exemplare
8086 1978 16 16/20 1Mo primul procesor pe 16 biţi, ciclul maşină
400 nanosecunde, memorie cache pentru
instrucţiuni 6 octeţi, mai multe registre
şi instrucţiuni adiţionale, 0,33
MIPS(milioane de instrucţiuni pe
secundă), tehnologie 3 microni
34
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
8088 1980 16 8/20 1Mo procesorul folosit pentru primul IBM –
PC, memorie cache pentru instrucţiuni 4
octeţi
80186 1982 16 16/20 1Mo 8086 cu suport I/O pe cip, conţine
hardware de tipul numărătoarelor
programabile, controler de întreruperi,
etc., nu a fost folosit în PC-uri, ideal
pentru sistemele care necesită minum de
hardware
80286 1983 16 16/24 16Mo procesor pentru IBM-PC,varianta AT,
puţine instrucţiuni pentru accesarea
celor 15 MB suplimentari, ciclul maşină
în 250 ns, axat pe facilităţile
implementării multiprocesării
(multitasking), 0,9 MIPS, tehnologie 1,5
microni
80386 1986 32 32/32 4Go/64GB primul procesor pe 32 de biti,
înbunătăţirea lucrului cu pagini virtuale
de memorie, include circuite pentru
managementul memoriei interne şi
suplimentare, paginarea memoriei şi
controlul permisiunilor I/O, 5 MIPS,
tehnologie 1 micron
80486 1989 32 32/32 4Go/64GB incorporeaza coprocesorul matematic şi
unitatea de management a memoriei,
memorie cache 8KB încorporată,
aproape jumate din instrucţiuni pot fi
executate într-un ciclu maşină faţa de
două cicluri la 80386, 20 MIPS,
tehnologie 0,8 microni
80586 1992 32 64/32 4Go/64GB arhitectura pipeline superscalara,
Pentium versiuni pe 120 şi 133 MHz, două unităţi
pentru prelucrarea numerelor întregi,
memorie cache 16 KB (câte 8 KB pentru
fiecare unitate), 133 MIPS, , tehnologie
0,5 microni
80586 1995 32 64/36 4Go/64GB primul reprezentant al familiei P6 –
Pentium realizează execuţia dinamică a
Pro instrucţiunilor, memorie cache L1 - 16
KB (câte 8 KB pentru fiecare unitate),
256 KB memorie cache L2, foloseşte
trei motoare de execuţie, 200 MIPS,
tehnologie 0,35 microni
80686 1997 32 64/36 4Go/64GB facilităţi suplimentare de control al
Pentium consumului, memorie cache L1 - 32 KB
II (câte 16 KB pentru fiecare unitate), 512
KB memorie cache L2 (133 MHz),
folosit pentru aplicaţii de nivel înalt, 400
MIPS, , tehnologie 0,25 microni
80686 1999 32 64/36 4Go/64GB două magistrale independente (poate
Pentium accesa simultan memoria cache L2 şi
III memoria), 256 KB memorie cache L2
integrată, frecvenţa de tact până la 1GB,
550 MIPS, , tehnologie 0,18 microni

35
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
80786 2002 64 64/36 64GB frecvenţa de tact până la 3,46GB,
Pentium suportă Hyper-Threading,
IV 1MB/512KB/256KB L2 memorie cache,
(Itanium) specializat pentru sreaming video, jocuri
şi aplicaţii DVD, 1500000 MIPS,
tehnologie 0,18 microni
80886 2004 64 64/36 125000000 MIPS, tehnologie 0,13
Pentium microni, tehnologia pipeline, frecvenţă
IV de lucru foarte mare, SSE3, design
(Nortwoo VLIW cu emulator x86 , controler de
d) memorie on-die
80886 2006 64 64/40 1-4 nuclee, +125000000 MIPS,
Core 2 tehnologie 0,09-0,065 microni, 2x1-
4MB memorie cache L2, frecvenţă 2,66-
3,6 GHz, cu 33% mai multe instrucţiuni
pe ciclu la aceeaşi frecvenţă, mai multe
instrucţiuni executate simultan, controlul
consumului, advanced smart cache,
smart memory acces, advanced digital
media boost,
80986 2007 64 64/48 +125000000 MIPS, tehnologie 0,045
Dual Core microni, mnemorie cache 2-6MB, 3-4
MB L3 cache, structură monolitică
quad-core, SSE4a, HyperTransport 3
sau QuickPath, controler memorie
integrat, on-die L3 cache
I5 2008 64 64/48 3-8MB L3 cache, 2sau 4 nuclee, Out-of-
order (executarea intrucţiunilor într-o
ordine dictată de introducerea datelor,
care duce la creşterea vitezei),
superscalar, 64-bit (integer
CPU), hardware-based encryption,
consum redus de energie,
adaptive power management
I7 2009 64 64/48 3-8MB L3 cache, 2, 4 sau 6 nuclee,
tehnologie 0,045sau 0,032 microni,
magistrale QPI 3xDDR3, DMI, FDI,
PCI-e 2xDDR3
Sandy 2011 64 64/48 3-17 MB cache (i3-i7), Direct Media
Bridge Interface, integrated GPU, 2-6 nuclee,
design modular
Intel 2013 Very wide vector unit, instrucţiuni
Larabee LRBni (8× 64-bit)
Intel 2014 FMA3 instructions, DDR4
Haswell

Compatibilitatea software între diferitele generaţii este necesară din mai multe
considerente:
 programele scrise pentru o anumită versiune de procesor pot fi reutilizate pentru versiunile
mai noi; firmele de software pot să investeasca mai mult pentru dezvoltarea unui program,
bazându-se pe păstrarea compatibilităţii;

36
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
 programatorii sunt familiarizaţi cu o structură hardware relativ stabilă; modificările
hardware se menţin pe cât posibil transparente pentru programatori şi vizează mai ales
aspecte de performaţă (ex: execuţia mai rapidă a instrucţiunilor).

Se prezintă arhitectura de bază a familiei de microprocesoare Intel 80x86 (Fig.2.1),


procesorul I8086 (primul lansat din familie) care conţine două unităţi funcţionale autonome:
 unitatea de execuţie (EU – Execution Unit) care efectuează execuţia instrucţiunilor;
 unitatea de interfaţă cu magistralele externe (BIU – Bus Interface Unit) extrage
instrucţiunile, citeşte operanzii şi scrie rezultatele în memorie.

Unitatea de execuţie (EU) Unitatea de interfaţă (BIU)

Fig. 2.1. Arhitectura microprocesorului INTEL 8086

 Unitatea de interfaţă cu magistralele (BIU) realizează conectarea microprocesorului cu


exteriorul prin intermediul magistralelor de adrese (20 de linii) şi de date (16 linii). De
asemenea, unitatea de interfaţă generează semnalele de comandă pentru realizarea
operaţiile de citire şi scriere cu memoria sau cu porturile. Unitatea de interfaţă realizează
extragerea în avans a instrucţiunilor din memorie, pe care le stochează într-un fişier de
instrucţiuni care este de fapt o listă de tip FIFO (First In First Out). Dacă în acest fişier sunt
cel puţin două locaţii libere şi unitatea de execuţie nu solicită transfer de operanzi cu

37
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
exteriorul, unitatea de interfaţă va iniţia un ciclu maşină de extragere în avans a unei
instrucţiuni din memorie, de la adresa următoare. Se asigură astfel un important câştig de
timp, prin suprapunerea execuţiei cu extragerea instrucţiunilor, operaţie care necesită timp
de acces la memorie şi timp de transfer. Instrucţiunile de salt pot modifica succesiunea
normală prin comutarea execuţiei la o adresă ''de salt''; în această situaţie, unitatea de
interfaţă iniţializează fişierul prin ştergerea instrucţiunilor existente şi încărcarea lui cu o
nouă secvenţă de instrucţiuni extrase începând cu adresa de salt. Dacă în timpul execuţiei
unei instrucţiuni unitatea EU solicită un operand din memorie, unitatea de interfaţă
calculează adresa fizică (20 de biţi) în funcţie de modul de adresare comandat, utilizând
registrele proprii şi unitatea aritmetică proprie şi generează semnalele de comandă pentru
transferul operandului către unitatea de execuţie.
 Unitatea de execuţie (EU) extrage succesiv instrucţiunile din registrul de instrucţiuni, le
decodifică pe baza unui microprogram rezident şi le execută prin intermediul registrelor de
uz general şi unităţii aritmetice si logice. Dacă pentru execuţia unei instrucţiuni este
necesar accesul la memorie sau la porturi I/O, unitatea de execuţie transmite către unitatea
de interfaţă o adresă de 16 biţi (adresă efectivă sau offset) ce va fi utilizată pentru operaţiile
de transfer. Unitatea de execuţie dispune de un bloc de comandă care coordonează
funcţionarea unităţii. În acest bloc există o memorie ROM în care este stocat microcodul
de interpretare şi execuţie pentru fiecare instrucţiune.

Ulterior funcţionalitatea unităţilor EU şi BIU a fost divizată pe mai multe unităţi şi s-au
adăugat altele ca de exemplu: unitatea de decodificare a instrucţiunilor, unitatea de
segmentare şi de paginare, unitatea de management a memoriei cache şi procesorul de virgulă
flotantă (Fig.2.2).
Procesorul 80386 a fost primul din cadrul familiei 80x86 care a utilizat o formă de
prelucrare paralelă. Arhitectura acestui procesor cuprinde un număr de şase unităţi care
funcţionează în paralel. Acestea sunt următoarele:
 Unitatea de interfaţă cu magistrala, care realizează accesul la memorie şi la dispozitivele de
I/E;
 Unitatea de încărcare a instrucţiunilor, care primeşte codul instrucţiunilor de la unitatea de
interfaţă cu magistrala şi le depune într-o coadă de 16 octeţi;
 Unitatea de decodificare a instrucţiunilor, care decodifică codul obiect al instrucţiunilor şi
generează un microcod pentru execuţia acestora;
 Unitatea de execuţie, care execută microcodul corespunzător fiecărei instrucţiuni;

38
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
 Unitatea de segmentare, care translatează adresele logice în adrese liniare şi efectuează
testele necesare protecţiei;
 Unitatea de paginare, care translatează adresele liniare în adrese fizice, efectuează testele
necesare protecţiei paginilor de memorie şi conţine o memorie cache cu informaţii despre
până la 32 de pagini cel mai recent accesate.

Fig. 2.2. Arhitectura microprocesorului INTEL 80386

Structura hardware generală a unui sistem cu microprocesor se bazează pe o arhitectură


von Neumann, (Fig. 2.1).
Memorie

CPU Magistrala sistem

Dispozitive
I/O

Fig. 2.1. Structura de principiu a arhitecturii Intel 80x86

O arhitectură von Neumann are trei componente principale:


 unitatea centrală - CPU (Central Processing Unit) conţinând elementele de calcule
aritmetice, logice şi funcţiile de control;
39
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
 memoria (RAM - pentru citire / scriere, şi ROM - doar citire); ;
 dispozitivele de intrare/ieşire - pentru controlul perifericelor.
Cele trei componente sunt interconectate prin intermediul magistralei de sistem (System Bus).
În cazul arhitecturii von Neumann toate acţiunile au loc la nivelul unităţii centrale
(CPU), toate calculele se efectuează aici, datele şi instrucţiunile stau în memorie până când
unitatea centrală are nevoie de ele. Pentru unitatea centrală, dispozitivele I/O sunt similare
memoriei pentru că ea poate memora (scrie) date pe un dispozitiv de ieşire sau poate citi date
de pe un dispozitiv de intrare. Singura diferenţă aparentă în cadrul familiei Intel 80x86 este
asocierea acestora cu cea ce există în exteriorul sistemului (lumea exterioară).

De reţinut !
Primul procesor lansat INTEL 8086 conţine două unităţi funcţionale
autonome: unitatea de executie (EU – Execution Unit) şi unitatea de
interfaţare a magistralei (BIU – Bus Interface Unit); ulterior
funcţionalitatea acestor unităţi a fost divizată pe mai multe unităţi şi s-au
adăugat altele ca de exemplu: unitatea de decodificare a instrucţiunilor,
unitatea de segmentare şi de paginare, unitatea de management a
memoriei cache şi procesorul de virgulă flotantă. Din punct de vedere al
programatorului această divizare pe unităţi este mai puţin vizibilă; în
schimb sunt vizibile urmatoarele componente: registrele generale,
registrele de adresare, registrele speciale, magistralele interne de date şi
adrese, unităţile aritmetico-logice şi altele.

2.2. Magistrale
2.2.1. Aspecte generale

Magistralele reprezintă legaturi multiple şi complexe între diferitele părţi funcţionale ale
microprocesorului.
Microprocesoarele INTEL 80x86 prezintă trei magistrale majore:
 magistrala de date;
 magistrala de adrese;
 magistrala de control.

40
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
Aceste magistrale sunt în general diferite de la un procesor la altul, ele fiind
clasificate după natura informaţiei vehiculate. De exemplu implementarea
magistralelor de date este diferită la 8088 comparativ cu 80386, dar în
ambele cazuri se vehiculează date între unitatea centrala, memorie şi
dispozitivele I/O.
Din punct de vedere electric, nivelele logice implicate pentru componentele tipice
conectate la aceste magistrale în cazul lui 80x86, sunt compatibile TTL.

2.2.2. Magistrala de date

Magistrala de date (Data Bus) are dimensiunea (numărul de linii, care reprezintă
”lăţimea” magistralei) diferită în cadrul familiei 80x86, ea definind într-un fel şi "mărimea"
procesorului. Într-un sistem 80x86, magistrala de date poate avea 8, 16, 32 sau 64 biţi (linii de
date):
 procesoarele 8088 şi 80188 au magistrala de date de 8 biţi;
 procesoarele 8086, 80186, 80286 si 80386SX au o magistrala de 16 biţi;
 procesoarele 80386DX, 80486 şi Pentium Overdrive au magistrala date de 32 biţi
 procesoarele Pentium, Pentium Pro, Pentium II, Pentium III, şi Pentium IV au magistrala
de date de 64 biţi (variantele ulterioare au magistrale mai mari).
Existenţa unei magistrale de 8 biţi nu înseamnă că un procesor este limitat doar la un tip
de date de 8 biţi (adică un octet sau un byte). Înseamnă de fapt ca procesorul poate accesa
doar un octet într-un ciclu de memorie (în cazul MVN). Astfel cei 8 biţi ai magistralei de date
la un 8088 pot transmite doar jumătate din informaţie în unitatea de timp (ciclu de memorie)
comparativ cu magistrala de date de 16 biţi de la 8086. Aceste este motivul pentru care
procesoarele cu o magistrală de date de 16 biţi sunt în mod natural mai rapide decât cele cu o
magistrală de 8 biţi.
Dimensiunea magistralei de date afectează performanţele sistemului mai mult decât
dimensiunea oricărei alte magistrale.
Legat tot de "mărimea" procesorului (care poate fi 8, 16, 32 sau 64 biţi) una din
modalităţile de definire consideră că ea este dată de dimensiunea celui mai mare registru
întreg de uz general al unităţii centrale. Astfel 8088 deşi are o magistrală de date de 8 biţi este
un procesor de 16 biţi, iar Pentium cu o magistrală de date de 64 de biţi este un procesor de 32
de biţi. Trebuie făcută distincţia între registru întreg, respectiv virgulă fixă, pentru a nu lua în
considerare registrele unităţii de prelucrare în virgula mobilă (FPU), atunci când ea există,
registrele care pot avea o dimensiune mai mare.
41
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
Deşi este evident posibil să prelucrăm şi date pe 12 biţi cu un 80x86, formatul preferat
este cel de 16 biţi deoarece oricum procesorul preia şi manipulează 16 biţi de date, preluarea
făcându-se întotdeauna în grupe de 8 biţi. Astfel manipularea datelor în formate multiplu de 8
biţi este întotdeauna cea mai eficientă. Deşi procesoarele familiei 80x86 cu magistrale de date
de 16, 32 sau 64 de biţi pot prelucra date cu dimensiuni până la acelea ale magistralei, ele pot
accesa şi unităţi mai mici de 8, 16 sau 32. Orice, se poate face cu o magistrală mai mică se
poate face şi cu una mai mare diferind doar timpul în care se accesează datele.

De reţinut !
Magistrala de date este utilizată de CPU pentru a citi şi scrie date de la
memorie şi porturile I/O.
Dimensiunea magistralei de date afectează performanţele sistemului mai
mult decât dimensiunea oricărei alte magistrale.
Magistrala de date este bidirecţională: transferă date între componentele
sistemului.

2.2.3. Magistrala de adrese

Magistrala de adrese (Address Bus) este cea prin intermediul căreia se diferenţiază
locaţiile de memorie sau dispozitivele I/O în cazul unui transfer de date, asociindu-le acestora
o adresă unică. Când doreşte să acceseze o locaţie de memorie sau un anumit dispozitiv I/O,
procesorul plasează pe magistrala de adrese o valoare (o adresă), circuitele asociate memoriei
sau dispozitivelor I/O recunosc această adresă şi fac ca acestea să citească informaţia de pe
magistrala de date sau să plaseze informaţia pe aceiaşi magistrală. Folosind n linii de adresă
(magistrala de adresă de n biţi) procesorul poate furniza 2n valori distincte ale adresei.
Primii membrii ai familiei 80x86, 8086 şi 8088 au magistrale de adrese de 20 biţi, astfel
încât spaţiul de adresă are 220 = 1.048.576 locaţii de memorie distincte, un spaţiu de adrese
limitat conform cerinţelor actuale. Acest dezavantaj a fost corectat la variantele ulterioare
după cum este prezentat în tabelul 2.2.

Tab. 2. 2 - Corelaţia dimensiunii memoriei adresabilă cu tipul procesorului


Procesor Linii Adrese Memorie maxim adresabilă
8088 20 1,048,576 1M
8086 20 1,048,576 1M
80188 20 1,048,576 1M
80186 20 1,048,576 1M
80286 24 16,777,216 16M

42
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
80386SX 24 16,777,216 16M
80386DX 32 4,294,976,296 4G
80486 32 4,294,976,296 4G
Pentium 32 4,294,976,296 4G
Pentium Pro 36 68,719,476,736 64G
Pentium II 36 68,719,476,736 64G
Pentium III 36 68,719,476,736 64G

De reţinut !
Magistrala de adrese este utilizată de CPU pentru a indica adresa locaţiei
de memorie care va fi citită sau scrisă. Numărul locaţiilor de memorie
care pot fi apelate de CPU depinde de numărul liniilor de adresă
Magistrala de adrese este unidirecţională: preia semnale de la
microprocesor şi le trimite mai departe către memorie şi porturile I/O.

2.2.4. Magistrala de control

Magistrala de control (Control Bus) reprezintă un set variat de semnale prin care
procesorul comunică cu restul sistemului.
În primul rând trebuie să existe semnale care să stabilească sensul transferului de date
de la procesor (scriere –Write) sau către procesor (citire - Read), astfel există două linii de
semnal Read şi Write care stabilesc sensul transferului de date. În afară de acestea mai există
ceasuri de sistem, linii de întrerupere, de stare şi altele.
Componenţa acestei magistrale este diferită în cadrul familiei dar anumite linii de
control sunt comune.
Semnalele Read şi Write mai sus menţionate controlează deci sensul accesului pe
magistrala de date, ele fiind active în "0" şi mutual exclusive.
Semnalele de tip activare byte/octet, respectiv semnalele de tip Byte Enable, permit
procesoarelor cu magistrale de date de 16, 32 sau 64 biţi să acceseze date cu dimensiuni mai
mici decât magistrala.
Familia 80x86 are două spaţii distincte de adresă: pentru memorie şi pentru
dispozitivele I/O.
În timp ce magistrala de adrese pentru memorie are dimensiuni diferite, cea pentru I/O
are întotdeauna 16 biţi, permiţând accesarea a 65.536 locaţii sau porturi I/O diferite, un număr
mai mult decât suficient.
Deşi familia 80x86 suportă două spaţii de adresă diferite, nu există două magistrale de

43
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale
adrese separate pentru memorie şi I/O. Se utilizează aceiaşi magistrală de adrese dar se
folosesc linii de control diferite pentru Read şi Write din spaţiul de memorie al dispozitivelor
I/O, acestea fiind active tot în "0" şi mutual exclusive. Când aceste semnale sunt active, sunt
luaţi în considerare numai cei mai puţin semnificativi 16 biţi ai magistralei de adrese.
Aceste semnale sunt la rândul lor mutual exclusive cu cele pentru accesarea memoriei.

De reţinut !
Magistrala de control permite microprocesorului să indice memoriei şi
dispozitivelor periferice operaţia curentă.
Semnale curente de control sunt: citirea memoriei, scrierea memoriei,
citirea I/O, scrierea I/O.
Magistrala de control este bidirecţională: preia şi transmite semnale de
control şi stare în/între sistem şi I/O.

Lucrare de laborator
Lucrarea aferentă acestei unităţi de învăţare se intitulează
„INTRODUCERE ÎN SISTEME CU MICROPROCESOARE
Descriere şi funcţionare - Software”.
Obiectivele laboratorului sunt:
 Să cunoască resursele hardware ale microsistemului;
 Să înţeleagă modul de lucru cu microsistemul;
 Să înveţe să folosească microsistemul pentru a realiza programe de
operare cu acesta.
Studenţii utilizează un microsistem experimental Sistem cu
Microprocesor 32 biţi - modul Z3EV
Microsistemul de învăţare cu microprocesor pe 32 biţi este un sistem
didactic cu microprocesor, bazat pe procesorul Intel 80386EX, care
acoperă toată problematica apărută în timpul studierii sistemelor cu
microprocesor
Microsistemul conţine toate componentele tipice necesare studierii unui
astfel de sistem: microprocesor, memorie RAM şi EPROM, tastatură şi
display cu cristale lichide, interfaţă paralelă şi serială, intrări şi ieşiri
analogice

44
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale

Test de autoevaluar
1. Precizaţi avantajele compatibilităţii software între diferitele
generaţii de microprocesore INTEL 80x86
2. Explicaţi care este diferenţa între EU şi BIU şi care este rolul
fiecăruia.
3. Enumeraţi unităţile care funcţionează în paralel la microprocesorul
80386.
4. Câte magistrale are microprocesorul 8086?
5. Care sunt caracteristicile şi rolul magistralei de date?
6. Care sunt caracteristicile şi rolul magistralei de adrese?
7. Care sunt caracteristicile şi rolul magistralei de control?

Lucrare de verificare la Unitatea de învăţare 2


Această unitate de învăţare se va regăsi în lista de subiecte pentru
examen prin următoarele subiecte:
1. Arhitectura microprocesoarelor 80x86;
2. Magistralele microprocesoarelor 80x86.

Răspunsuri şi comentarii la întrebările din testul de


autoevaluare
Răspunsurile la întrebările din testul de evaluare se găsesc în textul
unităţii de învăţare.

Concluzii
1. Majoritatea calculatoarelor personale existente în prezent pe piaţă
sunt echipate cu microprocesoarele compatibile Intel 80x86;
2. Calculatoarele cu microprocesoare 80x86 pot rula trei sisteme de
operare foarte răspândite: DOS, Windows, Linux;
3. Aplicaţiile care rulează pe aceste calculatoare necesită de multe ori
module scrise în limbaj de asamblare, ceea ce impune cunoaşterea
acestuia.
45
SISTEME CU MICROPROCESOARE
2. Microprocesoarele INTEL 80x86: arhitecturi şi magistrale

Bibliografie

1. Dobriceanu Mircea; Sisteme cu microprocesoare; Notiţe de curs,


Tipografia Universităţii din Craiova, 2012 şi format electronic
postat pe http://www.em.ucv.ro
2. Dobriceanu Mircea; Sisteme de achiziţie şi microprocesoare,
Editura Universitaria Craiova, 2003, p.304, ISBN 973-8043-289-8
3. Rotar Dan; Microprocesorul. Programarea în limbaj de asamblare
a microprocesoarelor: 80x86; TMS 320F240; PIC 16F87x, Editura
ALMA MATER

46
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei

Unitatea de învăţare nr. 3

MICROPROCESOARELE INTEL 80x86:


REGISTRELE ŞI ORGANIZAREA MEMORIEI

Cuprins Pagina
Obiectivele unităţii de învăţare nr. 3 48
3.1. Registrele 48
3.1.1. Aspecte generale 48
3.1.2. Registrele de uz general 49
3.1.3. Registrele de segment 54
3.1.4. Registrele de uz special 56
3.2. Organizarea memoriei 58
Lucrare de laborator 63
Test de autoevaluare 63
Lucrare de verificare – unitatea de învăţare nr. 3 63
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 64
Concluzii 64
Bibliografie – unitatea de învăţare nr. 3 64

47
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
OBIECTIVELE unităţii de învăţare nr. 3

Principalele obiective ale Unităţii de învăţare nr. 3 sunt:


• Cunoaşterea rolului şi a tipurilor de registre specifice unităţii
centrale ale microprocesoarele 80x86;
• Cunoaşterea modului de organizare a memoriei
microprocesoarele 80x86

2.3. Registrele
2.3.1. Aspecte generale

Din punct de vedere al programatorului cele mai utilizate componente ale unităţii
centrale sunt registrele şi acestea au o importanţă deosebită în programarea în limbaj de
asamblare.
Fiecare procesor din familia 80x86 conţine un set de registre. Particularitatea acestei
familii de procesoare este reprezentată de faptul că un procesor conţine un superset de regiştrii
ai procesorului precedent. Punctul de plecare îl reprezintă setul de registre al unităţilor
centrale ale procesoarelor 8088, 8086, 80188 şi 80186 deoarece cele patru tipuri de
procesoare au acelaşi tip de registre.
Fabricantul acestor procesoare, firma INTEL, împarte registrele unităţii centrale ale
microprocesoarele 80x86 în trei categorii (Fig. 3.1):
 registre de uz general;
 registre de segment;
 registre de uz special.
Registrele de uz general sunt folosite pentru a memora variabilele locale cât
şi rezultatele intermediare ale calculelor. Deşi aceste registre sunt denumite
“de uz general”, fiecare dintre ele se utilizează într-un anumit scop implicit
dar destinaţia acestora poate fi schimbată explicit de programator. Registrele
segment sunt utilizate pentru accesarea unor blocuri de memorie numite
segmente. Registrele de uz special au destinaţii diverse. Dintre acestea, două
prezină o importanţă deosebită şi vor fi prezentate pe scurt în continuare.

48
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei

31 0 15 0
EAX CS
EBX DS
ECX SS
EDX ES
ESI FS
EDI GS
EBP
Registrele de segment
ESP
Registrele de uz general
31 0
EEFLAGS
EIP
Registrele cu destinaţie specială
Fig 3.1. Registrele familiei Intel 80x86

2.3.2. Registrele de uz general

Registrele de uz general sunt în număr de 8, fiecare de 32 de biţi, care pot fi utilizate de


orice aplicaţie: EAX, EBX, ECX, EDX, ESI, EDI, EBP şi ESP. Prefixul E provine de la
"extended - extins" şi este folosit pentru a diferenţia registrele de 32 de biţi (atunci când
acestea există) de cele de 16 biţi: AX, BX, CX, DX, SI, DI, BP şi SP. Există şi 8 registre de 8
biţi : AL, AH, BL, BH, CL, CH, DL şi DH. Acestea nu sunt registre separate, notaţiile fiind
“mai degrabă” alternative. Nu există 24 de registre independente, registrele de 32 de biţi sunt
suprapuse peste cele de 16 biţi iar o parte dintre aceste la rândul lor sunt suprapuse peste cele
de 8 biţi (Fig. 3.2).
Fiecare dintre cei 8 registre de uz general AX, BX, CX, DX, SP, BP, DI,SI sunt registre
pe 16 biţi pentru microprocesorul 8086, iar de la procesorul 80386 încoace au devenit registre
pe 32 de biţi, denumiţi, respectiv: EAX, EBX, ECX, EDX, ESP, EBP, EDI, ESI. Mai mult,
cei mai puţin semnificativi 8 biţi ai regiştrilor AX, BX, CX, DX formează respectiv regiştrii
AL, BL, CL, DL (litera L provine de la Low), iar cei mai semnificativi 8 biţi ai aceloraşi
regiştri formează regiştrii AH, BH, CH, DH (litera H provine de la High).
Modificarea unuia dintre registre înseamnă modificarea a cel puţin unui alt
registru şi cel mult a altor trei registre. De exemplu modificare lui EAX
poate afecta AL, AH şi AX.
Registrele de 16 biţi sunt mapate direct pentru 8086/88 şi 80286, iar cele de
32 de biţi există doar la procesoarele cu arhitectură IA 32.

49
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
Deşi în calcule se pot folosi oricare din aceste registre, multe instrucţiuni
lucrează mai eficient iar altele chiar impun utilizarea unui anumit registru.

32 biţi

EAX 32 biţi
AX
ESI
AH AL SI
16 biţi
16 biţi
EBX
BX
EDI
BH BL DI
8 biţi
EDX
DX
EBP
DH DL BP

ECX
CX
ESP
CH CL SP

Fig. 3.2. Interdependenţa registrelor de uz general

Fiecare dintre registre pot fi folosite pentru orice operaţie posibilă, dar sunt folosite de
către programatori în următoarele scopuri:

 AX (EAX) (Accumulator Register - registru acumulator) utilizat pentru păstrarea


temporară a datelor (operanzi şi rezultat) în vederea efectuării de operaţii aritmetice, logice
şi de deplasare. Totdeauna operaţiile de înmulţire şi împărţire presupun implicarea
registrului AX. În plus, registrul AX este folosit şi pentru toate transferurile de date de
la/către porturile de Intrare/Ieşire. Poate fi accesat pe porţiuni de 8, 16 sau 32 de biţi, fiind
referit drept AL (cei mai puţin semnificativi 8 biţi din AX), AH (cei mai semnificativi 8
biţi din AX), AX (16 biţi) sau EAX (32 de biþi).
Se prezintă un exemplu de instrucţiuni ce utilizează registrul AX. De remarcat este
faptul că transferurile de date se fac pentru instrucţiunile (denumite şi mnemonice) Intel de la
dreapta spre stânga, ( exact invers decât la Motorola).
Instrucţiunea: MOV AX, 1234H încarcă valoarea 1234H (4660 în zecimal) în registrul
acumulator AX. După cum spuneam, cei mai puţini semnificativi 8 biţi ai registrului AX sunt
identificaţi de AL (A-Low) iar cei mai semnificativi 8 biţi ai aceluiaşi registru sunt identificaţi
ca fiind AH (A-High). Acest lucru este utilizat pentru a lucra cu date pe un octet, permiţând ca
50
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
registrul AX să fie folosit pe postul a doi regiştri separaţi (AH şi AL). Aceeaşi regulă este
valabilă şi pentru regiştrii de uz general BX, CX, DX.
Următoarele trei instrucţiuni setează registrul AH cu valoarea 2, incrementează cu 1
această valoare şi apoi o copiază în registrul AL:
MOV AH, 2
INC AH
MOV AL, AH
Valoarea finală a registrului AX va fi 33 (AH = AL = 3).

 BX (EBX) (Base Register - registru de bază) folosit la stocarea adreselor de memorie


(accesarea indirectă a memoriei), pentru a face referire la diverse structuri de date, cum ar
fi vectorii stocaţi în memorie.
O valoare reprezentată pe 16 biţi stocată în registrul BX poate fi utilizată ca fiind o
porţiune din adresa unei locaţii de memorie ce va fi accesată. Spre exemplu, următoarele
instrucţiuni încarcă registrul AH cu valoarea din memorie de la adresa 22.
MOV AX, 0
MOV DS, AX
MOV BX, 22
MOV AH, [ BX ]
Se observă că am încărcat valoarea 0 în registrul DS înainte de a accesa locaţia de memorie
referită de registrul BX. Acest lucru este datorat segmentării memoriei; implicit, atunci
când este folosit ca pointer de memorie, BX face referire relativă la registrul de segment
DS (adresa la care face referire este o adresă relativă la adresa de segment conţinută în
registrul DS).

 CX (ECX) (Count Register - registru contor) joacă rol de contor în bucle, adică
contorizează numărul de iteraţii a unei instrucţiuni de ciclare LOOP sau specifică numărul
de caractere dintr-un şir.
Rolul de contor al registrului CX se observă din exemplul următor:
MOV CX, 10
start:

<instrucţiuni ce se vor executa de 10 ori>

SUB CX, 1

51
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
JNZ start
Deoarece valoarea iniţială a lui CX este 10, instrucţiunile cuprinse între eticheta start şi
instrucţiunea JNZ se vor executa de 10 ori (până când registrul CX devine 0).
Instrucţiunea SUB CX, 1 decrementează registrul CX cu valoarea 1 iar instrucţiunea JNZ
start determină saltul înapoi la eticheta start dacă CX nu are valoarea 0.
În limbajul microprocesorului există şi o instrucţiune specială legată de ciclare. Aceasta
este instrucţiunea LOOP, care este folosită în combinaţie cu registrul CX. Liniile de cod
următoare sunt echivalente cu cele anterioare, dar aici se utilizează instruxţiunea LOOP:
MOV CX, 10
start:

<instrucţiuni ce se vor executa de 10 ori>

LOOP start
Se observă că instrucţiunea LOOP este folosită în locul celor două instrucţiuni SUB şi
JNZ anterioare; LOOP decrementează automat registrul CX cu 1 şi execută saltul la
eticheta specificată (start) dacă CX este diferit de zero, totul într-o singură instrucţiune.

 DX (EDX) (Data Register – registru de date) are în general două destinaţii: el stochează
depăşirile pentru anumite operaţii aritmetice sau stochează adresa portului I/O pentru
accesarea perifericelor.
Instrucţiunea IN AL, DX copiază o valoare de tip Byte dintr-un port de intrare, a cărui
adresă se află în registrul DX.
Următoarele instrucţiuni determină scrierea valorii 100 în portul I/O 1001:
...
MOV AL, 100
MOV DX, 1001
OUT DX, AL

Referitor la operaţiile de înmulţire şi împărţire, atunci când împărţim un număr pe 32 de
biţi la un număr pe 16 biţi, cei mai semnificativi 16 biţi ai deîmpărţitului trebuie să fie în
DX. După împărţire, restul împărţirii se va afla în DX. Cei mai puţin semnificativi 16 biţi
ai deîmpărţitului trebuie să fie în AX iar câtul împărţirii va fi în AX. La înmulţire, atunci
când se înmulţesc două numere pe 16 biţi, cei mai semnificativi 16 biţi ai produsului vor fi
stocaţi în DX iar cei mai puţin semnificativi 16 biţi în registrul AX.
52
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
 SI (ESI) şi DI (EDI) (Source Index - index sursă şi Destination Index - index destinaţie)
prezintă mai multe destinaţii: pot fi folosite ca pointer (indicator) la adresarea indirectă a
memoriei (similar cu registrul BX pentru a referi adrese de memorie) sau pot fi folosite în
operaţiile cu şiruri.
Un exemplu de utilizare pentru registru SI îl reprezintă secvenţa de instrucţiuni următoare
în ccare se încarcă valoarea (pe 8 biţi) din memorie de la adresa 25 în registrul AL.
MOV AX, 0
MOV DS, AX
MOV SI, 25
MOV AL, [ SI ]
Un exemplu de utilizare pentru registrul DI (se utilizează în mod asemănător ca
registrul SI) îl reprezintă secvenţa de instrucţiuni următoare în care se adună la registrul BL
valoarea pe 8 biţi stocată la adresa 1007
MOV AX, 0
MOV DS, AX
MOV DI, 1007
ADD BL, [ DI ]

 BP (EBP) (Base Pointer – indicator de bază) este similar cu registrul BX, folosit pentru
accesarea perametrilor şi a variabilelor locale dintr-o procedură.
 SP (ESP) (Stack Pointer – indicator stivă) conţine adresa de memorie a stivei programului
în curs de execuţie. Acest registru nu trebuie întrebuinţat în alte scopuri.

Pentru a exemplifica rolul regiştrilor BP şi SP, se prezintă porţiunea de memorie


denumită stivă (stack).
Stiva (Fig. 3.3) reprezintă o porţiune specială de locaţii adiacente din memorie. Aceasta
este conţinută în cadrul unui segment de memorie şi identificată de un selector de segment
memorat în registrul SS (cu excepţia cazului în care se foloseşte modelul nesegmentat de
memorie în care stiva poate fi localizată oriunde în spaţiul de adrese liniare al programului).
Stiva este o porţiune a memoriei unde valorile pot fi stocate şi accesate pe principul
LIFO (Last In – First Out), în care ultima valoare stocată în stivă este prima ce va fi citită din
stivă.
Stiva este utilizată la apelul unei proceduri sau la întoarcerea dintr-un apel de procedură
(principalele instrucţiuni folosite sunt CALL şi RET).

53
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei

Segmentul de stivă
Baza stivei
(valoarea iniţială SP sau
ESP)

Variabile locale pentru Instrucţiunea POP determină


procedura apelată poziţionarea vârfului stivei la o
adresă mai mare

Parametrii transmişi
procedurii apelate Instrucţiunea PUSH determină
poziţionarea vârfului stivei la o
adresă mai mică
Registrul BP (EBP) Indicator de revenire instructiune

Registrul SP (ESP) Vârful stivei


Registrul SP (ESP) este setat să facă
referire la adresa de întoarcere din
procedură

Fig. 3.3. Structura stivei

De reţinut !
Începând de la versiunea ‘386 registrele de uz general au fost extinse la
32 de biţi (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP). Primele 4
registre pot fi adresate la nivel de octet (ex: AL, AH, BL, BH, CL, CH,
DL, DH), cuvînt (ex: AX, BX, CX, DX ) sau dublu-cuvint(EAX, EBX,
ECX, EDX). Celelalte se adresează pe cuvât sau dublu-cuvint.

2.3.3. Registrele de segment

Registrele de segment sunt asociate unui anumit tip de informaţie memorată: program
(cod), date (variabile) şi stivă.
Registrele de segment sunt registre de 16 biţi care conţin adresa de bază (de început) a
unui segment de memorie.
Memoria direct adresabilă de 1 MB necesită o magistrală de adrese de 20 biţi.
Registrele interne ale procesorului fiind de 16 biţi, soluţia găsită se numeşte segmentarea
memoriei; în acest caz memoria de 1MB este împărţită în 16 segmente de câte 64 KB (16*64
KB = 1024 KB = 1 MB), fiecare segment fiind astfel adresabil cu 16 biţi.

54
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
Procesorul poate să utilizeze simultan atâtea segmente de memorie câte registre de
segment posedă.
Adresele de început (de bază) ale celor 4 segmente sunt conţinute în cele 4 registre de
segment (Cod, Date, Stivă şi de Date suplimentare).
 CS (Code Segment - segment de cod) conţine selectorul de segment pentru segmentul de
cod, acolo unde sunt memorate instrucţiunile care se execută. Procesorul preia
instrucţiunile din segmentul de cod, folosind o adresă logică formată din selectorul de
segment din CS şi conţinutul lui EIP. EIP conţine adresa liniară în interiorul segmentului
de cod pentru următoarea instrucţiune ce trebuie executată. CS nu poate fi încărcat în mod
explicit de programul aplicaţie, este încărcat implicit de instrucţiuni sau de operaţii interne
ale procesorului care modifică fluxul program (salturi, apeluri de subrutine, întreruperi).
 DS (Data Segment - segment de date), ES (Extra Segment - segment de date ), FS (Extra
Segment) şi GS (Extra Segment) conţin selectori de segment pentru 4 segmente de date.
Disponibilitatea simultană a 4 segmente de date permite un acces eficient şi sigur la diferite
tipuri de structuri de date. De exemplu se pot crea 4 segmente separate de date: unul
pentru structurile de date din modulul curent, altul pentru datele exportate dintr-un modul
de nivel superior, un al treilea pentru structurile de date create dinamic şi un al patrulea
pentru date comune cu un alt program. Pentru a accesa segmente de date adiţionale,
aplicaţia trebuie să încarce selectorii de segment corespunzători în aceste registre.
 SS (Stack Segment – sment de stivă ) conţine selectorul pentru segmentul de stivă. Toate
operaţiile cu stiva folosesc registrul SS pentru identificarea segmentului de stivă. Spre
deosebire de registrul CS, registrul SS poate fi încărcat explicit, cea ce permite aplicaţiilor
să creeze stive multiple şi să comute între ele.
Cele patru registre de segment CS, DS, SS şi ES sunt aceleaşi cu registrele
de segment de la 8086/88 şi 80286 pe când FS şi GS au apărut odată cu
IA32 (80386), fiind registrele de segment de uz general similari lui ES.
Registrele de segment CS, DS, SS, ES, FS, şi GS conţin o valoare pe 16 biţi
utilizată ca un selector de segment. Acesta este un indicator (pointer) special
care identifică un segment în memorie.
Pentru a accesa un segment particular din memorie, selectorul de segment pentru acel
segment trebuie să fie prezent în registrul de segment corespunzător. Atunci când scriem
codul pentru o aplicaţie în limbaj de asamblare, selectorii de segment se creează folosind
directive ale asamblorului şi simboluri. Asamblorul şi link-editorul creează apoi valorile
actuale pentru selectorii de segment pe baza acestora.

55
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei

De reţinut !
Pentru a adresa o instrucţiune, microprocesorul combină conţinutul
registrului segment de cod CS cu al registrului indicator de adresă, IP,
obţinând o adresă fizică de 20 biţi .
Registrul DS conţine adresa de început a segmentului de date, SS conţine
adresa de început a segmentului stivă iar ES conţine adresa de început a
unui segment de date suplimentar.
Segmentul de cod conţine instrucţiuni iar ultimele trei segmente de
memorie sunt dedicate operanzilor (date).

2.3.4. Registrele de uz special

Există două registere cu destinaţie specială:


 FLAGS (Flags Register – registru indicator de condiţii), (EFLAGS, la procesoarele pe
32 de biţi) sunt utilizaţi pentru a memora informaţii despre starea generală a
sistemului, proprietăţi ale rezultatului unor operaţii aritmetice sau logice, precum şi
pentru exercitarea unor acţiuni de control al activităţii procesorului (Fig.3.4).

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Overflow (depăşire)
Direction (direcţie)
Intrerrupt (întrerupere)
Trap (pas cu pas)
Sign (semn)
Zero
Auxiliary Carry (transport auxiliar)
Parity (paritate)
Carry (transport)

Fig. 3.4. Biţi registrului FLAGS

56
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei

 Carry Flag (indicatorul de transport) se activează (în ''1'' logic) la apariţia unui bit
de transport (depăşirea lungimii normale a rezultatului) la adunare sau de împrumut
la scădere; este asociat rezultatului unei operaţii aritmetice sau logice şi se
comportă ca al noulea bit (b8) al acestuia.
 Parity Flag (indicator de paritate) se activează (în ''1'' logic) când rezultatul unei
operaţii aritmetice sau logice este un octet cu număr par de biţi.
 Auxiliary Flag (indicator de transport auxiliar) se activează când apare transport sau
împrumut în operaţiile aritmetice şi logice între biţii 3 şi 4.
 Zero Flag (indicator de zero) se activează (în ''1'' logic) dacă rezultatul unei
operaţii aritmetice sau logice este zero.
 Sign Flag (indicator de semn) conţine bitul cel mai semnificativ al rezultatului, deci
copiază bitul de semn; va fi ''1'' pentru rezultat negativ şi ''0'' pentru un rezultat
pozitiv.
 Overflow Flag (indicator de depăşire) se activează (în ''1'' logic) când apare
depaşirea capacităţii registrului ce conţine rezultatul, ca urmare a unei operaţii
aritmetice cu operanzi cu semn; va fi ''1'' când apare transport sau împrumut în/din
rangul de semn.
 Trap Flag (indicator pentru modul de lucru ''pas cu pas'') dacă este poziţionat în ''1''
logic, microprocesorul nu mai lucrează la viteza data de semnalul de tact ci în
ritmul impus de utilizator. Acest mod de lucru este deosebit de util la depanarea
programelor.
 Interrupt Flag (indicator pentru controlul întreruperilor) dacă este poziţionat în ''1''
logic (prin instrucţiunea corespunzătoare), sunt validate cererile de întrerupere de
tip INTR (mascabile); invalidarea acestora se face prin poziţionarea lui IF în ''0'',
caz în care cererile INTR nu vor fi luate în consideraţie.
 Direction Flag (indicator de ''direcţie"), are efect în operaţiile cu şiruri. Dacă este
poziţionat în ''1'', după fiecare transfer, adresa operandului din şir se incrementează
(creşte cu 1) iar dacă este poziţionat în ''0'' adresa se decrementează.

 IP (instruction pointer – indicator de instrucţiune ) (EIP, la procesoarele pe 32 de biţi) este


folosit pentru a stoca adresa următoarei instrucţiuni ce va fi executată de către
microprocesor. Pe măsură ce o instrucţiune este executată, indicatorul de instrucţiune este
incrementat şi se va referi la următoarea adresă de memorie (unde este stocată următoarea
instrucţiune ce va fi executată). De regulă, instrucţiunea ce urmează a fi executată se află la

57
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
adresa imediat următoare instrucţiunii ce a fost executată, dar există şi cazuri speciale
(rezultate fie din apelul unei subrutine prin instrucţiunea CALL, fie prin întoarcerea dintr-o
subrutină, prin instrucţiunea RET). Indicatorul de instrucţiuni nu poate fi modificat sau citit
în mod direct; doar instrucţiuni speciale pot încărca acest registru cu o nouă valoare.
Registrul indicator de instrucţiune nu specifică pe de-a întregul adresa din memorie a
următoarei instrucţiuni ce va fi executată, din aceeaşi cauză a segmentării memoriei. Pentru
a aduce o instrucţiune din memorie, registrul CS oferă o adresă de bază iar registrul
indicator de instrucţiune indică adresa de deplasament plecând de la această adresă de
bază.

De reţinut !
Există două registere cu destinaţie specială:
FLAGS (Flags Register – registru indicator de condiţii), utilizaţi pentru a
memora informaţii despre starea generală a sistemului, proprietăţi ale
rezultatului unor operaţii aritmetice sau logice, precum şi pentru
exercitarea unor acţiuni de control al activităţii procesorului.
IP (instruction pointer – indicator de instrucţiune) folosit pentru a stoca
adresa următoarei instrucţiuni ce va fi executată de către microprocesor.

2.4. Organizarea şi adresarea memoriei


Memoria adresată de unitatea centrală prin intermediul magistralei de adrese se numeşte
memorie fizică. Memoria fizică este organizată ca o secvenţă de octeţi (8biţi, byte). Fiecare
octet are asignată o adresă unică numită adresă fizică. Spaţiul de adrese fizice se întinde de la
0 la maxim 232 -1 (4GB). Practic orice sistem de operare proiectat să lucreze cu un procesor
IA32 va folosi facilităţile oferite de sistemul de gestiune al memoriei (memory management).
Printre caracteristicile acestuia se numără segmentarea şi paginarea, care permit ca memoria
să fie gestionată eficient şi fiabil.
În continuare se prezentă metodele de bază pentru adresarea memoriei folosite de
sistemul de gestiune al memoriei.
Când un program utilizează sistemul de gestiune al memoriei, el nu va adresa direct
memoria fizică. Accesul la aceasta se va face folosind unul din cele trei modele de memorie
posibile: plată, segmentată, adresă reală.

58
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
 În cazul modelului plat memoria apare programatorului ca un singur spaţiu de adrese
continuu numit spaţiu de adrese liniar. Codul (instrucţiunile), datele (variabilele) şi stivele
pentru proceduri (subrutine) sunt toate conţinute în acest spaţiu. Spaţiul liniar de adrese
este adresabil la nivel de octet (byte), cu adrese succesive de la 0 la maxim 2n -1. O adresă
de octet în spaţiul liniar este numită adresă liniară.

 Pentru modelul de memorie segmentat memoria apare programatorului ca un grup de spaţii


de adresă independente numite segmente. În acest model codul, datele şi stivele sunt, tipic,
conţinute în segmente separate.
Pentru a adresa un octet dintr-un segment, programul utilizează o adresă logică, care
constă dintr-un selector de segment şi un offset (decalaj):
 selectorul de segment identifică segmentul care va fi accesat;
 offsetul identifică octetul adresat în spaţiul de adresă al segmentului.
Programele rulând pe o Arhitectură Intel 32 pot accesa până la 16383 de segmente de tipuri
şi mărimi diferite şi fiecare segment poate avea până la 232 octeţi. Intern, toate segmentele
definite pentru un sistem (program) sunt mapate în spaţiul de adrese liniar al procesorului.
Astfel procesorul translatează fiecare adresă logică într-o adresă liniară pentru a accesa o
locaţie de memorie. Această translaţie este transparentă pentru aplicaţie (program).
Principala justificare pentru modelul segmentat este creşterea fiabilităţii (siguranţei de
funcţionare) programelor şi sistemului în ansamblu. De exemplu prin plasarea stivei
programului într-un segment separat ne asigurăm că aceasta nu va creşte în spaţiul de
memorie al codului şi/sau datelor, suprascriind instrucţiunile sau variabilele. Plasând
codul, datele şi stivele sistemului de operare în segmente separate le protejează de
programul aplicaţie şi invers, efectul final este cel de izolare a eventualelor greşeli de
programare.
Indiferent de model (plat sau segmentat) arhitectura Intel oferă şi facilităţi pentru a diviza
spaţiul liniar de adrese în pagini şi de a mapa aceste pagini într-o memorie virtuală.
Dacă un sistem de operare foloseşte mecanismul de paginare al arhitecturii Intel, existenţa
paginilor este transparentă pentru aplicaţie.

 Modelul mod adresă reală este modelul de memorie pentru procesorul 8086 (8088, 80186,
80188). El este disponibil la toate variantele de procesoare ulterioare pentru a asigura
compatibilitatea codului vechilor programe scrise pentru procesoarele 8086.
Modul adresă reală foloseşte o implementare specifică a memoriei segmentate în care
spaţiul liniar de adrese pentru program (aplicaţie) şi/sau sistemul de operare constă într-un

59
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
set de segmente fiecare având dimensiunea până la 64Kocteţi (Fig. 3.5).
Dimensiunea maximă a spaţiului de adrese liniar este de 220 (1024KB = 1MB)

a. Model plat
Adresă liniară
Spaţiu de
adrese
liniar

b. Model segmentat Segmente

Spaţiu de
Offset adrese
Adresă logică liniar
Selector segment

c. Model pentru modul adresă reală


Spaţiu de
Offset adrese
liniar
Adresă logică divizat în
Selector segment segmente
egale

Fig. 3.5. Organizarea memoriei

Modul în care este generată adresa fizică de memorie (acest mod fiind şi cel mai simplu) în
cazul modelului mod adresă reală (8086/88, 80186/188), constă în însumarea (sumator de 20
de biţi) offset-ului cu selectorul de segment, acesta din urmă fiind deplasat spre stânga cu 4
poziţii înainte de însumare iar transportul este ignorat (fig. 3.6).
Deplasare (shift) stânga cu 4 biţi
19 0 15 0
1 2 3 4 0 1 2 3 4 Segment

15 0 15 0
+ 0 0 7 7 0 0 7 7 Offset

Adresă logică
19 0
= 1 2 3 B 7 Adresă fizică

Memorie

Fig. 3.6. Generarea adresei fizice de memorie


60
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
În cazul modelului segmentat, o unitate dedicată a procesorului numită unitate de
segmentare translatează adresa logică din program într-o adresă liniară.
Locaţiile segmentelor în spaţiul de adresă liniar sunt memorate în structurile de date
numite descriptori de segment. Unitatea de segmentare calculează adresa folosind descriptorii
de segment şi offsetul, extras din instrucţiune. Adresa liniară este trimisă la o unitate de
paginare şi la unităţile de cache. Când un segment este adresat pentru prima oară descriptorul
său de segment este memorat într-un registru al procesorului. Un program poate avea până la
16383 segmente. La un moment dat pot fi memoraţi în registrele procesorului până la 6
descriptori de segment.
Se prezintă relaţiile între adresa logică, cea liniară şi cea fizică (Fig. 3.7).

31 12 11 0
Offset
Adresă fizică Adresă de bază pagină
Pagină

Translatare unitate de
paginare
31 22 21 12 11 0
Offset Director Offset Tabelă Offset
Adresă liniară
Pagini Pagini Pagină

Translatare unitate de
segmentare
47 32 31 0
Selector
Segment Offset Segment

Adresă logică

Fig. 3.7. Relaţiile între adresa logică, liniară şi fizică

Unitatea de paginare permite accesarea unor structuri de date mai mari decât memoria
fizică (RAM) disponibilă, asigurând păstrarea acestora parţial în memorie şi parţial pe un
suport extern (hard disk). Paginarea împarte spaţiul de adrese liniar în blocuri de 4KB numite
pagini. Ea foloseşte structuri de date particulare (în memorie) numite tabele de pagini pentru
maparea spaţului liniar de adrese în spaţiul fizic. Adresa fizică este plasată pe magistrala de
adrese a procesorului prin intermediul unităţii de cache care o utilizează şi ea. Unitatea de
paginare identifică şi problemele care pot apărea, cum ar fi un acces la o pagină care nu există
în memorie, generând un eveniment numit eroare pagină ("page fault"). Într-o astfel de
situaţie sistemul de operare poate încerca să aducă pagina respectivă de pe suportul extern
(disk). Dacă este necesar poate şi elibera spaţiu de memorie trimiţând altă pagină pe disk.

61
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
Dacă paginarea nu este activă, adresa fizică este identică cu adresa liniară. Spre deosebire
de segmentare, paginarea este invizibilă (transparentă) pentru aplicaţii, dar nu furnizează o
protecţie similară acesteia. Paginarea este vizibilă doar pentru sistemul de operare care o
foloseşte pentru a satisface cerinţele de memorie ale aplicaţiilor.

De reţinut !
Una dintre cele mai importante caracteristici ale memoriei este modul de
organizare al ei şi implicit modul de accesare a informaţiei din memorie.
Memoria este organizată ca un set de locaţii (celule) de memorare
numerotate consecutiv începând de la 0.
Adresa fizică a unei locaţii de memorie este reprezentată printr-un număr
asociat locaţiei respective, iar mulţimea totală a adreselor fizice
reprezintă spaţiul de adrese fizice al memoriei care este limitat de
dimensiunea magistralei de adrese.
O adresă logică este o adresă utilizată într-o instrucţiune dintr-un
program iar mulţimea totală a acestora reprezintă spaţiul adreselor
logice. Organizarea acestui spaţiu defineşte arhitectura memoriei şi este
de o importanţă majoră pentru orice programator.
Maparea este procesul prin care adresele logice pot fi translatate în
adrese fizice, adică este un mecanism de realocare a spaţiului de adrese
logice peste spaţiul de adrese fizice.
Segmentarea memoriei este un mecanism de management al memoriei
care permite programatorilor să-şi partiţioneze programele în module
care pot opera independent unul de celălalt şi care pot creşte sau
descreşte în dimensiune.
În acest mod memoria este divizată logic în mai multe părţi numite
segmente de memorie. În fiecare segment adresarea componentelor sale
(cuvinte de memorie) este liniară. O adresă de memorie este compusă în
acest caz din selectorul segmentului de memorie şi deplasamentul
(offset-ul) din cadrul segmentului respective.
Unitatea de paginare permite accesarea unor structuri de date mai mari
decât memoria fizică (RAM) disponibilă, asigurând păstrarea acestora
parţial în memorie şi parţial pe un suport extern (hard disk).

62
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei

Lucrare de laborator
Lucrarea aferentă acestei unităţi de învăţare se intitulează
„PROGRAMAREA ÎN LIMBAJ DE ASAMBLARE FOLOSIND
SIMULATORUL SMS32: utilizarea registrelor interne”.
Obiectivele laboratorului sunt:
 Prezentarea şi descrierea simulatorului SMS32;
 Setul de instrucţiuni pentru simulatorul SMS32;
 Necesitatea şi explicarea programării în limbaj de asamblare;
 Iniţiere în limbaj de asamblare.
Studenţii utilizează un program care este un simulator al structurii
minimale a unui microprocesor pe 8 biţi. Acest simulator constă dintr-o
unitate centrală (CPU), o unitate de memorie RAM de 256 biţi şi 16
porturi I/O (Intrare/Ieşire) din care sunt folosite numai 5 porturi.
Folosind acest simulator se pot rula programe diverse, care apoi pot fi
folosite într-un sistem real, care va avea în locul memoriei RAM o
memorie ROM, în aceasta fiind înscris un singur program.

Test de autoevaluare
1. Care sunt registrele unităţii centrale ale microprocesoarele 80x86 şi
ce rol îndeplinesc?
2. Ce este stiva şi când se utilizează aceasta?
3. Care sunt biţii registrului indicator de condiţii?
4. Ce este memoria fizică?
5. În ce constă modelul de memorie plat?
6. În ce constă modelul de memorie segmentat?
7. În ce constă modelul mod adresă reală?
8. Ce rol are unitatea de paginare?

Lucrare de verificare la Unitatea de învăţare 3


Această unitate de învăţare se va regăsi în lista de subiecte pentru
examen prin următoarele subiecte:
1. Registrele unităţii centrale ale microprocesoarele 80x86;
2. Organizarea memoriei la microprocesoarele 80x86.

63
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei

Răspunsuri şi comentarii la întrebările din testul de


autoevaluare
Răspunsurile la întrebările din testul de evaluare se găsesc în textul
unităţii de învăţare.

Concluzii
1. Particularitatea microprocesoarelor INTEL 80x86 este reprezentată
de faptul că un procesor conţine un superset de regiştrii ai
procesorului precedent.
2. Una dintre cele mai importante caracteristici ale memoriei este
modul de organizare al ei şi implicit modul de accesare a informaţiei
din memorie.

Bibliografie

1. Dobriceanu Mircea; Sisteme cu microprocesoare; Notiţe de curs,


Tipografia Universităţii din Craiova, 2012 şi format electronic
postat pe http://www.em.ucv.ro
2. Dobriceanu Mircea; Sisteme de achiziţie şi microprocesoare,
Editura Universitaria Craiova, 2003, p.304, ISBN 973-8043-289-8
3. Rotar Dan; Microprocesorul. Programarea în limbaj de asamblare
a microprocesoarelor: 80x86; TMS 320F240; PIC 16F87x, Editura
ALMA MATER

64
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

Unitatea de învăţare nr. 4

MICROPROCESOARELE INTEL 80x86


SETUL DE INSTRUCŢIUNI

Cuprins Pagina
Obiectivele unităţii de învăţare nr. 4 66
4.1. Aspecte generale privind programarea în limbaje de asamblare 66
4.2. Precizări privind reprezentarea numerelor în sistemele cu 68
microprocesoare
4.3. Tipuri de date utilizate în limbaje de asamblare 71
4.4. Setul de instrucţiuni al microprocesoarelor INTEL 80x86 73
4.4.1. Sintaxa unei instructiuni în limbaj de asamblare 73
4.4.2. Grupe de instrucţiuni 74
Lucrare de laborator 85
Test de autoevaluare 85
Lucrare de verificare – unitatea de învăţare nr. 4 85
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 86
Concluzii 86
Bibliografie – unitatea de învăţare nr. 4 86

65
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

OBIECTIVELE unităţii de învăţare nr. 4

Principalele obiective ale Unităţii de învăţare nr. 4 sunt:


• Cunoaşterea avantajului şi respectiv dezavantajului
programării în limbaj de asamblare;
• Cunoaşterea sintaxei unei instrucţiuni şi a grupelor de
instrucţiuni;

4.1 . Aspecte generale privind programarea în limbaj de


asamblare

Un microprocesor poate fi programat:


 folosind programarea în cod maşină;
 folosind programare în limbaj asamblare;
 folosind un limbaj de programare de nivel înalt;
 folosind o combinaţie a celor trei metode.
Totalitatea instrucţiunilor pe care un procesor le poate recunoaşte şi executa, formează
setul de instrucţiuni al microprocesorului respectiv.
Un program scris în limbaj de asamblare este salvat într-un fişier cu extensia .asm.
Acest tip de fişier poate fi editat cu orice tip de editor de text, de exemplu Notepad.
Programarea în limbaj de asamblare presupune folosirea unui set de instrucţiuni
specifice fiecărui tip de microprocesor.
Codurile instrucţiunilor se formulează în limbaj de asamblare ca şi cuvinte cheie,
prescurtate de obicei, care exprimă funcţia reprezentată de codul respectiv. Aceste cuvinte se
numesc mnemonici.
Orice program scris în limbaj de asamblare va fi transformat prin diverse operaţii în
limbaj ”cod maşină”. Acesta foloseşte instrucţiuni codate în binar fiind de fapt singurul limbaj
înţeles de procesor.
Programarea în limbaj de asamblare este ”superioară” programării în cod maşină şi
”inferior” programării într-un limbaj de nivel ”înalt”.

66
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
Deşi programarea în limbaj de asamblare este mult mai meticuloasă şi mai restrictivă
este necesară folosirea lui în cazul controlării unui proces real unde viteza de execuţie este
esenţială.
Deoarece se cunoaşte cu exactitate numărul de “cicluri maşină” necesar execuţiei unei
instrucţiuni în limbaj de asamblare, deci implicit timpul real de execuţie, poate fi determinat
timpul de execuţie al unui program, factor esenţial în cadrul unui proces real, respectiv
execuţie în timp real. Aceasta este principalul motiv pentru care programarea în limbaj de
asamblare este actuală. Datorită apariţiei a noi procesoare cu frecvenţe de tact foarte mari
acest aspect pare rezolvat, totuşi preţul unui asemenea procesor nu se justifică în folosirea
unor sisteme de comandă simple în cele mai multe cazuri.

Avantaje ale limbajului de asamblare:


 viteza foarte mare de execuţie a programelor (unele programe scrise şi optimizate în
asamblare au viteza de executie până la 5-10 de ori mai mare decat cele scrise în C sau
Pascal);
 mărimea codului executabil este foarte mică;
 ajută utilizatorul să înţeleagă mai bine cum funcţionează microprocesorul şi să scrie
programe eficiente şi în limbaj de programare de nivel înalt.
Dezavantaje ale limbajului de asamblare:
 nu este portabil; un program scris pentru calculatoare IBM PC nu va rula pe un Apple
Macintosh (diferă unele instructiuni);
 un program în asamblare este mai greu de scris şi ia mai mult timp decât un program scris
în Pascal sau C;
 un program scris în asamblare este mai greu de depanat.

Etapele elaborării unui program pentru microprocesorul 8086, lucrând pe un calculator


compatibil IBM PC sunt:
 se scrie programul în limbaj de asamblare cu ajutorul unui editor de texte, obţinându-se un
fişier text numit fişier sursă care are cel mai adesea extensia .asm;
 translatarea fişierului sursă în format binar se face cu ajutorul programului asamblor care
semnalează eventualele erori de sintaxă ale programului şi generează, în cazul în care
programul este corect din punct de vedere sintactic, un fişier în cod binar.
În funcţie de necesităţile programatorului, asamblorul poate genera două tipuri de fişiere:
 fişiere în cod obiect absolut, direct executabile de către unitatea centrală, care sunt
aşezate în memorie la adresa de unde vor fi executate (fişierul generat conţine adresele

67
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
absolute ale programului) şi care vor avea extensia .com sau .exe
 fişiere în cod obiect relativ, care conţin codul obiect dar adresele sunt relative
(simbolice) şi care nu pot fi executate direct dar pot fi puse în biblioteci (pentru o
utilizare ulterioară).
 dacă s-a obţinut fişierul în cod obiect absolut (extensia .com sau .exe) se poate trece la
lansarea în execuţie în scopul verificării şi eventual a depanării funcţionării logice a
acestuia (cu ajutorul unui program de depanare – debugger);
 dacă s-a obţinut un fişier în cod obiect relocabil, fişierul poate fi adăugat unei biblioteci
(library) cu ajutorul unui program bibliotecar (librarian) sau se poate genera programul în cod
obiect absolut cu ajutorul unui editor de legături (linkeditor). Editorul de legături caută în
biblioteci legăturile solicitate, adaugă în programul în cod obiect absolut secvenţele extrase din
biblioteci, semnalează eventualele referinţe nerezolvate şi, în cazul în care nu au fost erori,
generează codul obiect absolut.

De reţinut !
Un program scris în limbaj de asamblare este salvat într-un fişier cu
extensia .asm
Programarea în limbaj de asamblare presupune folosirea unui set de
instrucţiuni specifice fiecărui tip de microprocesor.
Programarea în limbaj de asamblare este ”superioară” programării în cod
maşină şi ”inferior” programării într-un limbaj de nivel ”înalt”.

4.2. Precizări privind reprezentarea numerelor în sistemele cu


microprocesoare
Un microprocesor primeşte, prelucrează şi furnizează informaţii numai în cod binar,
deoarece semnalele cu care acesta lucrează pot lua numai două valori: nivel ridicat şi nivel
coborât.
Sistemul de numeraţie în baza 2 foloseşte numai două valori pentru reprezentarea stării
unei variabile: 0 şi 1. Aceste două valori se mai numesc şi cifre binare sau, pe scurt, biţi.
În vorbirea uzuală există mai multe cuvinte care sunt asociate acestor două valori, în
funcţie de semnificaţia pe care le-o acordăm:
Bitul 1 adevărat pornit ridicat setat +5 V setat
Bitul 0 fals oprit coborât resetat 0V şters
68
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

Microprocesorul 8086 foloseşte grupuri de câte 8 sau 16 linii sau semnale logice, cărora
le corespund grupuri de 8 biţi (octeţi sau bytes) şi respectiv 16 biţi (cuvinte sau words). Când
ne referim la un octet, trebuie să avem în vedere atât numărul de biţi cât şi ordinea în care
aceştia sunt aranjaţi în cadrul octetului. Poziţia fiecărui bit o numim rang şi acesta indică
ponderea bitului respectiv în cadrul valorii numerice a octetului. Ponderea unui bit este egală
cu 2rangul bitului
Ca şi în zecimal, rangul cel mai mic (0) şi ponderea cea mai mică (20=1) o are ultima
cifră binară din dreapta. Ponderea creşte treptat, odată cu rangul, de la dreapta la stânga,
ultima cifră binară având rangul maxin (7) şi ponderea maximă (27). De aceea, bitul de rang 0
se mai numeşte şi cel mai puţin semnificativ bit (LSB - Least Significant Bit), iar bitul de rang
7 poarta numele de cel mai semnificativ bit (MSB - Most Significant Bit).
Exemplu, în cazul octetului 10001101:

Rang 7 6 5 4 3 2 1 0
Pondere 27 26 25 24 23 22 21 20
Valoare
128 64 32 16 8 4 2 1
pondere
Octet 1 0 0 0 1 1 0 1

Spunem că biţii de rang 7, 4, 3, 2 şi 0 au valoarea 1, iar biţii de rang 6, 5 şi 0 au valoarea


0. Valoarea numerică a octetului este egală cu suma tuturor biţilor înmulţiţi fiecare cu
ponderea sa, ceea ce este echivalent su suma ponderilor tuturor biţilor 1 ai octetului respectiv.
Pentru exemplul considerat, valoarea numerică este 128+8+4+1 = 141 în zecimal.
Aceleaşi reguli se aplică şi pentru cuvinte de 16 biţi, cu obsevaţia că în acest caz bitul cel
mai semnificativ este cel de rang 15. în plus, cei 16 biţi sunt adeseori considerati ca fiind
formaţi din doi octeţi: octetul superior sau MSB şi cel inferior sau LSB.

Pondere 215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20


Rang 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
octetul superior (MSB) octetul inferior (LSB)

Reprezentarea binară este destul de dificil de folosit, în special pentru numere mari, din
cauza numărului ridicat de cifre binare necesare pentru codificarea lor. O reprezentare mai
compactă este reprezentarea în baza 16 sau hexazecimală, care aduce numărul de cifre chiar
sub cel cu care suntem obişnuiţi din reprezentarea zecimală.
Avantajul ei este acela că trecerea de la reprezentarea binară la cea hexazecimală este
imediată, fiind bazată pe gruparea biţilor câte 4, începând cu LSB. În mod similar, trecerea de
la hexazecimal la binar se face uşor, prin expandarea separată a cifrelor hexazecimale în

69
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
grupuri de 4 biţi şi concatenarea acestora.
Exemplu, şirul de biţi 1001101001110100 poate fi reprezentat în hexazecimal astfel:

Binar: 1001 1010 0111 0100


Hexazecimal: 9 A 7 4

Pentru a evita confuziile, numerele reprezentate în binar sau în hexazecimal


vor fi urmate de o literă care să indice baza de reprezentare:
B sau b - pentru codificarea binară (1011b = 0Bh = 10)
H sau h - pentru hexazecimal (1001h = 0001 0000 0000 0001b).
O problemă importantă o constituie codificarea adreselor şi precizarea lungimii
intervalelor de adrese.
Spre exemplu, aşa cum s-a arătat anterior, microprocesorul 8086 dispune de o
magistrală de adrese formată din 16 linii. Cu ajutorul acestor linii pot fi accesate un număr de
216 = 65536 de locaţii de memorie de 8 biţi. Aceasta înseamnă că adresa cu valoarea numerică
cea mai mică (0) se poate scrie pe 16 biţi în hexazecimal sub forma 0000h, respectiv 16 biţi 0.
Adresa maximă este 65535 şi poate fi scrisă în hexazecimal ca FFFFh, respectiv 16 biţi 1.
O altă problemă o constituie modul de execuţie a operaţiilor logice de către
microprocesorul 8086. Acestea sunt trei operaţii cu doi operanzi: AND, OR şi XOR şi una cu
un singur operand: NOT. Ele se execută separat asupra biţilor de pe acelaşi rang ai
operanzilor, respectiv asupra fiecărui bit separat (NOT), ca în exemplele de mai jos:

01101010 01101010 01101011


11000001 11000001 11000001 01101010
AND -------------- OR -------------- XOR -------------- NOT --------------
01000000 11101011 10101010 10010101

Operaţiile aritmetice în baza 2 sau baza 16 se efectuează în mod similar cu cele din baza
10. Spre exemplu, operaţiile aritmetice pe care le poate efectua 8086 sunt cele de adunare
(ADD) şi de scădere (SUBstract) cu doi operanzi în baza 2:

01101010 11000100
01000001 01101110
ADD ----------------- ADD ------------------
10101011 100110010

Scăderea se efectuează prin adunarea descăzutului cu opusul scăzătorului:


Descăzut - Scăzător = Descăzut + (-Scăzător)
Opusul unui număr în baza 2 se mai numeşte şi complementul faţă de 2 (CM2).
Complementul faţă de 2 se calculează apelând la complementul faţă de 1 (CM1):

70
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
CM2 = CM1 + 1
01101011 11000101
01000001 11101110
SUB ----------------- SUB ---------------
000101010 111010111
fără împrumut cu împrumut
Scăderile din exemplele de mai sus se efectuează prin parcurgerea următorilor paşi:

CM1 10111110 00010001


01101011 11000101
CM2 10111111 00010010
ADD --------------- ADD --------------------------
100101010 11010111
cu transport fără transport

Se observă că dacă apare transport la adunare înseamnă că nu apare împrumut la scădere


şi invers.
Operaţiile de adunare şi scădere se pot face şi în baza 16, într-un mod asemănător cu
cele din baza 10, dacă ţinem cont că între rangurile hexazecimale transportul şi împrumutul se
referă la 16 unităţi în loc de 10.

De reţinut !
Pentru a evita confuziile, numerele reprezentate în binar sau în
hexazecimal vor fi urmate de o literă care să indice baza de reprezentare:
B sau b - pentru codificarea binară, H sau h - pentru hexazecimal
Octetul este o unitate de măsură a informaţiei. Pentru măsurarea
diferitelor cantităţi de informaţie se pot folosi multiplii octetului.
Unităţile de informaţie folosesc ca factor de multiplicare 210=1024:
1 Koctet = 210 octeţi = 1024 octeţi;
1Moctet = 210 Kocteţi = 220 octeţi;
1Goctet = 210 Mocteţi = 220 Kocteţi = 230 octeţi;
1Toctet = 210 Goctet=220 Mocteţi=230 Kocteţi=240 octeţi

4.3. Tipuri de date utilizate în limbaje de asamblare


Tipurile fundamentale de date (Fig. 4.1) pentru Arhitectura Intel 32 sunt:
 octet - byte (8 biţi);
 cuvânt - word (2 octeţi - 16 biţi);

71
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
 dublu cuvânt - double word (4 octeţi - 32 de biţi);
 quadruplu cuvânt - quad word (8 octeţi - 64 de biţi);
 dublu cvadruplu cuvânt - double quad word (16 octeţi - 128 de biţi).

7 0
Byte

15 87 0
Word Hi Lo
31 16 15 0
Doubleword Hi Lo

63 32 31 0
Quadword Hi Lo
Double Quadword
127 64 63 0
Hi Lo

Fig. 4.1. Tipuri de date

Tipul quad word a apărut în arhitectura Intel odată cu 80486, iar double quad word
odată cu Pentium III cu extensia SSE.
Cel mai puţin semnificativ octet ocupă cea mai mică adresă în memorie (Low), adresa
respectivă fiind şi adresa operandului.
Deşi tipurile fundamentale de date pentru o arhitectură Intel sunt cele menţionate mai
sus, anumite instrucţiuni suportă o interpretare suplimentară a acestor tipuri pentru a permite
operaţii asupra unor tipuri numerice de date: întregi cu sau fără semn şi numere în virgulă
mobilă.
 La numerele întregi fără semn (unsigned integer) au formatul de reprezentare nativ,
coincid cu tipurile fundamentale iar la numerele întregii cu semn (signed integer), cel mai
semnificativ bit al tipului respectiv, este bitul de semn (de exemplu bitul 15 la signed word
sau bitul 63 la signed quadword), valoarea fiind reprezentată în cod binar complement faţă
de 2.
 La formatul virgulă mobilă (floating point), reprezentarea este conformă standardului
IEEE 754, existând trei formate:
 simplă precizie (single precision) lungime 32 biţi , precizie 24 biţi;
 dublă precizie (double precision) lungime 64 biţi , precizie 53 de biţi;
 precizie extinsă (extended double precision) lungime 80 de biţi, precizie 64 biţi.
Precizia se referă la numărul de biţi al mantisei normalizate.

72
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

4.4. Setul de instrucţiuni al microprocesoarelor INTEL 80x86


4.4.1. Sintaxa unei instrucţiuni în limbaj de asamblare

O instructiune ocupă o linie de program şi se compune din mai multe câmpuri, după
cum urmeaza (parantezele drepte indică faptul că un anumit câmp poate să lipsească):
[<eticheta>:] [<mnemonica>] [<operand_1> [,<operand_2>]] [;<comentariu>]
 <eticheta> - este un nume simbolic (identificator) dat unei locaţii de memorie care conţine
instrucţiunea care urmează; scopul unei etichete este de a indica locul în care trebuie să se
facă un salt în urma executării unei instrucţiuni de salt; eticheta poate fi o combinaţie de
litere, cifre şi anumite semne speciale (ex: _ ), cu restricţia că prima cifră să fie o literă;
 <mnemonica> - este o combinaţie de litere care simbolizează o anumită instrucţiune (ex:
add pentru adunare, mov pentru transfer, etc.); denumirile de instrucţiuni sunt cuvinte
rezervate şi nu pot fi utilizate în alte scopuri;
 <operand_1> - este primul operand al unei instrucţiuni şi în acelasi timp şi destinaţia
rezultatului; primul operand poate fi un registru, o adresă, sau o expresie care generează o
adresă de operand; adresa operandului se poate exprima şi printr-un nume simbolic
(numele dat unei variabile);
 <operand_2> - este al doilea operand al unei instrucţiuni; acesta poate fi oricare din
variantele prezentate la primul operand şi în plus poate fi şi o constantă;
 <comentariu> - este un text explicativ care arată intenţiile programatorului şi efectul
scontat în urma execuţiei instrucţiunii; având în vedere că programele scrise în limbaj de
asamblare sunt mai greu de interpretat se impune aproape în mod obligatoriu utilizarea de
comentarii; textul comentariului este ignorat de compilator; comentariul se consideră până
la sfârşitul liniei curente.
Într-o linie de program nu toate câmpurile sunt obligatorii: poate să
lipsească eticheta, operanzii, comentariul sau chiar instrucţiunea. Unele
instrucţiuni nu necesită nici un operand, altele au nevoie de unul sau doi
operanzi.
Primul operand este destinaţia, iar al doilea este sursa.
Constantele numerice care apar în program se pot exprima în zecimal
(modul implicit), în hexazecimal (constante terminate cu litera 'h') sau în
binar (constante terminate cu litera 'b'). Constantele alfanumerice (coduri
ASCII) se exprima prin litere între apostrof sau text între ghilimele.

73
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

De reţinut !
Sintaxa unei instrucţiuni în limbaj de asamblare este:
[<eticheta>:] [<mnemonica>] [<operand_1>[,<operand_2>]] [;<comentariu>]
Primul operand este destinaţia, iar al doilea este sursa.
Într-o linie de program nu toate câmpurile sunt obligatorii: poate să
lipsească eticheta, operanzii, comentariul sau chiar instrucţiunea.
Unele instrucţiuni nu necesită nici un operand, altele au nevoie de unul
sau doi operanzi.

4.4.2. Grupe de instrucţiuni


Setul de instrucţiuni este organizat în 6 grupe:
1. instrucţiuni de transfer, care deplasează date între memorie sau porturi de intrare/ieşire şi
registrele procesorului, fără a executa prelucrarea datelor;
2. instrucţiuni aritmetice şi logice, care prelucrează date în format numeric;
3. instrucţiuni pentru şiruri, specifice operaţiilor cu date alfanumerice;
4. instrucţiuni pentru controlul programului, care în esenţă se reduc la salturi şi la apeluri
de proceduri;
5. instrucţiuni specifice întreruperilor, hard şi soft;
6. instrucţiuni pentru controlul procesorului.
În continuare se prezentă instrucţiunile comune majorităţii microprocesoarelor şi care se
utilizeaza mai des şi au importanţă din punct de vedere al structurii şi al posibilităţilor
procesorului

A. Instrucţiuni de transfer presupun o copiere a unui octet sau a unui cuvânt de la o sursă la
o destinaţie. Destinaţia poate fi un registru, o locaţie de memorie sau un port de ieşire iar
sursa poate fi un registru, o locaţie de memorie, constante sau un port de intrare.
Transferurile de tip memorie-memorie nu sunt permise (cu excepţia instrucţiunilor pentru
şiruri). La fel nu sunt permise transferurile directe între doua registre segment. Ambii
operanzi ai unui transfer trebuie sa aiba aceeaşi lungime (numar de biţi).

A1. Instrucţiuni de transfer generale: MOV, XCHG, PUSH, POP

 Instrucţiunea MOV (Move Data – Transferă date)


74
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
Este cea mai utilizată instrucţiune de transfer. Sintaxa ei este:
[<eticheta>:] MOV <operand_1>, <operand_2> [;<comentariu>]
unde:
<operand_1> = <registru>|<reg_segment>|<adresa_offset>|<nume_variabila>|<expresie>
<operand_2> = <operand_1>|<constanta>
<registru> = EAX|EBX|.....ESP|AX|BX|....SP|AH|AL|....DL
<expresie> = [[<registru_index>][+<registru_baza>][+<deplasament>]]
aici parantezele drepte marcate cu bold sunt necesare şi conţin:
<registru_index> = SI| DI |ESI | EDI
<registru_baza> = BX|BP |EBX| EBP
<deplasament> = <constanta>
Următoarele operaţii nu sunt permise:
 sursa şi destinaţia nu pot fi ambele operanzi în memorie;
 nu pot fi folosite registrele FLAGS şi IP;
 operanii nu pot avea dimensiuni diferite;
 registrul CS nu poate apare ca destinaţie.
Exemple de instrucţiuni corecte:
MOV AX, BX
MOV AL, CH
MOV SI, 1234h
Exemple de erori de sintaxă:
MOV AX, CL ; operanzi inegali ca lungime
MOV AL, 1234h ; dimensiunea constantei este mai mare decât cea a registrului
MOV DS, ES ; două registre segment

 Instrucţiunea XCHG (Exchange Data – Interschimbă date)


Această instrucţiune schimbă între ele conţinutul celor doi operanzi.

XCHG <operand_1>, <operand_2>

Exemple:
XCHG AL, BH
XCHG AX,BX
Instrucţiunea XCHG este utilă la interschimbarea a două cantităţi aflate în memorie. Dacă
operand 1 şi operand 2 sunt doi operanzi aflaţi în memorie, care trebuie interschimbaţi,
secvenţa standard de interscmbare (folosind un registru) este:

75
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
MOV registru, operand1
XCHG registru, operand2
MOV operand1, registru

 Instrucţiunile PUSH (Push Data – Salvează date în stivă) şi POP (Pop Data – Refă
date din stivă)
Cele două instrucţiuni operează în mod implicit cu vârful stivei.
 Instrucţiunea PUSH pune un operand în stivă;
 POP extrage o valoare de pe stivă şi o depune într-un operand.
În ambele cazuri registrul indicator de stivă (SP) se modifică corespunzător (prin
decrementare şi respectiv incrementare) astfel încât registrul SP să indice poziţia curentă a
vârfului de stivă.
Sintaxa instrucţiunilor este:
PUSH <operand_1>
cu semnificaţia: ‘‘copiază sursă (operand 1) în vârful stivei’’, concret execuţia instrucţiunii
se face după secvenţa
(SP) (SP) – 2
SS : (SP) + 1 : (SP) operand 1
POP <operand_1>
cu semnificaţia: ‘‘copiază conţinutul vârfului stivei în destinaţie (operand 1) ’’, concret
execuţia instrucţiunii se face după secvenţa
operand 1 SS : (SP) + 1 : (SP)
(SP) (SP) + 2
Transferul se face numai pe 16 biţi. Aceste instrucţiuni sunt utile pentru salvarea temporară
şi refacerea conţinutului unor registre. Aceste operaţii sunt necesare mai ales la apelul de
rutine şi la revenirea din rutine.

A2. Instrucţiuni de transfer specifice adreselor: LEA, LDS, LES

Aceste istrucţiuni transferă o adresă efectivă într-un registru general, sau o adresă completă pe
32 de biţi într-o pereche de registre.

 Instrucţiunea LEA (Load Effective Address – Încarcă adresă efectivă), LDS (Load
Data Segment – Încarcă DS ) şi LES (Load Extra Segment – Încarcă ES)
Aceste instrucţiuni permit încărcarea într-un registru a unei adrese de variabile.

76
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
 Prima instrucţiune LEA încarcă în registrul exprimat ca prim operand adresa de
offset a variabilei din operandul 2.
 Următoarele două instrucţiuni încarcă atât adresa de offset cât şi adresa de segment;
LDS încarcă segmentul în registrul DS,
LES încarcă segmentul în registrul ES. Sintaxa ei este:
LEA <operand_1>,< operand _2>
LDS < operand _1>,< operand _2>
LES < operand _1>, < operand _2>
în care operand 1este un registru iar operand 2 este un operand aflat în memorie
Exemple:
LEA SI, Var1 ; SI<= offset(Var1)
LDS BX, text ; DS<= segment(text), BX<=offset(text)
LEA DI, [BX+100] ; DI<= BX+100

A3. Instrucţiuni de transfer specifice acumulatorului: IN, OUT, XLAT

 Instrucţiunea IN (Input Data – Citeşte date de la port de intrare)


Sintaxa ei este:
IN< operand _1>,< operand _2>
în care operand 1 este registrul AL sau AX iar operand 2 este un port ce poate să fie o
constantă cuprinsă între 0...255, fie registrul DX. La variantele noi de procesoare registrele
AL sau AX pot fi substituite cu orice registre de uz general.

 Instrucţiunea OUT (Output Data – Scrie date la port de ieşire)


Sintaxa ei este:
IN< operand _1>,< operand _2>
în care operand 1 este registrul AL sau AX iar operand 2 este un port de ieşire specificat la
fel ca la instrucţiunea IN.
Instrucţiunile IN şi OUT sunt singurele instrucţiuni propriu-zise care pot realiza
interacţiunea procesorului cu alte dispozitive.

 Instrucţiunea XLAT (Translate - Translatează)


Instrucţiunea nu are operanzi iar semnificaţia este:
(AL) DS : ((BX) + (AL))
adică se aduce în AL conţinutul octetului de la adresa (BX)+(AL). Această instrucţiune
este folosită împreună cu tabele de translatare utile în conversia unor tipuri de date.

77
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

A4. Instrucţiuni de transfer specifice flagurilor: LAHF, SAHF, PUSHF, POPF

 Instrucţiunea LAHF (Load AH with FLAGS – Încarcă AH cu FLAGS)


Înstrucţiunea nu are operanzi, iar semnificaţia este exprimată de denumire: se încarcă
registrul AH cu partea mai puţin semnificativă a registrului de flaguri
AH FLAGS 0...7

 Instrucţiunea SAHF (Store AH into FLAGS – Depune AH în FLAGS)


Este perechea instrucţiunii LAHF, semnificaţia fiind:
FLAGS 0...7 AH

 Instrucţiunea PUSHF (Push Flags – Salvează FLAGS în stivă)


Nu are operanzi, iar efectul este plasarea registrului FLAGS în vârful stivei:
(SP) (SP) – 2
SS : (SP) + 1 : (SP) FLAGS

 Instrucţiunea POPF (Pop FLAGS – Reface FLAGS din stivă)


Este perechea instrucţiunii PUSHF:
FLAGS SS : (SP) + 1 : (SP)
(SP) (SP) + 2
Cu excepţia instrucţiunilor SAHF şi POPF, nici o instrucţiune de transfer nu
modifică indicatorii de condiţii

B. Instrucţiuni aritmetice şi logice


A doua categorie importantă de instrucţiuni o constituie instrucţiunile aritmetice şi logice.
Rezultatul operaţiei este totdeauna depus într-unul din operanzi. La instrucţiunile cu doi
operanzi, rezultatul este depus în primul operand. Instrucţiunile modifică indicatorii de
condiţii CF (Flagul Carry - transport), AF (Flagul Auxiliarry Carry – transport auxiliar), ZF
(Zero), SF (Flagul Sign - semn), PF (Flagul Parity - paritate), OF (Flagul Overflow –
depăşire), motiv pentru care acestea mai sunt numite şi flaguri aritmetice.

B1. Instrucţiuni aritmetice


Aceste instrucţiuni efectuează cele patru operaţii aritmetice de bază: adunare, scădere,
înmulţire şi împărţire. Rezultatul acestor instrucţiuni afectează starea indicatorilor de condiţie.

78
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

 Instrucţiunile ADD şi ADC


Aceste instrucţiuni efectuează operaţia de adunare a doi operanzi, rezultatul plasându-se în
primul operand. A doua instrucţiune ADC (ADD with carry – Adună cu transport) în plus
adună şi conţinutul indicatorului de transport CF. Această instrucţiune este utilă pentru
implementarea unor adunări în care operanzii sunt mai lungi de 32 de biţi.
Sintaxa lor este:
ADD <operand_1>,< operand _2>
ADC < operand _1>,< operand _2>

Semnificaţia este:
<operand_1> <operand_1> + < operand _2>
<operand_1> <operand_1> + < operand _2> + <CF>
Indicatori de condiţii afectaţi: AF,CF, PF, SF, ZF, OF, (toţi)

 Instrucţiunile SUB şi SBB


Aceste instrucţiuni implementează operaţia de scădere. A doua instrucţiune, SBB (Subtract
with borrow – Scade cu împrumut) scade şi conţinutul indicatorului CF, folosit în acest caz pe
post de bit de împrumut. Ca şi ADC, SBB se foloseşte pentru operanzi de lungime mai mare.
Sintaxa lor este:
SUB <operand_1>,< operand _2>
SBB < operand _1>,< operand _2>
Semnificaţia este:
<operand_1> <operand_1> - < operand _2>
<operand_1> <operand_1> - < operand _2> - <CF>
Indicatori de condiţii afectaţi: AF,CF, PF, SF, ZF, OF, (toţi)

 Instrucţiunile MUL şi IMUL


Aceste instrucţiuni efectuează operaţia de înmulţire, MUL pentru întregi fără semn şi IMUL
(Integer Multiply – Înmulţeşte cu semn) pentru întregi cu semn. De remarcat că la operaţiile
de înmulţire şi împărţire trebuie să se ţină cont de forma de reprezentare a numerelor (cu semn
sau fără semn), pe când la adunare şi scădere acest lucru nu este necesar. Pentru a evita dese
depăşiri de capacitate s-a decis ca rezultatul operaţiei de înmulţire să se păstreze pe o lungime
dublă faţă de lungimea operanzilor. Astfel dacă operanzii sunt pe octet rezultatul este pe
cuvânt, iar daca operanzi sunt pe cuvânt rezultatul este pe dublu-cuvânt. De asemenea se
impune ca primul operand şi implicit şi rezultatul să se păstreze în registrul acumulator. De

79
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
aceea primul operand nu se mai specifică.
Sintaxa lor este:
MUL <operand_2>
IMUL < operand_2>
Semnificaţia este:
<acumulator extins> <acumulator> * < operand _2>
în care ambii operanzi se consideră numere fără semn
<acumulator extins> <acumulator> * < operand _2>
în care ambii operanzi se consideră numere cu semn
Indicatori de condiţii afectaţi: dacă extensia acumulatorului (adică AH sau DX) este diferită
de 0, atunci CF şi OF sunt 1, astfel CF şi OF sunt 0. Restul flagurilor sunt nedefinite.

 Instrucţiunile DIV şi IDIV


Aceste instrucţiuni efectuează operaţia de împărţire pe întregi fără sem şi respectiv cu semn.
Pentru a creşte plaja de operare se consideră că primul operand, care în mod obligatoriu
trebuie să fie în acumulator, are o lungime dublă faţă de al doilea operand. Primul operand nu
se specifică.
Sintaxa lor este:
DIV <operand_2>
IDIV < operand_2>
Semnificaţia este:
<acumulator > <acumulator extins> / < operand _2>
<extensia acumulatorului > <acumulator extins> MOD< operand _2>
în care ambii operanzi se consideră numere fără semn
<acumulator > <acumulator extins> / < operand _2>
<extensia acumulatorului > <acumulator extins> MOD< operand _2>
în care ambii operanzi se consideră numere cu semn iar împărţirea se face cu semn.
Indicatori de condiţii afectaţi: toate flagurile sunt nedefinite

 Instrucţiunile INC şi DEC


Aceste instrucţiuni realizează incrementarea şi respectiv decrementarea cu o unitate a
operandului. Aceste instrucţiuni sunt eficiente ca lungime şi ca viteză. Ele se folosesc pentru
contorizare şi pentru parcurgerea unor şiruri prin incrementarea sau decrementarea adreselor.
Sintaxa lor este:
INC <operand_1>

80
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
DEC < operand_1>
Semnificaţia este:
< operand_1> < operand_1> + 1
< operand_1> < operand_1> - 1
Indicatori de condiţii afectaţi: AF, PF, SF, ZF, OF, (fără CF)

 Instrucţiunea NEG
Această instrucţiune realizează schimbarea semnului unui operand
Sintaxa este:
NEG <operand_1>
Semnificaţia este:
< operand_1> 0 - < operand_1>
Indicatori de condiţii afectaţi: AF,CF, PF, SF, ZF, OF, (toţi)

 Instrucţiunea CMP
Sintaxa este:
CMP <operand_1>,<operand_2>
Iar semnificaţia este execuţia unei scăderi temporare <operand_2> - <operand_1> fără a se
modifică vreun operand, dar cu poziţionarea indicatorilor de condiţii.
Indicatori de condiţii afectaţi: AF, PF, SF, ZF, OF, (toţi)

B2. Instrucţiuni logice


Aceste instrucţiuni implementează operaţiile de bază ale logicii booleene. Operaţiile
logice se efectuează la nivel de bit, adică se combină printr-o operaţie logică fiecare bit al
operandului 1 cu bitul corespunzător din operandul al doilea. Rezultatul se generează în
primul operand.
 Instrucţiunile AND, OR, NOT şi XOR
Aceste instrucţiuni implementează cele patru operaţii de bază: ŞI, SAU, Negaţie şi SAU-
Exclusiv.
Sintaxa este:
AND <operand_1>,< operand_2>
OR < operand_1>, < operand_2>
NOT < operand_1>
XOR < operand_1>,< operand_2>
Semnificaţia este:

81
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
< operand_1> < operand_1> AND < operand_2>
< operand_1> < operand_1> OR < operand_2>
Instrucţiunea realizează negarea tuturor biţilor operand 1, deci calculul complementului faţă
de 1
< operand_1> < operand_1> XOR < operand_2>
Indicatori de condiţii afectaţi:, PF, SF, ZF, CF = 0, OF = 0, AF nedefinit

Se prezintă în continuare sub formă tabelară exemple de instrucţiuni caracteristice


familiei INTEL 80X86, fiecare categorie de instrucţiuni este însoţită de specificarea explicită
a rolului funcţional şi a indicatorilor de condiţii care sunt modificaţi sau nu, în urma execuţiei.
Tab. 4.1 - Instrucţiuni de transfer. Nu setează registrul indicator de stare.
Instrucţiune Cod proc. Explicaţie
MOV AL,15 D0 00 15 AL=15 Copiază numărul 15 în registrul AL
MOV D1 01 15 BL=[15] Copiază conţinutul celulei de memorie
BL,[15] RAM cu adresa [15] în registrul BL
MOV D2 15 03 [15]=CL Copiază registrul CL în celula de
[15],CL memorie RAM cu adresa 15
MOV D3 03 00 DL=[AL] Copiază conţinutul celulei de memorie
DL,[AL] RAM a cărei adresă este conţinută în registrul AL
în registrul DL
MOV D4 03 00 [CL]=AL Copiază registrul Al în celula de
[CL],AL memorie RAM a cărei adresă este conţinută în
registrul CL

Tab. 4.2 - Instrucţiuni aritmetice şi logice. Setează registrul indicator de stare.


Instrucţiune Cod proc. Explicaţie
ADD AL,BL A0 00 01 AL=AL+BL Adună registrul AL cu registrul BL,
rezultatul fiind pus în registrul AL
SUB BL,CL A1 01 02 BL=BL-CL Scade din registrul BL registrul CL,
rezultatul fiind pus în registrul BL
MUL CL,DL A2 02 03 CL=CL*DL Înmulţeşte registrul CL cu registrul
DL, rezultatul fiind pus în registrul DL
DIV DL,AL A3 03 00 DL=DL/AL Împarte registrul DL cu registrul AL,
rezultatul fiind pus în registrul DL
MOD AL,BL A6 00 01 AL=AL mod BL Împarte registrul AL cu registrul
BL, restul împărţirii fiind pus în registrul AL
INC DL A4 03 DL=DL+1 Incrementează registrul DL
DEC AL A5 00 AL=AL-1 Decrementează registrul AL
AND AL,BL AA 00 01 AL=AL AND BL Se execută operaţia logică AND
între registrele AL şi BL, rezultatul fiind pus în
registrul AL
OR CL,BL AB 02 01 CL=CL OR BL Se execută operaţia logică OR între
82
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
registrele CL şi BL, rezultatul fiind pus în registrul
CL
XOR AL,BL AC 00 01 AL=AL XOR BL Se execută operaţia logică XOR
între registrele AL şi BL, rezultatul fiind pus în
registrul AL
NOT BL AD 01 BL = NOT BL Se execută operaţia logică NOT
pentru registrul BL, rezultatul fiind pus în registrul
BL
ROL AL 9A 00 Rotate bits left. LSB := MSB Se roteşte
conţinutul acumulatorului AL (la nivel de bit) spre
stânga
ROR BL 9B 01 Rotate bits right. MSB := LSB Se roteşte
conţinutul acumulatorului AL (la nivel de bit) spre
dreapta
SHL CL 9C 02 Shift bits left Discard MSB Se deplasează biţii
acumulatorului AL spre dreapta
SHR DL 9D 03 Shift bits right Discard LSB Se deplasează biţii
acumulatorului AL spre stânga

Tab. 4.3 - Instrucţiuni aritmetice şi logice imediate. Setează registrul indicator de stare.
Instrucţiune Cod proc. Explicaţie
ADD AL,12 B0 00 12 AL=AL+12 Adună registrul AL cu 12 rezultatul
fiind pus în registrul AL
SUB BL,15 B1 01 15 BL=BL-CL Scade din registrul BL 15, rezultatul
fiind pus în registrul BL
MUL CL,3 B2 02 03 CL=CL*3 Înmulţeşte registrul CL cu 3, rezultatul
fiind pus în registrul DL
DIV DL,2 B3 03 02 DL=DL/2 Împarte registrul DL 2, rezultatul fiind
pus în registrul DL
MOD AL,10 B6 00 10 AL=AL mod 10 Împarte registrul AL cu 10, restul
împărţirii fiind pus în registrul AL
INC DL A4 03 DL=DL+1 Incrementează registrul DL
DEC AL A5 00 AL=AL-1 Decrementează registrul AL
AND AL,0F BA 00 0F AL=AL AND 0F Se execută operaţia logică AND
între registrul AL şi 0F, rezultatul fiind pus în
registrul AL
OR CL,F0 BB 02 F0 CL=CL OR F0 Se execută operaţia logică OR între
registrul CL şi F0, rezultatul fiind pus în registrul
CL
XOR AL,AA BC 00 AA AL=AL XOR AA Se execută operaţia logică XOR
între registrul AL şi AA, rezultatul fiind pus în
registrul AL

Tab. 4.4 - Instrucţiuni de comparare. Setează registrul indicator de stare.


Instrucţiune Cod proc. Explicaţie
CMP AL,BL DA 00 01 Setează 'Z' dacă AL=BL, setează 'S' dacă AL<BL

83
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
CMP BL,13 DA 01 13 Setează 'Z' dacă BL=13, setează 'S' dacă BL<13
CMP CL,[20] DA 02 20 Setează 'Z' dacă CL=[20] – celula de memorie
RAM cu adresa 20, setează 'S' dacă CL<[20]

Tab. 4.5 - Instrucţiuni de salt. Nu setează registrul indicator de stare.


În funcţie de dimensiunea şi direcţia saltului, codul generat este diferit. Instrucţiunile de salt
modifică registrul indicator IP. Saltul maxim posibil este între 127 şi -128
Instrucţiune Cod proc. Explicaţie
JMP etichetă C0 12 Incrementează IP cu 12
C0 FE Decrementează IP cu 2 (complement faţă de 2)
JZ etichetă C1 09 Incrementează IP cu 9 dacă flag-ul Z este setat
C1 9C Decrementează IP cu 100 dacă flag-ul Z este setat
JNZ etichetă C2 04 Incrementează IP cu 4 dacă flagul Z nu este setat
C2 F0 Decrementează IP cu 16 dacă flagul Z nu este setat
JS etichetă C3 09 Incrementează IP cu 9 dacă flag-ul S este setat
C3 E1 Decrementează IP cu 31 dacă flag-ul S este setat
JNS etichetă C4 04 Incrementează IP cu 4 dacă flag-ul S nu este setat
C4 E0 Decrementează IP cu 32 dacă flag-ul S nueste setat
JO etichetă C5 09 Incrementează IP cu 9 dacă flag-ul O este setat
C5 DF Decrementează IP cu 33 dacă flag-ul O este setat
JNO C6 04 Incrementează IP cu 9 dacă flag-ul O nu este setat
AGAIN C6 FB Decrementează IP cu 33 dacă flag-ul O nu este
setat
Tab. 4.6 - Instrucţiuni pentru subrutine şi întreruperi. Nu setează registrul indicator de stare.
Instrucţiune Cod proc. Explicaţie
CALL 30 CA 30 Salvează registrul IP în stivă şi face salt la adresa
30 (alep subrutină)
RET CB Caută registrul Ip în stivă şi face salt la el (revenire
din subrutină)
INT 01 CC 01 Rulează codul de la adresa 01 şi salvează adresa de
revenire în stivă
IRET CD Termină tratarea întreruperii şi continuă de la
adresa salvată în stivă

Tab. 4.7 - Instrucţiuni de manipulare a stivei. Nu setează registrul indicator de stare.


Instrucţiune Cod proc. Explicaţie
PUSH BL E0 01 Salvează registrul BL în stivă
POP CL E1 02 Restaurează registrul CL
PUSHF EA Registrul de stare este salvat în stivă
POPF EB Restaurează registrul de stare din stivă

Tab. 4.8 - Instrucţiuni de Intrare/Ieşire. Nu setează registrul indicator de stare.


Instrucţiune Cod proc. Explicaţie

84
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
IN 0C F0 0C Citeşte data de la portul I/O 0C şi o scrie în
registrul AL
OUT 0E F1 0E Trimite conţinutul registrului AL la portul I/O 0E
Tab. 4.9 - Instrucţiuni diverse. Setează registrul indicator de stare. CLI şi STI setează fanionul I.
Instrucţiune Cod proc. Explicaţie
NOP FF Nu se execută nimic timp de un ciclu (ciclu gol)
STI FC Activează sistemul de întreruperi
CLI FD Dezactivează sistemul de întreruperi
ORG 30 Generează cod începând cu adresa 30 (pentru
subrutine)
DB “sir" Încarcă în memorie şirul de caractere “sir”
DB 0D Încarcă în memorie numărul hexazecimal 0D

Lucrare de laborator
Lucrarea aferentă acestei unităţi de învăţare se intitulează
„MICROSISTEM CU MICROPROCESOR 32 BIŢI – modul Z3EV
Descriere, construcţie si funcţionare. Programarea microsistemului
folosind consola”.
Obiectivele laboratorului sunt:
 Studiul programului Monitor al modulului Z3EV
 Studierea conţinutului registrelor şi a memoriei;
 Crearea şi rularea unui program asamblare folosind consola;
 Studierea semnalelor de bază ale microprocesorului.

Test de autoevaluare
1. Care sunt etapele elaborării unui program pentru microprocesorul
8086?
2. Care este sintaxa unei instructiuni în limbaj de asamblare?
3. Care este setul de instrucţiuni al microprocesorului INTEL 80x86?
4. Enumeraţi instrucţiunile de transfer şi rolul acestora.
5. Enumeraţi instrucţiunile aritmetice şi logice şi rolul acestora.
6
Lucrare de verificare la Unitatea de învăţare 4
Această unitate de învăţare se va regăsi în lista de subiecte pentru
examen prin următoarele subiecte:
1. Instrucţiunile de transfer;
2. Instrucţiunile aritmetice şi logice.

85
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni

Răspunsuri şi comentarii la întrebările din testul de


autoevaluare
Răspunsurile la întrebările din testul de evaluare se găsesc în textul
unităţii de învăţare.

Concluzii
 Programele în limbaj de asamblare se scriu în mod text pentra ca
apoi sa fie traduse într-o formă binară corespunzătoare limbajului
maşină;
 Limbajul de asamblare este tradus în limbaj maşină de către
assembler;
 Limbajele de asamblare încă solicită programatorului cunoaşterea
de multe detalii hardware;
 Limbajul de asamblare împreună cu limbajul maşină formează
categoria limbajelor de nivel scăzut

Bibliografie
1. Dobriceanu Mircea; Sisteme cu microprocesoare; Notiţe de curs,
Tipografia Universităţii din Craiova, 2012 şi format electronic
postat pe http://www.em.ucv.ro
2. Dobriceanu Mircea; Sisteme de achiziţie şi microprocesoare,
Editura Universitaria Craiova, 2003, p.304, ISBN 973-8043-289-8
3. Muscă Gheorghe; Programarea în limbaj de asamblare, Editura
Teora, 1997

86
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

Unitatea de învăţare nr. 5

MICROPROCESOARELE INTEL 80x86


TEHNICI DE ADRESARE A MEMORIEI

Cuprins Pagina
Obiectivele unităţii de învăţare nr. 5 88
5.1. Tehnici de adresare a memoriei 88
5.1.1. Aspecte generale 88
5.1.2. Moduri de adresare 89
5.2. Ciclurile de bază ale unui microprocesor 93
5.3. Moduri de operare 96
5.4. Execuţia instrucţiunilor 98
Lucrare de laborator 102
Test de autoevaluare 102
Lucrare de verificare – unitatea de învăţare nr. 5 103
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 103
Concluzii 103
Bibliografie – unitatea de învăţare nr. 5 104

87
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
OBIECTIVELE unităţii de învăţare nr. 5

Principalele obiective ale Unităţii de învăţare nr. 5 sunt:


• Cunoaşterea tehnicilor de adresare a memorie;
• Descrierea şi exemplificarea modului de aducere din
memoria principală şi de execuţie a instrucţiunilor;
• Cunoaşterea modurilor de lucru ale microprocesorului

5.1. Tehnici de adresare a memoriei


5.1.1. Aspecte generale
Din analiza formatelor de instrucţiuni, am observat că pentru a defini complet operaţia
de executat este nevoie să cunoaştem locul unde sunt amplasaţi operanzii, adică adresele lor.
În general, un operand se poate afla în registre sau în memoria de lucru.
Adresa unui registru se poate codifica pe un număr redus de biţi (uzual 3 sau 4
biţi), ce poate face parte chiar din câmpul destinat codului operaţie.
Adresa locaţiei de memorie unde se află operandul este precizată într-un câmp separat,
ce face parte din corpul instrucţiunii.
Modul în care operanzi sunt aduşi la cunoştinţa unităţii centrale, calea pe care i se
comunică adresa la care se află locat operandul căutat, se numeşte tehnică de adresare.
Există o gamă relativ importantă de moduri de adresare. În funcţie de tipul
microprocesorului, se implementează prin setul de instrucţiuni unele dintre aceste moduri de
adresare. O posibilitate de apreciere a performanţelor unui microprocesor este dată şi de
modurile de adresare ale acestuia. Cu cât gradul de sofisticare oferit de modurile de adresare
creşte, cresc şi posibilităţile şi flexibilitatea programatorului de a realiza programe mai
eficiente, compacte, performante. Totodată, intervin şi elemente subiective, legate de opţiunile
personale ale programatorului, de experienţa şi capacitatea sa de a găsi soluţia optimă pentru
implementarea unei aplicaţii date.
În continuare se vor prezenta cele mai întâlnite moduri de adresare, utilizate la diferite

88
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
tipuri de microprocesoare, însoţite de explicaţii şi exemplificări ale utilizării lor. Pentru
fiecare mod de adresare se va explica felul în care se obţine operandul unei instrucţiuni a
microprocesorului.

De reţinut !
Modurile de adresare specifică modul în care se calculează adresa
operandului aflat în memorie. Se folosesc denumirile de adresă de
segment pentru adresa de început a segmentului în care se găseşte
operandul şi adresă efectivă pentru deplasamentul operandului în cadrul
segmentului respectiv. Adresa de segment şi adresa efectivă formează
adresa fizică. Adresa de segment este furnizată de unul din registrele de
segment.

5.1.2. Moduri de adresare

Principalele moduri de adresare întâlnite la majoritatea microprocesoarelor sunt:


 Adresarea imediată
În cazul adresării imediate, operandul apare în instrucţiune, reprezentând chiar
operandul necesar pentru execuţia instrucţiunii respective. Această valoare este definită încă
din faza de scriere a programului, fiind dată de programator în corpul instrucţiunii,
reprezentând în general valori constante, fixe, ale programului. Acest mod de adresare este cel
mai simplu mod de manipulare a unei valori constante de către programator, necesitând un
timp redus de execuţie deoarece nu se accesează magistrala de date.
Adresarea imediată este utilă în compararea conţinutului unui registru cu o valoare
constantă, în vederea luării unei decizii în program, fără a mai necesita utilizarea de memorie
RAM suplimentară. Principala limitare a acestui mod de adresare este dată de faptul că,
valoarea operandului, fiind conţinută în corpul instrucţiunii, este fixă pentru un program dat,
şi nu mai poate fi modificată în cursul rulării acestuia
Exemple:
LD A,55h ; instrucţiunea încarcă registrul A cu valoarea 55h.
AND 8Eh ; instrucţiunea execută operaţia logică AND între registrul A şi numărul
8Eh.
ADD BX, 2 ; adună 2 la BX.

89
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
 Adresarea registru
Adresarea registru se caracterizează prin faptul că operandul (operanzii) sunt conţinuţi
în registrele de uz general ale microprocesorului.
Deoarece numărul de registre de uz general ale unui microprocesor este relativ redus,
registrul (registrele) care alcătuiesc operanzii instrucţiunii sunt conţinute chiar în corpul
instrucţiunii. Aceasta permite ca instrucţiunea să fie scurtă şi să se execute foarte rapid
(datorită vitezei de execuţie sporite, la accesarea registrelor interne ale microprocesorului).
Din acest moti, registrele sunt cel mai bun loc de plasare al variabilelor cel mai des utilizate
Exemple:
MOV AX, BX ;copiază conţinutul registrului BX în registrul AX
MOV DL, AL ;copiază conţinutul registrului AL în registrul DL

 Moduri de adresare pentru date aflate sau care doresc să fie plasate în memorie
Există în principal trei moduri de adresare pentru accesarea datelor în memorie:
adresarea directă, adresarea indirectă şi adresarea indexată.
Modurile de adresare reprezintă, în acest caz, diferite modalităţi de a specifica adresa
datei mai precis a ofsetului acesteia.
Ofsetul sau deplasamentul reprezintă distanţa în octeţi de la începutul unui segment
până la locaţia de memorie în care este conţinută data.
Ofsetul datei din memorie va fi calculat de unitatea de execuţie pe baza modului de
adresare specificat în instrucţiune, iar rezultatul se numeşte adresa efectivă
De menţionat că datele se pot afla sau se doresc a fi plasate în memorie, în segmente de
date (Data Segment) sau stivă (Stack Segment)
Adresa de bază a segmentului de date este conţinută în registrul DS, iar cea a
segmentului de stivă curent este conţinută în registrul SS.

 Adresarea directă
În acest mod de adresare, ofsetul date este specificat direct în instrucţiune printr-o
valoare numerică sau printr-un nume simbolic.
Exemple:
MOV BL, [50h] ; conţinutul locaţiei de memorie având ofsetul 50h este
; încărcat în registrul BL (Fig.5.1)

Este mai comod ca ofsetul să se specifice printr-un nume simbolic, reprezentând numele
unei variabile simple (Fig.5.2)

90
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
MOV var, BL ; conţinutul registrului BL este copiat în locaţia de memorie al
; cărei ofset este specificat prin variabila ‘‘var’’

DS

ofset

[50h] BL

Fig.5.1. Reprezentarea grafică a modului de execuţie a instrucţiuni MOV BL, [50h]

DS

ofset

var BL

Fig.5.2. Reprezentarea grafică a modului de execuţie a instrucţiuni MOV var, BL

Variabilele pot desemna date reprezentate în memorie pe unul sau mai mulţi octeţi, după cum
sunt declarate. Se consideră un exemplu în care variabila este de tip cuvânt (doi octeţi)
(Fig.5.3).
MOV var, BX ; conţinutul registrului BX este copiat în memorie în două locaţii
; începânt cu ofsetul dat de variabila ‘‘var’’

DS

ofset

var BL

Fig.5.3. Reprezentarea grafică a modului de execuţie a instrucţiuni MOV var, BX


91
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

 Adresarea indirectă (prin registru)


În acest caz, ofsetul datei este conţinut într-un registru (Fig.5.4).
Exemplu:
MOV [BX], AX ; registru AX este încărcat în conţinutul unei locaţii de
; memorie, al cărei deplasamenteste dat de registrul BX

DS

ofset

[BX] AX

Fig.5.4. Reprezentarea grafică a modului de execuţie a instrucţiuni MOV [BX], AX

 Adresarea indexată
Ofsetul operandului se obţine adunând conţinutul unui registru index (SI sau DI) un cu
deplasament constant. Deplasamentul este specificat fie printr-o constantă, fie printr-un
simbol. Acest mod de adresare este util la accesarea elementelor unei tabele.
În exemplul următor, conţinutul registrului AL este încărcat la locaţia de memorie al
cărui ofset este dat de suma dintre deplasamentul depl şi conţinutul registrului index SI
(Fig.5.5).

DS

depl

[SI] AL
ofset=depl + [SI]

Fig.5.5. Reprezentarea grafică a modului de execuţie a instrucţiuni MOV [BX], AX

92
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

De reţinut !
Procedeele prin care se realizează în mod concret calculul adreselor
(pentru instrucţiuni, respectiv operanzi) sunt cunoscute sub numele
generic de moduri de adresare.
În vederea prezentării modurilor de adresare se va face apel la noţiunile
de adresă de segment (AS), desemnând adresa de început a segmentului
în care se găseşte operandul, respectiv de adresă efectivă (AE),
specificând deplasamentul operandului în cadrul segmentului ce îl
conţine. Pe baza AS şi AE se constituie adresa fizică (AF),
Modurile de adresare întâlnite la majoritatea microprocesoarelor sunt:
 Adresarea imediată;
 Adresarea registru;
 Adresarea direct;
 Adresarea indirectă (prin registru);
 Adresarea indexată.

5.2. Ciclurile de bază ale unui microprocesor


Microprocesorul este din punct de vedere al modulului de eşalonare în timp a
activităţilor sale, un dispozitiv sincron: toate operaţiile sale interne şi externe se întâmplă
sincron cu fronturile semnalului de tact. Semnalul de tact este un semnal electric
dreptunghiular generat extern, care este folosit pentru sincronizarea proceselor din sistem.
Entitatea care însumează toate activităţile care se desfăşoară în timpul unei
perioade a semnalului de ceas (tact) se numeşte ciclu de tact.
Entitatea care reuneşte toate activităţile care se desfăşoară pe parcursul
execuţiei unei instrucţiuni a cărui cod este locat în memorie, se numeşte
ciclu instrucţiune.
De exemplu cea mai simplă instrucţiune pentru microprocesorul 8086 - SCF - durează 4
perioade ale semnalului de tact, iar cea mai complexă - 23 de perioade ale semnalului de tact.
Practic fiecare instrucţiune este descompusă în operaţii simple (primare) executabile pe
perioada unei perioade a semnalului de tact.
În timp ce durata unui ciclu instrucţiune variază de la o clasă la alta, durata ciclului de
tact este unică pentru un microcalculator dat, perioada T a semnalului de tact fiind unitatea de

93
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
măsură a timpului elementar consumat de procesor.
Analizând modul de execuţie al celei de-a doua instrucţiuni ( SET 0 (IX+59H) ), se
poate observa că cei 23 tacţi se compun din mai multe activităţi care pot fi grupate astfel:
 se efectuează 4 citiri din memorie pentru citirea instrucţiunii (este o instrucţiune pe 4
octeţi);
 se efectuează o citire din memorie de la adresa IX+59H;
 se rescrie la această adresă, octetul în care deja b 0 = 0
Se observă că pentru a efectua instrucţiunea analizată microprocesorul va realiza 6
accese la memorie, din care 5 sunt de tip citire, iar unul de scriere.
Pentru a conferi un plus de modularitate şi flexibilitate în execuţia instrucţiunilor, precum
şi pentru a uşura implementarea hardware-ului din chip, ciclul instrucţiune a fost subdivizat în
câteva tipuri de activităţi procesor intermediare.
Suma activităţilor procesor care rezolvă o activitate intermediară bine
definită, având o finalitate clară, în cursul execuţiei unei instrucţiuni, se
numeşte ciclu maşină.
Principalele cicluri maşină sunt:
 citirea şi decodificarea codului instrucţiune (fetch) – o instrucţiune constă dintr-o
succesiune de octeţi (1-4 pentru microprocesorul 8086), din care unul reprezintă
obligatoriu codul instrucţiune. Abia după citirea şi decodificarea acestui cod,
microprocesorul va şti ce are de făcut pentru a executa instrucţiunea.
 citirea unui octet de date (memory read) – datele numerice care apar în câmpul unei
instrucţiuni se citesc din memorie şi se depun într-unul din registre interni ai
microprocesorului. Operaţia fiind mai simplă şi deci mai scurtă în timp, decât cea
precedentă, a dus la realizarea a două tipuri de ciclu maşină de citire din memorie
 ciclul de citite a codului operaţiei (fetch)
 ciclul de citire a datelor numerice (read)
 scrierea unui octet în memorie (memory write) – ciclul maşină care rezolvă operaţia se
numeşte ciclu maşină de scriere în memorie: write.
Folosind aceste trei cicluri maşină marea majoritate a instrucţiunilor unui microprocesor
pot fi implementate. În funcţie de microprocesor există şi alte tipuri de cicluri maşină.
Sintetizăm funcţionarea microprocesorului astfel:
 instrucţiunile se execută în cicluri de instrucţiune (IC);
 ciclurile instrucţiune sunt constituite dintr-un număr întreg de cicluri maşină (MC);
 ciclurile maşină sunt constituite dintr-un număr întreg de cicluri de tact (CC).

94
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
Ştiind durata reală a unul tact microprocesor se poate determina timpul necesar
execuţiei fiecărei instrucţiuni. Aceşti timpi de execuţie sunt daţi în documentaţia de firmă a
microprocesorului.
Ştiind timpul de execuţie al oricărei instrucţiuni se poate determina cu precizie timpul
necesar execuţiei unui program sau a unui modul din el. Pentru comanda unui proces real
acest lucru este esenţial.
Pentru comanda unui proces real se impune respectarea timpilor de lucru impuşi de
proces. Deci anumite module din program vor trebui optimizate pentru a se încadra în aceste
limite din punct de vedere al timpului de execuţie al instrucţiunilor componente.

De reţinut !
 Ciclul instrucţiune: Secvenţa de operaţii necesare pentru adresarea,
aducerea şi execuţia unei instrucţiuni.
 Un ciclu instrucţiune conţine mai multe cicluri maşină
 Ciclul maşină: intervalul de timp necesar pentru terminarea unei
operaţii intermediare: citire memorie, scriere memorie, citire IO,
scriere IO
 Ciclul de fetch instrucţiune = primul ciclu maşină al oricărui ciclu
instrucţiune
 De obicei un ciclu maşină implică un transfer al procesorului cu
exteriorul.
 Un ciclu maşină conţine mai multe stări UCP.
 Stare (timp de ciclu al UCP)
 Este timpul UCP (tUCP) necesar pentru executarea unei operaţii
elementare şi bine definite (este inversul frecvenţei la care lucrează
procesorul)
 O operaţie elementară (micro-operaţie) se referă de obicei la un
transfer între două registre
 Starea este unitatea de timp de bază pentru măsurarea duratei
activităţilor UCP

95
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

5.3. Moduri de operare


Arhitectura Intel suportă trei moduri de operare:
 protejat;
 adresă reală;
 gestiune sistem.
Modul de operare determină ce instrucţiuni şi caracteristici de lucru sunt disponibile precum
şi modelele de memorie disponibile.
 Modul protejat (Protected Virtual Address Mode - mod adresă virtuală protejată) este
modul în care toate instrucţiunile şi caracteristicile de prelucrare sunt disponibile,
permiţând obţinerea performanţelor maxime. Modul protejat prezintă un mecanism
sofisticat pentru protejarea datelor, integritatea sistemului, concurenţa taskurilor şi
gestiunea memoriei incluzând şi cea a memoriei virtuale. În modul protejat, în cazul
microprocesorului 80286, spaţiul adreselor fizice este mărit de la 1 Moctet la 16 Mocteţi,
în timp ce spaţiul adreselor virtuale a fost mărit la 1 Goctet. În acest mod, programele
folosesc adrese virtuale, translatarea lor în adrese fizice făcându-se automat pe baza unor
tabele cu descriptori de segmente. Acest mecanism permite implementarea eficientă a
sistemelor cu memorie virtuală în care utilizatorul vede memoria internă şi cea externă ca o
singură memorie. Modul protejat permite implementarea sistemelor multitasking, oferind
câte un segment de stare ataşat fiecărui task, care sunt structuri manevrate hardware şi
conţin stările curente (incluzând toţi regiştrii) ale taskurilor. Selectoarele acestor segmente
de stare identifică unic taskul ataşat. De asemenea, este facilitată şi comutarea taskurilor,
care poate fi invocată printr-o singură instrucţiune. Fiecare task din sistem poate avea
propriul lui spaţiu de adrese logice, existând de asemenea un mecanism evoluat pentru
comunicarea între taskuri, sincronizarea lor, partajarea memoriei etc.

 Modul real (Real Address Mode – mod adresă real) este cel în care se intră după
iniţializarea microprocesorului. De regulă, sub sistemul de operare DOS microprocesorul
se află în modul real. Specific acestui mod de funcţionare este faptul că microprocesorul nu
poate rula decât un singur program odată. Există posibilitatea rulării programelor sub
sistemul de operare DOS şi în alte moduri ale microprocesorului, dar acest lucru necesită
extensii ale sistemului de operare (existând în acest sens programe specifice).

 Modul gestiune sistem (system management) reprezintă o caracteristică unică a


procesoarelor Intel, începând cu I386SL.Acest mod asigură sistemului de operare o

96
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
modalitate transparentă de a implementa funcţii specifice platformei de calcul, cum ar fi
gestiunea puterii consumate (power management – gestionarea puterii) sau securitatea
sistemului. Trecerea în acest mod se face sub controlul unui semnal extern, printr-o cerere
de întrerupere externă dedicată. La comutarea în acest mod procesorul comută pe un spaţiu
de adrese separat numit SMRAM (System Management RAM) similar modelului adresă
reală. În acelaşi timp ce salvează întregul context al programului care rulează sau al task-
ului curent. Codul specific acestui mod poate fi apoi executat în mod transparent. La
revenirea din acest mod procesorul îşi restaurează contextul avut înainte de intrarea în
acest mod.
De reţinut !
Microprocesoarele de tip INTEL, începând cu microprocesorul de tip
80386 au patru moduri de funcţionare de bază: modul real, modul
virtual, modul protejat şi modul nativ.
 Modul real este un mod uniproces, în care se execută un singur proces
(program sau task) la un moment dat (acest mod se întâlneş începând
de la 8086).
 Modul virtual care permite execuţia mai eficientă a programelor scrise
pentru procesoarele 8086 şi 8088 pe noul procesor de 32 de biţi.
Magistrala externă de adrese a fost extinsă la 32 de biţi, spaţiul
adreselor fizice fiind astfel de 4 GB. Spaţiul adreselor virtuale este de
64 TB. Dimensiunea fiecărui segment nu mai este limitată la 64 KB,
dimensiunea maximă a unui segment fiind de 4 GB (începând de la
80386).
 Modul protejat este modul care utilizează conţinutul registrelor de
segment ca selectori sau pointeri în tabele ale descriptorilor de
segment. Descriptorii furnizează adrese de bază de 24 de biţi,
permiţând adresarea unei memorii fizice de până la 16 MB.
Procesorul dispune de o unitate de gestiune a memoriei virtuale, cu
care poate translata adrese pentru o memorie virtuală de 1 GB în
spaţiul adreselor fizice de 16 MB (începând de la 80286).
 Modul nativ foloseşte întreaga putere a microprocesorului. Memoria
virtuală permite ca dimensiunea unui program să fie limitată de
spaţiul pe disc şi nu de dimensiunea memoriei interne. Mecanismele
de protecţie sunt destul de puternice pentru a evita accidentele între
taskuri sau între utilizatori (începând de la 80386).
97
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

5.4. Execuţia instrucţiunilor


Pentru a pune în evidenţă o parte din problemele proiectării unei unităţi centrale
eficiente vom considera 4 instrucţiuni 80x86 reprezentative: MOV, ADD, LOOP şi JNZ
(Jump on Not Zero). Pentru că MOV şi ADD au fost prezentate anterior ne vom concentra
asupra noilor instrucţiuni LOOP şi JNZ. Ambele instrucţiuni sunt instrucţiuni de salt
condiţionat.
 JNZ testează starea indicatorului de condiţie Zero din EEFLAGS sau din PSW. Se
execută saltul dacă indicatorul de condiţii respectiv este 0 sau instrucţiunea următoare
dacă indicatorul de condiţii este 1. Programul specifică instrucţiunea de destinaţie a
saltului prin "distanţa" dintre instrucţiunea JNZ şi destinaţie, exprimată ca un întreg
cu semn.
 LOOP decrementează valoarea registrului ECX şi transferă controlul unei instrucţiuni
ţintă (destinaţie), tot în domeniul -128 ..+127 faţă de instrucţiunea LOOP, dacă după
decrementare ECX este diferit de zero.
Instrucţiunile 80x86 nu se execută într-un singur ciclu de ceas al procesorului.

Exemple:
A. instrucţiunea MOV, care este relativ simplă, ar presupune următorii paşi de execuţie:
- preia octetul cu codul instrucţiunii ( fetch opcod) din memorie;
- actualizează EIP pentru a indica următorul octetv;
- decodifică instrucţiunea pentru a vedea ce face;
- dacă e necesar, preia (fetch) operand de 16 biţi din memorie;
- dacă e necesar, actualizează EIP pentru a indica dincolo de operand;
- dacă e necesar, calculează adresa operandului (de exemplu EBX+deplasament);
- preia (fetch) operandul;
- memorează valoarea preluată într-un registru.
Dacă alocăm câte un ciclu de ceas pentru fiecare din paşii de mai sus, o instrucţiune poate
dura de la 5 până la 8 cicluri de ceas (trei din paşii de mai sus sunt opţionali depinzând de
modul de adresare al operanzilor).
B. instrucţiunea ADD este mai complexă ea presupunând următorii paşi (se presupune un
ADD reg, reg):
- preia octetul cu codul instrucţiunii ( fetch opcod) din memorie;
- actualizează EIP pentru a indica următorul octet;

98
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
- decodifică instrucţiunea;
- ia valoarea operandului sursă (registru) şi o trimite la ALU;
- ia valoarea operandului destinaţie (registru) şi o trimite la ALU;
- comandă ALU pentru adunare;
- memorează rezultatul înapoi în primul operand (registru) ;
- actualizează indicatorii de condiţie conform rezultatului operaţiei de adunare.
Unitatea aritmetică şi logică (Arithmetic Logic Unit - ALU) este o componentă esenţială
a oricărui CPU, la nivelul ei executându-se toate operaţiile aritmetice şi logice.
Dacă operandul sursă este în memorie (ADD reg, mem), secvenţa este mai complicată:
- preia octetul cu codul instrucţiunii (fetch opcod) din memorie;
- actualizează EIP pentru a indica următorul octet;
- decodifică instrucţiunea;
- dacă e necesar, preia un deplasament pentru a-l utiliza în calculul adresei efective;
- dacă e necesar, actualizează EIP pentru a indica dincolo de valoarea deplasamentului;
- ia valoarea operandului sursă din memorie şi o trimite la ALU;
- ia valoarea operandului destinaţie (registru) şi o trimite la ALU;
- comandă ALU pentru adunare;
- memorează rezultatul înapoi în primul operand (registru) ;
- actualizează indicatorii de condiţie conform rezultatului operaţiei de adunare.

Cea mai complicată secvenţă avem când sursa este o constantă (ADD mem, const):
- preia octetul cu codul instrucţiunii ( fetch opcod) din memorie;
- actualizează EIP pentru a indica următorul octet;
- decodifică instrucţiunea;
- dacă e necesar, preia un deplasament pentru a-l utiliza în calculul adresei efective;
- dacă e necesar, actualizează EIP pentru a indica dincolo de valoarea deplasamentului;
- preia valoarea constantă din memorie şi o trimite la ALU;
- actualizează EIP pentru a indica în memorie dincolo de valoarea constantei;
- ia valoarea operandului destinaţie din memorie şi o trimite la ALU;
- comandă ALU pentru adunare;
- memorează rezultatul înapoi în primul operand (memorie);
- actualizează indicatorii de condiţie conform rezultatului operaţiei de adunare.
De menţionat că sunt şi alte forme ale instrucţiunii ADD cu secvenţele lor de faze, dar
cele prezentate sunt cele mai semnificative. Aşa cum se vede din exemple pot fi necesare până
la 11 faze pentru finalizarea instrucţiunii. Aici este şi avantajul conceptului RISC, marea

99
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
majoritate a procesoarelor RISC având una sau două forme de ADD (registru-registru şi
poate constantă - registru). De asemenea se vede că din punct de vedere al timpului de
execuţie varianta ADD reg, reg este cea mai avantajoasă.

C. instrucţiunea JNZ ar presupune următoarea secvenţă de faze:


- preia octetul cu codul instrucţiunii (fetch opcod) din memorie;
- actualizează EIP pentru a indica următorul octet;
- decodifică instrucţiunea;
- preia octetul de deplasament pentru a determina distanţa de salt şi-l trimite la ALU;
- actualizează EIP pentru a indica următorul octet;
- testează flagul Zero pentru a vedea dacă este 0;
- dacă Zero = 0, atunci trimite EIP la ALU;
- dacă Zero = 0, comandă ALU să adune deplasamentul cu EIP;
- dacă Zero = 0, copiază rezultatul adunării înapoi în EIP.
Se observă că instrucţiunea JNZ necesită mai puţini paşi atunci când condiţia de salt
nu este îndeplinită. Aceasta este tipic pentru toate instrucţiunile de salt condiţionat.
Dacă fiecare pas va corespunde unui ciclu de ceas, un JNZ va dura între 6 şi 9 cicluri
de ceas, funcţie de efectuarea sau nu a saltului propriu-zis. Pentru că JNZ nu permite tipuri
diferite de operanzi există o singură secvenţă de paşi (spre deosebire de ADD).

D. instrucţiunea LOOP poate folosi o secvenţă cum ar fi:


- preia octetul cu codul instrucţiunii (fetch opcod) din memorie;
- actualizează EIP pentru a indica următorul octet;
- decodifică instrucţiunea;
- preia valoarea lui ECX şi o trimite la ALU;
- comandă ALU să decrementeze această valoare (ECX) ;
- trimite rezultatul înapoi în ECX şi setează un flag special dacă valoarea nu e 0;
- preia octetul de deplasament pentru a determina distanţa de salt şi-l trimite la ALU;
- actualizează EIP pentru a indica următorul octet;
- testează flagul special pentru a vedea dacă ECX a fost diferit de zero;
- dacă flagul este setat, trimite (copiază) EIP la ALU;
- dacă flagul este setat, comandă ALU să adune deplasamentul cu EIP;
- dacă flagul este setat, copiază rezultatul adunării înapoi în registrul EIP.
Deşi un anume procesor 80x86 poate să nu execute paşii concreţi menţionaţi mai sus,
toate instrucţiunile presupun executarea unei anume secvenţe de operaţii.

100
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei
Fiecare operaţie necesită un anumit timp pentru execuţie, în general un ciclu de ceas
per operaţie sau fază cum vom mai numi paşii de mai sus. Este evident că, odată cu numărul
de paşi, creşte şi timpul de execuţie al instrucţiunii. Acesta este motivul pentru care, în
general, instrucţiunile complexe se execută mai lent decât instrucţiunile simple.

De reţinut !
Din cele prezentate rezultă că execuţia unei instrucţiuni cuprinde
următoarele operaţii de bază:
 extragere cod operaţie – transferul din memoria de program în
registrul de instrucţiuni al primului cuvânt din codul maşină al
instrucţiunii, cuvânt care conţine codul operaţiei de executat prin
instrucţiune;
 decodificare – analiza cuvântului cod operaţie cu circuitele pentru
decodificarea instrucţiunilor şi transferul rezultatului decodificării la
unităţii de control şi sincronizare;
 transfer operanzi - transferul operanzilor între componentele SMPU
(memorie de program, memorie de date, registre, porturi de I/E) în
scopul execuţiei instrucţiunii;
 execuţie – execuţia operaţiei aritmetice, logice sau de transfer
precizată de codul operaţie al instrucţiunii.
Instrucţiunile 80x86 nu se execută într-un singur ciclu de ceas al
procesorului.
Execuţia unei instrucţiuni începe cu extragere cod operaţie şi
decodificare, continuând cu o secvenţă specifică de operaţii de bază
de transfer operanzi execuţie. Astfel este necesară funcţionarea
secvenţială şi sincronizată a microprocesorului, care se obţine prin
comanda componentelor sale de către unitatea de control şi
sincronizare. Viteza de execuţie a instrucţiunilor este funcţie de
frecvenţa semnalului de tact a microprocesorului. În general o
operaţie de bază se efectuează în 3 – 12 perioade ale semnalului de
tact. Intervalul corespunzător efectuării unei operaţii de bază se
numeşte ciclu maşină al sistemului. Ciclurile maşină corespunzătoare
unei instrucţiuni definesc un ciclu de instrucţiune.

101
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

Lucrare de laborator
Lucrarea aferentă acestei unităţi de învăţare se intitulează
„PROGRAMAREA ÎN LIMBAJ DE ASAMBLARE FOLOSIND
SIMULATORUL SMS32: accesul la memorie.
Obiectivele laboratorului sunt:
 Studiul memoriei simulatorului;
 Tehnici de adresare;
 Instrucţiuni de comparare;
 Instrucţiuni de salt

Test de autoevaluare
1. În ce constă adresarea imediată?
2. În ce constă adresarea registru?
3. În ce constă adresarea directă?
4. În ce constă adresarea indirectă (prin registru) ?
5. În ce constă adresarea indexată?
6. Definiţi ciclul instrucţiune, ciclul maţină, starea.
7. În ce constă modul de funcţionare real?
8. În ce constă modul de funcţionare virtual?
9. În ce constă modul de funcţionare protejat?
10. În ce constă modul de funcţionare nativ?
11. Care sunt paşi de execuţie pentru instrucţiunea MOV?
12. Care sunt paşi de execuţie pentru instrucţiunea ADD?
13. Care sunt paşi de execuţie pentru instrucţiunea LOOP?
14. Care sunt paşi de execuţie pentru instrucţiunea JNZ?

102
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

Lucrare de verificare la Unitatea de învăţare 5


Această unitate de învăţare se va regăsi în lista de subiecte pentru
examen prin următoarele subiecte:
1. Tehnici de adresare a memoriei;
2. Ciclurile de bază ale unui microprocesor;
3. Moduri de operare;
4. Execuţia instrucţiunilor: MOV şi ADD;
5. Execuţia instrucţiunilor: LOOP şi JNZ.

Răspunsuri şi comentarii la întrebările din testul de


autoevaluare
Răspunsurile la întrebările din testul de evaluare se găsesc în textul
unităţii de învăţare.

Concluzii
Execuţia unei instrucţiuni presupune următoarele etape: extragerea
instrucţiunii, decodificarea, extragerea operanzilor, execuţia operaţiei
şi salvarea rezultatului. În timpul execuţiei instrucţiunii
microprocesorul comunică cu celelalte componente ale sistemului
(memorie, interfeţe de intrare/ieşire) prin intermediul magistralei.
Pe magistrală se transferă instrucţiuni şi date, care se pastrează în
locaţii de memorie şi porturi de intrare/ieşire. Pentru vehicularea
informaţiilor se utilizează semnale de adresa şi semnale de comandă.
Transferul de informaţii între procesor şi celelalte componente cuplate
prin intermediul magistralei se realizează prin cicluri maşină. Un ciclu
maşină poate sa dureze un numar variabil de perioade de ceas. Pe
durata unui ciclu maşină se transfeă o singură dată (octet, cuvânt sau
dublu-cuvânt) a carei sursă sau destinaţie se află la adresa specificată
prin semnalele de adresă şi de comandă.

103
SISTEME CU MICROPROCESOARE
5. Microprocesoarele INTEL 80x86: tehnici de adresare a memoriei

Bibliografie

1. Dobriceanu Mircea; Sisteme cu microprocesoare; Notiţe de curs,


Tipografia Universităţii din Craiova, 2012 şi format electronic
postat pe http://www.em.ucv.ro
2. Dobriceanu Mircea; Sisteme de achiziţie şi microprocesoare,
Editura Universitaria Craiova, 2003, p.304, ISBN 973-8043-289-8
3. Rotar Dan; Arhitectura sistemelor de calcul, Editura ALMA
MATER, 1997

104
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine

Unitatea de învăţare nr. 6

MICROPROCESOARELE INTEL 80x86


LUCRUL CU STIVE ŞI SUBRUTINE

Cuprins Pagina
Obiectivele unităţii de învăţare nr. 6 106
6.1. Lucrul cu stiva 106
6.1.1. Aspecte generale 106
6.1.2. Instrucţiuni pentru lucru cu stiva 109
6.2. Lucrul cu subrutine 111
6.2.1. Aspecte generale 111
6.2.2. Instrucţiuni pentru lucru cu subrutine 112
6.2. 3. Transferul de parametri între program şi subrutine 116
Lucrare de laborator 116
Test de autoevaluare 117
Lucrare de verificare – unitatea de învăţare nr. 6 117
Răspunsuri şi comentarii la întrebările din testul de autoevaluare 117
Concluzii 117
Bibliografie – unitatea de învăţare nr. 6 118

105
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine
OBIECTIVELE unităţii de învăţare nr. 6

Principalele obiective ale Unităţii de învăţare nr. 6 sunt:


• Cunoaşterea structurii, rolului şi a instrucţiunilor pentru
lucrul cu stiva
• Cunoaşterea rolului şi a instrucţiunilor pentru lucrul cu
subrutinele

6.1. Lucrul cu stiva


6.1.1. Aspecte generale

Stiva este o zonă de memorie liniară, formată din locaţii de memorie amplasate la
adrese consecutive, cu acces pe la un singur capăt (top of stack – vârful stivei), prin
intermediul registrului SP (Stack Pointer – indicator al vârfului stivei). Deoarece funcţionarea
stivei implică atât operaţii de citire (extragere), cât şi de scriere (depunere) în stivă, stiva
trebuie organizată într-o zonă de memorie de tip RAM (Fig. 6.1).

Vârful iniţial al stivei (stiva goală)

Stiva creşte
Sensul crescător al
adreselor
SP – Vârful curent al stivei

Memorie RAM

Fig.6.1. Stiva microprocesorului

Rolul stivei este acela de a furniza o cale comodă de a stoca temporar informaţii (date
sau adrese) în memorie fără a reţine pentru fiecare, adresa exactă la care sunt stocate. Ceea ce
trebuie reţinut este doar ordinea în care informaţiile sunt stocate, deoarece ele vor fi extrase
din stivă în ordinea inversă celei în care au fost depuse.
Practic putem considera stiva ca un grup de registre organizaţi într-o structura LIFO
(Last In First Out - Ultimul Intrat Primul Ieşit). Deci dacă adăugăm o înregistrare în stivă
106
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine
aceasta se va adăuga peste precedentele. Pentru a extrage o anumită înregistrare din stivă
trebuie extrase mai întâi toate înregistrările depuse după aceasta şi deci care se află deasupra
acesteia (Fig. 6.2).

C000h SP=C000h C000h


BFFFh BFFFh
BFFEh BFFEh SP=BFFEh
BFFDh BFFDh
BFFCh Depunere în stivă BFFCh
BFFBh BFFBh

Extragere din stivă Depunere în stivă

C000h C000h
BFFFh BFFFh
BFFEh SP=BFFEh BFFEh
BFFDh BFFDh
BFFCh BFFCh SP=BFFCh
BFFBh Extragere din stivă BFFBh

Fig.6.2. Depunerea şi extragerea din stivă

Registrul SP conţine întotdeauna adresa de început (vârful stivei). La fiecare depunere


în stivă valoarea registrului SP este incrementată pentru a corespunde acestei noi înregistrări.
Stiva este o zonă de memorie, care poate fi definită folosind aceleaşi directive de
asamblare ca şi în cazul altor variabile, cu o singură menţiune: dacă pentru variabilele
obişnuite se marchează printr-o etichetă adresa de început a zonei de memorie rezervate
(adresa mai mică), pentru stivă se marchează adresa de după cea a ultimei locaţii rezervate,
care va constitui vârful stivei şi va iniţializa registrul SP. Motivul îl constituie faptul că stiva
creşte în sensul descrescător al adreselor.

De ce sunt necesare stivele ?


Stivele sunt strict necesare în lucrul cu subrutine (proceduri şi funcţii), când trebuie eliberate
registrele interne în vederea apelării unei subrutine care va încărca registrele cu propriile sale
date. Conţinutul registrelor este însă necesar la revenirea din subrutină. De aceea eliberarea
registrelor se face prin salvarea lor în stivă, într-o anumită ordine şi refacerea lor din stivă la
revenirea din subrutină în programul apelant.

107
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine

De reţinut !
 Stivele sunt formate în memoria RAM şi sunt adresabile cu registrul
segment SS si registrul pointer SP. Registrul SS conţine adresa de
bază a stivei iar SP conţine adresa relativă (deplasamentul sau offset-
ul) faţă de bază, a vârfului stivei.
 Un program poate utiliza mai multe stive, fiecare cu lungimea
maximă de 64 KB. Stivele au locaţii de 16 biţi şi funcţionează ca liste
LIFO (Last In First Out), adică ultimul operand introdus în stivă este
primul care poate fi extras.
 Un cuvânt este salvat în stivă la adresa relativă (SP-2); citirea din
stivă se face prin copiere de la adresa (SP), după care se face
actualizarea registrului pointer SP: (SP+2). Locaţiile din stivă sunt de
16 biţi şi ca urmare operanzii care se introduc şi se extrag în/din stivă
sunt cuvinte de 16 biţi iar adresele a două locaţii consecutive diferă
prin 2 ( în fiecare locaţie sunt doi octeţi).
 Se pot introduce în stivă operanzi de 16 biţi din registre cu excepţia
lui CS şi operanzi de 16 biţi din memorie. Extragerea din stivă se face
prin copiere într-un registru de 16 biţi, cu excepţia lui CS, sau în
memorie.
 Salvarea în stivă se face cu instrucţiunea PUSH iar extragerea din
stivă cu POP. Decrementarea registrului SP la introducere şi
incrementarea sa la scoatere se fac automat. Programatorul trebuie să
fixeze doar baza stivei în SS şi limita superioară a stivei, în SP. Toate
operaţiile cu stiva se realizează apoi foarte simplu, prin instrucţiunile
PUSH si POP. Adresele la care se fac transferurile se calculează
automat şi nu prezintă nici un interes. Tot ceea ce contează este
ordinea în care se face introducerea în stivă, deoarece la extragere
aceasta se inversează.

108
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine

6.1.2. Instrucţiuni pentru lucru cu stiva


 Instrucţiunea PUSH (Push Data – Salvează date în stivă)
Sintaxa instrucţiunii este:
PUSH <operand_2>
în care operand 2 (sursa) este un operand pe 16 biţi (registru general de 16 biţi, registru de
segment sau locaţie de memorie), iar semnificaţia este ‘‘copiază operand 2 în vârful
stivei’’. Concret execuţia instrucţiunii se face după secvenţa:
(SP) (SP) – 2
SS :((SP) + 1 : (SP)) operand 2
ceea ce înseamnă că se decremntează SP cu 2 şi în octeţii de la adresele (SP) + 1 şi (SP)
din segmentul de stivă se copiază operandul 2 (sursa).
Copierea respectă regula de memorare a cantităţilor pe mai mulţi octeţi şi anume partea
mai puţin semnificativă (partea low) se memorează la adrese mici.
O exprimare detailată a instrucţiunii este:
(SP) (SP) – 2
SS : ((SP) + 1) high (operand 2)
SS : ((SP)) low (operand 2)
Exemple:
PUSH BX
PUSH ES
PUSH [BX]
PUSH [BX+8]

 Instrucţiunea POP (Pop Data – Refă date din stivă)


Sintaxa instrucţiunii este:
POP <operand_1>
în care operand 1 (destinaţia) este un operand pe 16 biţi (registru general de 16 biţi,
registru de segment sau locaţie de memorie), iar semnificaţia este ‘‘copiază conţinutul
vârfului stivei în operand 1’’. Registrul CS nu poate apare ca destinaţie. Concret execuţia
instrucţiunii se face după secvenţa:
operand 1 SS : ((SP) + 1 : (SP))
(SP) (SP) + 2
ceea ce înseamnă că se transferă octeţii de la adresele (SP) + 1 şi (SP) din segmentul de
stivă în operandul 1 (destinaţie) şi apoi se incrementează SP cu 2.

109
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine
O exprimare detailată a instrucţiunii este:
high (operand 1) SS : ((SP) + 1)
low (operand 1) SS : ((SP))
(SP) (SP) + 2
Exemple:
POP BX
POP ES
POP ES: [DI]
POP [BP + 5]

Din analiza instrucţiunilor PUSH şi POP reiese că o secvenţă de refaceri ale unor cantităţi
salvate în stivă ( de exemplu conţinutul unor registre) trebuie scrisă în ordine inversă.
Exemplu:
Secvenţa de salvare este
PUSH AX
PUSH BX
PUSH CX
Secvenţa de refacere trebuie să fie
POP CX
POP BX
POP AX
Dacă registrele de mai sus conţin valorile AX = 2345h, BX = 6789h, CX = ABCDh, iar
registrul SP conţine înainte de salvări valoarea 1122h, atunci imaginea stivei va fi (Fig. 6.3).

1116 AB SP după PUSH CX


CD
1118 67 SP după PUSH BX
89
1120 23 SP după PUSH AX
45
1122 SP inţial

Fig.6.3. Utilizarea instrucţiuni PUSH

110
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine

De reţinut !
 La operaţiile cu stiva trebuie avut grije ca o secvenţă de refacere să
aducă indicatorul SP la valoarea de dinainte de secvenţa de salvare.
Acest lucru impune ca numărul operaţiilor POP să coincidă cu cel al
operaţiilor PUSH
 Nu este indicat să se modifice explicit locaţiile aflate în josul stivei,
adică la valori mai mari sau egale decât valoarea curentă a registrului
SP. În aceste locaţii se pot afla informaţii a căror alterare ar putea
afecta execuţia programului.
 PUSCH şi POP se mai pot folosi la transferul indirect al unor registre:
PUSH DS
POP ES
copiază conţimutul registrului DS în ES, lăsând indicatorul SP
neschimbat.

6.2. Lucrul cu subrutine


6.2.1. Aspecte generale
Setul de instrucţiuni al microprocesoarelor poate conţine şi instrucţiuni pentru lucrul cu
subrutine.
Lucrul cu subrutine s-a dezvoltat din necesitatea de a utiliza într-un program aceeaşi
secvenţă de instrucţiuni în mod repetat. Pentru evitarea unei astfel de repetiţii secvenţa de
instrucţiuni este tratată ca o parte distinctă a programului la care se face salt de câte ori este
nevoie în program de aceasta.
Deoarece în timpul execuţiei unei subrutine conţinutul registrelor din procesor se
alterează (îşi modifică valoarea), dacă la revenirea din subrutină conţinutul acestora nu este
restaurat, programul va folosi date eronate.
Pentru a evita acest lucru registrele care trebuie să-şi păstreze conţinutul vor fi salvaţi în
stivă şi restauraţi din aceasta.
La apelul succesiv a mai multor subrutine, adresele de revenire ale acestora sunt depuse
în stivă în ordine inversă a succesiunii salturilor (ultima adresă de revenire de la ultima
subrutină apelată este în vârful stivei, iar cea mai veche este cea mai depărtată, spre baza
stivei).

111
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine
Ca mod de lucru pentru apelul unei subrutine se poate respecta algoritmul:
 se apelează subrutina cu comanda CALL, automat în stivă este pusă adresa de revenire;
 salvăm în stivă registrele care ne interesează;
 se execută instrucţiunile din corpul subrutinei;
 se restaurează registrele salvate;
 se revine din subrutină cu instrucţiunea RET.

De reţinut !
 Subrutinele se utilizează pentru o structurare şi organizare mai bună a
programelor.
 Subrutinele reprezintă porţiuni de program utilizate frecvent pentru a
efectua anumite operaţii specifice.
 Subrutinele sunt apelate din diferite locuri ale programului, evitându-
se astfel repetarea unei aceleaşi secvenţe de instrucţiuni.
 O subrutină poate apela o altă subrutină, ceea ce impune utilizarea
unui mecanism specific pentru a se putea cunoaşte adresa de revenire,
la terminarea execuţiei unei subrutine, la punctul din program de unde
se făcuse apelarea ei.

6.2.2. Instrucţiuni pentru lucru cu subrutine


Procedurile se definesc în textul sursă astfel:
nume_proc PROC [FAR | NEAR]
.
.
.
RET
nume_proc ENDP
unde nume_proc este numele procedurii, iar parametrii FAR sau NEAR (opţionali)
indică tipul procedurii.
Procedurile sunt de două tipuri: FAR şi NEAR. O procedură FAR poate fi apelată şi din
alte segmente de cod decât cel în care este definită, pe când o procedură NEAR poate fi
apelată numai din segmentul de cod în care este definită.
Dacă nu se precizează parametrii FAR sau NEAR, tipul procedurii este dedus
dindirectivele simplificatede definire a segmentelor (funcţie de modelul de memorie folosit).
112
SISTEME CU MICROPROCESOARE
6. Microprocesorul INTEL 80x86: lucrul cu stive şi subrutine
În mod corespunzător, există apeluri de tip FAR, respectiv NEAR, precum şi
instrucţiuni