Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
SISTEME CU
MICROPROCESOARE
MANUAL
SISTEME CU MICROPROCESOARE
MANUAL
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
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).
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.
9
SISTEME CU MICROPROCESOARE
Introducere
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ă
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.
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
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
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).
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
Logica de
Unitate
control
control
Memorie Unitatea aritmetică
Program şi logică (ALU)
şi Date
Unitate intrare/ieşire
(I/O)
Logica de
Unitate
control
control
Memorie Unitate intrare/ieşire Memorie
Program (I/O) Date
Unitatea aritmetică
şi logică (ALU)
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ă.
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)
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
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
23
SISTEME CU MICROPROCESOARE
1. Concepte generale privind microprocesoarele
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
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.
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
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
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
32
SISTEME CU MICROPROCESOARE
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
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.
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).
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.
Dispozitive
I/O
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.
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.
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.
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.
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?
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
46
SISTEME CU MICROPROCESOARE
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
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
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
Fiecare dintre registre pot fi folosite pentru orice operaţie posibilă, dar sunt folosite de
către programatori în următoarele scopuri:
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.
53
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
Segmentul de stivă
Baza stivei
(valoarea iniţială SP sau
ESP)
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
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.
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).
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)
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ă.
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.
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ă.
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
Spaţiu de
Offset adrese
Adresă logică liniar
Selector segment
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
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ă
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?
63
SISTEME CU MICROPROCESOARE
3. Microprocesoarele INTEL 80x86: registrele şi organizarea memoriei
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
64
SISTEME CU MICROPROCESOARE
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
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.
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”.
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
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:
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
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:
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
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
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
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.
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).
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.
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
77
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
78
SISTEME CU MICROPROCESOARE
4. Microprocesoarele INTEL 80x86: setul de instrucţiuni
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)
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.
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)
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
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
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]
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
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
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
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.
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
DS
ofset
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
DS
ofset
[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]
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ă.
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
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).
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
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ă.
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
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
104
SISTEME CU MICROPROCESOARE
6. Microprocesorul 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
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).
Stiva creşte
Sensul crescător al
adreselor
SP – Vârful curent al stivei
Memorie RAM
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 C000h
BFFFh BFFFh
BFFEh SP=BFFEh BFFEh
BFFDh BFFDh
BFFCh BFFCh SP=BFFCh
BFFBh Extragere din stivă BFFBh
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
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).
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.
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.