You are on page 1of 47

Arhitectura Calculatoarelor 1

Arhitectura Calculatoarelor

Introducere
Un calculator numeric este constituit dintr-un ansamblu de resurse fizice (hardware) i de programe
de sistem (software de sistem) care asigur prelucrarea automat a informaiilor, n conformitate cu
algoritmii specificai de utilizator prin programele de aplicaii (software utilizator).
Arhitectura calculatorului cuprinde dou componente principale:
a) arhitectura setului de instruciuni (ASI);
b) implementarea mainii, cu cele dou sub - componente:
organizare;
hardware.
Arhitectura setului de instruciuni este ceea ce trebuie s tie un programator pentru a scrie programe n
limbaj de asamblare, respectiv pentru a concepe i construi un program de tip compilator, sau rutine
destinate sistemului de operare.
Termenul organizare include aspectele de nivel nalt ale unui proiect de calculator, ca de exemplu
structura intern a UCP (unitatea central de procesare, microprocesor), structura i organizarea
magistralelor, organizarea sistemului de memorie. Noiunea de hardware (resurse fizice) e utilizat pentru
a ne referi la aspectele specifice ale implementrii calculatorului. Acestea includ proiectul logic de detaliu
i tehnologia de realizare a mainii de calcul.

1. Reprezentarea funcional a unui calculator


Un calculator poate fi descris att sub aspect funcional ct i structural. Circuitele electronice ale unui
calculator recunosc i execut doar un set limitat de instruciuni elementare, codificate n form binar.
Aceste instruciuni sunt doar succesiuni de bii (1 i 0) pe care procesorul le nelege - decodific i le
execut. Indiferent de tipul de main, instruciunile recunoscute sunt rareori mai complicate dect
[Tanenbaum]:
adun dou numere;
verific dac un numr este egal cu zero;
copiaz date dintr-o zon a memoriei calculatorului n alt zon.

De exemplu, la procesoarele Intel din seria 80x86 codul binar al instruciunii urmtoare:
0000 0100 0000 0110
comand adunarea coninutului unui registru intern de 8 bii (numit registrul al) cu valoarea imediat 6.
Adesea, cnd utilizatorul este obligat s lucreze cu valori numerice binare, se folosete reprezentarea n
hexazecimal, care este mai compact i mai uor de citit. Codul, n hexazecimal, al instruciunii
corespunztoare succesiunii binare de mai sus este 04 06 hex. i acest mod de scriere a instruciunilor
este ns complicat pentru programator.
Scrierea instruciunilor se poate realiza, la nceput, n limbaj natural, transpunndu-se apoi ntr-
un limbaj artificial, numit limbaj de programare.
Limbajul de programare reprezint un set de instruciuni, mpreun cu regulile de organizare ale
acestora ntr-un program. Totalitatea regulilor de scriere ale instruciunilor reprezint sintaxa limbajului,
iar totalitatea regulilor prin care se asociaz o semnificaie instruciunilor reprezint semantica limbajului.
Calculatorul poate executa numai instruciuni exprimate intern sub forma unor iruri de cifre
binare. Programele n care instruciunile sunt scrise sub aceast form se numesc programe n limbaj
main. Limbajul main este caracteristic fiecrui tip de calculator. Scrierea i introducerea programelor
sub aceast form este dificil. Pentru simplificarea scrierii programelor, au fost create limbaje n care
fiecrui cod de instruciune i s-a ataat un nume mnemonic. Acest mod de reprezentare a instruciunilor
main se numete limbaj simbolic sau limbaj de asamblare. Acest limbaj permite utilizatorului s
realizeze codificri simbolice ale instruciunilor i ale adreselor de memorie.
Pentru a se executa un program n limbaj de asamblare, acesta trebuie translatat n prealabil n
limbaj main, printr-un proces numit asamblare. Programul care se translateaz se numete program
Arhitectura Calculatoarelor 2
surs, iar cel rezultat n urma translatrii se numete program obiect. Operaia de translatare a
programului surs n program obiect este executat de un program special numit asamblor.
O instruciune n limbaj de asamblare corespunde unei instruciuni n limbaj main, deosebirea dintre ele
constnd numai n modul de reprezentare. Deci, fiecare instruciune n limbaj de asamblare este
translatat ntr-o singur instruciune n limbaj main.
Un limbaj de asamblare este specific unui calculator, astfel nct trebuie s secunoasc
instruciunile i organizarea intern a acelui calculator. Din acest motiv, s-au elaborat limbaje pentru
programe care se pot executa pe orice calculator. Acestea sunt limbaje orientate pe probleme sau limbaje
de nivel nalt, spre deosebire de limbajele de asamblare, care sunt limbaje orientate pe calculator sau
limbaje de nivel sczut. Asemenea limbaje de nivel nalt sunt Pascal, C, LISP, PROLOG etc.
Unei instruciuni ntr-un limbaj de nivel nalt i corespunde o succesiune de instruciuni n limbaj
main. Translatarea n limbajul main se poate realiza cu ajutorul unui compilator, care genereaz din
programul surs un program executabil, acesta fiind executat dup ce ntregul program a fost compilat.
O alt posibilitate este utilizarea unui interpretor, care translateaz fiecare instruciune n limbajul
de nivel nalt ntr-o succesiune de instruciuni main, acestea fiind executate imediat. n acest caz nu se
genereaz un program executabil. Viteza de execuie este ns redus, deoarece fiecare instruciune
trebuie interpretat chiar dac ea este executat n mod repetat.
Uneori este mai convenabil s se considere c exist un calculator ipotetic sau o main virtual, a
crui limbaj main este un anumit limbaj de nivel nalt. Un asemenea calculator ar executa direct
instruciunile limbajului de nivel nalt, fr a fi necesar utilizarea unui translator (compilator) sau
interpretor. Chiar dac implementarea unei maini virtuale care s lucreze direct cu un limbaj de nivel
nalt ar fi prea costisitoare, se pot scrie programe pentru aceast main, deoarece aceste programe pot fi
translatate sau interpretate cu un program care poate fi executat direct de calculatorul existent.

Modelul unui calculator numeric


Un model posibil al unui calculator numeric modern reprezint o ierarhie de maini virtuale pe
mai multe nivele (Figura 1.1).

Figura 1.1 - Ierarhia de nivele a unui calculator modern

Nivelul 0, numit nivelul logicii digitale, este reprezentat de componentele hardware ale calculatorului
(maina fizic). Circuitele acestui nivel execut instruciunile main ale nivelului 1. Elementele de baz
ale acestor circuite sunt porile logice, fiecare poart fiind format la rndul ei dintr-un numr de
Arhitectura Calculatoarelor 3
tranzistoare. O poart logic are una sau mai multe intrri digitale (semnale reprezentnd 0 logic sau 1
logic), i are ca ieire o funcie simpl a acestor intrri, de exemplu I logic, SAU logic. Nivelul 1, numit
nivelul de microprogram, interpreteaz instruciunile nivelului 2, pentru fiecare instruciune a acestui
nivel existnd cte un microprogram.
Fiecare microprogram definete n mod implicit un limbaj de nivel 2 i o main virtual. De
obicei exist multe similariti ntre mainile virtuale de nivel 2, chiar i n cazul calculatoarelor diferiilor
productori. Acest nivel se numete nivelul mainii convenionale (Hardware abstraction layer HAL?).
Atunci cnd se descrie setul de instruciuni al unui calculator, se descrie de fapt maina virtual de nivel
2, i nu maina real de nivel 1. Sunt descrise deci instruciunile interpretate de ctre microprogram, i nu
instruciunile executate direct prin hardware.
De menionat c la anumite calculatoare nivelul de microprogram lipsete. La aceste calculatoare,
instruciunile mainii convenionale sunt executate direct de circuitele electronice ale nivelului 0. Nivelul
3 este de obicei un nivel hibrid (Tanenbaum), deoarece multe din instruciunile limbajului su sunt
prezente n cadrul instruciunilor nivelului 2. Exist n plus un set de noi instruciuni, o organizare diferit
a memoriei, posibilitatea de execuie a mai multor programe n paralel i alte faciliti. Noile faciliti
adugate la nivelul 3 sunt realizate cu ajutorul unui interpretor, numit sistem de operare, iar instruciunile
identice cu cele ale nivelului 2 sunt executate direct prin microprogram. Nivelul 3 este numit nivelul
sistemului de operare. Un sistem de operare reprezint un ansamblu de programe care asigur exploatarea
optim a resurselor hardware i software ale unui sistem de calcul.
Sistemele de operare au fost create pentru simplificarea activitii de programare, utilizarea optim
a posibilitilor de lucru ale echipamentelor i reducerea interveniei utilizatorilor n cursul execuiei
programelor. Nivelele 0-3 nu sunt destinate utilizrii directe de ctre programatorii obinuii, ci pentru
rularea translatoarelor i interpretoarelor scrise de programatorii de sistem. Nivelul 4 i nivelele
superioare sunt destinate programatorilor de aplicaii.
Nivelul 4 este nivelul limbajului de asamblare. Programele scrise n limbaj de asamblare sunt
translatate n limbajul nivelului 1, 2 sau 3 i apoi interpretate de ctre maina virtual corespunztoare.
Nivelul 5 const din limbajele destinate programatorilor de aplicaie, fiind numit nivelul limbajelor de
nivel nalt. Programele scrise n aceste limbaje sunt translatate n limbajele nivelului 3 sau 4 cu ajutorul
compilatoarelor sau interpretoarelor. Nivelul 6 reprezint nivelul aplicaiilor. Const din colecii de
programe destinate unor domenii specializate, de exemplu pentru administraie, economie, proiectare
asistat de calculator, grafic etc.
Fiecare nivel reprezint o abstractizare distinct, cu diferite obiecte i operaii. Setul tipurilor de
date, a operaiilor i facilitilor fiecrui nivel reprezint arhitectura nivelului respectiv. Arhitectura
trateaz acele aspecte care sunt vizibile utilizatorului nivelului respectiv, ca de exemplu dimensiunea
memoriei disponibile. Aspectele de implementare, ca de exemplu tehnologia utilizat pentru
implementarea memoriei, nu fac parte din arhitectur. Arhitectura calculatorului reprezint studiul
proiectrii acelor pri ale unui sistem de calcul care sunt vizibile pentru programatori.
2 Arhitectura Intel8086.
2.1 Noiuni generale. Modelul program.
n Assembler, calculatorul este vzut la nivelul hardware: adrese fizice de memorie, registre,
ntreruperi etc. Sunt necesare unele noiuni pregtitoare.
Unitatea de baz a informaiei memorate n calculator este bitul. Un bit reprezint o cifr binar (de aici
i numele, care e o prescurtare de la binary digit), deci poate avea valorile 0 sau 1. Modelul hardware
corespunztor este acela de bistabil. Un bistabil este deci un circuit electronic cu dou stri stabile,
codificate 0 i 1, capabil s memoreze un bit de informaie.
Un grup de bistabili formeaz un registru. De exemplu, 8 bistabili formeaz un registru de 8 bii.
Informaia care se poate memora ntr-un asemenea registru poate fi codificat n binar, de la valoarea
00000000 (toi biii egali cu 0), pn la valoarea 11111111 (toi biii egali cu 1). Este uor de vzut c
numrul combinaiilor care pot fi memorate este 256 (2 la puterea a 8-a). n general, un registru de n bii
va putea memora 2n combinaii distincte. Aceste combinaii se numesc octei sau bytes (dac n = 8),
respectiv cuvinte (dac n = 16, 32 etc).
Memoria unui calculator este vzut ca o succesiune de octei. Fiecare octet are asociat o adres
de memorie. Pentru a putea adresa memoria, e nevoie de un registru de adrese, a crui lungime determin
dimensiunea maxim a memoriei. Dac avem un regsitru de adrese de 8 bii, atunci vom putea adresa 2 8
Arhitectura Calculatoarelor 4
octei de memorie. Procesorul 8086 are un registru de adrese de 20 de bii, deci poate adresa 2 20 octei de
memorie (sau 1 megaoctet de memorie). Arhitectura procesorului 8086, din punctul de vedere al
programului utilizator, este ilustrat schematic n figura 2.1. Sunt figurate registrele accesibile prin
program.

Figura 2.1 - Registrele procesorului 8086

Toate registrele sunt de 16 bii. O serie de registre (AX, BX, CX, DX) sunt disponibile i la nivel de octet,
prile mai semnificative fiind AH, BH, CH i DH, iar cele mai puin semnificative, AL, BL, CL i DL.
Denumirile registrelor sunt:
AX - registru acumulator
BX - registru de baz general
CX - registru contor
DX - registru de date
BP - registru de baz pentru stiv (base pointer)
SP - registru indicator de stiv (stack pointer)
SI - registru index surs
DI - registru index destinaie
Registrul notat FLAGS cuprinde flagurile procesorului, sau bistabililor de condiie, iar registrul IP
(instruction pointer) este registrul de instruciuni.
Denumirile registrelor de segment sunt:
CS - registru de segment de cod (code segment)
DS - registru de segment de date (data segment)
SS - registru de segment de stiv (stack segment)
ES - registru de segment de date suplimentar (extra segment)
Se observ c denumirile registrelor de segment corespund zonelor principale ale unui program
executabil. Astfel, perechea de registre (CS:IP) va indica totdeauna adresa urmtoarei instruciuni care se
va executa, iar perechea (SS:SP) indic totdeauna adresa vrfului stivei. Registrele DS i ES sunt folosite
pentru a accesa date.
Registrul de flaguri (bistabili de condiie) al procesorului 8086 are configuraia din Figura 2.2. O
serie de flaguri sunt flaguri de stare: acestea sunt poziionate la 0 sau la 1 ca urmare a unor operaii
aritmetice sau logice. Celelalte flaguri controleaz anumite operaii ale procesorului.
Semnificaia flagurilor este urmtoarea:
CF (Carry Flag, bistabil de transport) - semnific un transport sau un mprumut din/n bitul cel mai
semnificativ al rezultatului, de exemplu la operaii de adunare sau de scdere.
Arhitectura Calculatoarelor 5

Figura 2.2 - Registrul de flaguri al procesorului 8086

PF (Parity Flag, flag de paritate) - este poziionat n aa fel nct numrul de bii egali cu 1 din
octetul cel mai puin semnificativ al rezultatului, mpreun cu flagul PF, s fie impar; altfel formulat,
suma modulo 2 (XOR) a tuturor biilor din octetul c.m.p.s. i a lui PF s fie 1.
AF (Auxiliarry Carry Flag, bistabil de transport auxiliar) - indic un transport sau un mprumut
din/n bitul 4 al rezultatului.
ZF (Zero Flag, bistabil de zero) - este poziionat la 1 dac rezultatul operaiei este 0.
SF (Sign Flag, bistabil de semn) - este poziionat la 1 dac b.c.m.s. al rezultatului (bitul de semn)
este 1.
OF (Overflow Flag, bistabil de depire) - este poziionat la 1 dac operaia a condus la o depire
de domeniu a rezultatului (la operaii cu sau fr semn).
TF (Trap Flag, bistabil de urmrire) - dac este poziionat la 1, se foreaz o ntrerupere, pe un
nivel predefinit, la execuia fiecrei instruciuni; acest fapt este util n programele de depanare, n care
este posibil rularea pas cu pas a unui program.
IF (Interrupt Flag, bistabil de ntreruperi) - dac este poziionat la 1, procesorul ia n consideraie
ntreruperile hardware externe; altfel, acestea sunt ignorate.
DF (Direction Flag, bistabil de direcie) - precizeaz sensul (cresctor sau descresctor) de variaie
a adreselor la operaiile cu iruri de octei sau de cuvinte.
Flagurile CF, PF, AF, ZF, SF i OF sunt numite flaguri de stare (aritmetice). Flagurile TF, IF i DF sunt
numite flaguri de control.
Procesorul 8086 dispune de adrese pe 20 de bii, fiind capabil s adreseze 1 megaoctet de memorie
20
(2 ). Se pune problema cum se formeaz adresa fizic pe 20 de bii (deci pe 5 cifre hexa), deoarece toate
registrele procesorului sunt de 16 bii, putnd codifica adrese n domeniul 0000...0FFFFH (pe 4 cifre
hexa), deci ntr-un spaiu de maxim 64 KO.
Memoria unui sistem cu procesor 8086 este divizat n segmente. Un segment este o zon
continu de memorie, de lungime maxim de 64 KO, care ncepe la o adres fizic multiplu de 4. Acest
fapt nseamn c ultima cifr hexa a adresei de nceput a unui segment este totdeauna 0. Ca atare, aceast
cifr se poate omite i adresa de segment se poate reprezenta tot pe 16 bii. Adresele de nceput ale
segmentelor se vor gsi ntotdeauna ntr-unui din cele 4 registre de segment.
Adresarea n interiorul unui segment se realizeaz printr-un deplasament (offset) relativ la nceputul
segmentului. Deoarece un segment nu poate depi 64 KO, deplasamentul se poate memora tot pe 16 bii.
Deplasamentul poate fi o constant sau coninutul unui registru care permite adresarea memoriei.
n concluzie, pentru adresarea unui octet de memorie, se folosesc dou entiti pe 16 bii: o adres
de segment (coninut obligatoriu ntr-un registru de segment) i un deplasament. Deoarece ambele
entiti sunt pe 16 bii, se vorbete de adrese (sau pointeri) de 32 de bii, dei adresa fizic este doar pe 20
de bii.
Formarea adresei fizice (pe 20 de bii) este realizat automat (prin hardware) de ctre o
component a procesorului, conform Figurii 2.3.
Concret, adresa fizic se obine prin deplasarea adresei de segment cu 4 bii la stnga i prin
adunarea deplasamentului. Pentru specificarea unei adrese complete (de 32 de bii), se folosete notaia
(segment:offset) sau (registru_segment:offset). De exemplu, putem specifica o adres prin (18A3:5B27)
sau prin (DS:5B27).
Arhitectura Calculatoarelor 6

Figura 2.3 - Formarea adresei fizice

Trebuie remarcat faptul c asocierea (segment:offset) - adres fizic nu este biunivoc, deoarece la o
aceeai adres fizic pot s corespund mai multe perechi (segment:offset). De exemplu, perechile
(18A3:5B27) i (18A2:5B37) reprezint aceeai adres fizic. n situaia n care deplasamentul este redus
la minim, adic n domeniul 0...F, corespondena devine biunivoc.
O adres complet de 32 de bii este memorat cu offsetul la adrese mici i cu adresa de segment la adrese
mari. Adresele complete se pot obine cu directiva DD (Define Double-Word).

2.2 Definirea segmentelor. Structura programelor

Segmentele logice conin cele trei componente ale unui program: cod, date si stiv. Modul in care
pot fi specificate segmentele sunt:
definirea simplificata;
definirea completa a segmentelor.

Definirea simplificat a segmentelor


Definirea simplificata ascunde multe detalii ale definirii segmentelor si utilizeaz aceleai convenii
implementate de Microsoft in limbajele de nivel nalt.
Pentru a scrie un program ASM ntr-o form simpl, se folosesc directivele simplificate de
definire a segmentelor. Acestea sunt:
.model small (precizeaz un model de memorie)
.code (definire de segment de cod)
.stack n (definire de segment de stiv)
.data (definire de segment de date)
end etichet (sfrit logic al programului)
n principiu, segmentul de cod va cuprinde programul executabil (instruciuni), iar segmentul de date
va cuprinde date definite de utilizator. Segmentul de stiv nu este folosit explicit. Comentariile se scriu
folosind simbolul ;. Ceea ce urmeaz dup ; pn la sfritul liniei curente, este considerat comentariu.
Utiliznd directive simplificate de segmentare, excluznd abuzul de limbaj, aa-zisul stil TASM, structura
este:
.MODEL small
.STACK 512
.DATA

definirea datelor

.CODE
Arhitectura Calculatoarelor 7

declarare si definire proceduri

start: mov ax,@data


mov ds,ax

program principal

end start

Directiva .stack aloc o zon avnd lungimea n (.stack n) , zon fiind definit ca stiv (ex: .stack
200h va aloca un segment de lungime 512 octei). Directiva rezerv (nu si iniializeaz) zona dedicat
stivei. Aciunea de iniializare este opional. Putem scrie si .stack 512.
Directiva .code precede segmentul de program. ncrcarea acestui segment este realizata automat de
ctre DOS. In schimb registrul ds va trebui ncrcat de ctre programator.
Simbolul @data va primi adresa segmentului de date, abia dup momentul editrii legturilor. Date
pot exista si in cadrul segmentului de cod. Registrele de segment nu sunt niciodat ncrcate cu valori
absolute. Se las in seama sistemului de operare sarcina amplasrii in memorie a segmentelor. Ordinea
este asigurata tot de ctre componentele sistemului de operare.
Directiva .model definete modul de dispunere in memoria RAM a segmentelor care alctuiesc un
program. Sistemul DOS admite 6 modele. Sistemul OS/2 mai admite si modelele XLARGE si
THREAD.
Modele de memorie pot fi tiny, small, medium, large sau huge. Semnificaia acestor tipuri este:
tiny - toate segmentele (date, cod, stiv) se pot genera ntr-un spaiu de 64KO i formeaz un singur
grup de segmente. Se folosete la programele de tip COM. Toate salturile, apelurile i definiiile de
proceduri sunt implicit de tip NEAR. Adresarea simbolurilor situate la distanta (FAR) spre deosebire
de cele situate in apropiere (NEAR) va dura mai multe cicluri main, deoarece este vorba de
ncrcarea celor 2 componente segment si respectiv deplasament.
small - datele i stiva sunt grupate ntr-un singur segment iar codul n alt segment. Fiecare din acestea
nu trebuie s depeasc 64KO. Toate salturile, apelurile i definiiile de proceduri sunt implicit de tip
NEAR;
medium - datele i stiva sunt grupate ntr-un singur segment (cel mult egal cu 64KO), dar codul poate
fi n mai multe segmente separate (nu se grupeaz), deci poate depi 64KO. Salturile i apelurile sunt
implicit tip FAR iar definiiile de proceduri sunt implicit de tip far.
compact - codul generat ocup cel mult 64KO (se grupeaz), dar datele i stiva sunt n segmente
separate (pot depi 64KO). Apelurile i salturile sunt implicit de tip NEAR. Se utilizeaz adrese
complete (segment i offset) atunci cnd se acceseaz date definite n alte segmente.
large - att datele ct i codul generat pot depi 64KO.
huge - este asemntor modelului large, dar structurile de date pot depi 64KO; se utilizeaz adrese
complete normalizate n care offsetul este redus la minim (n domeniul 0 - 15), ceea ce face ca o
adres fizic s fie descris de o unic pereche (segment, offset).

Definirea complet a segmentelor

Definirea completa a segmentelor utilizeaz sintaxa:


nume_segment SEGMENT

nume_segment ENDS

Dac n modulul de program, codul, datele si stiva nu depesc fiecare n parte 64koctei, atunci
structura general a unui modul de program cu 3 segmente logice (de cod (program), date i stiv) este:

Segment SSEG SEGMENT


Stiv
DW 100 DUP(?)
Arhitectura Calculatoarelor 8
SSEG ENDS

Segment DSEG SEGMENT


de date
definirea datelor

DSEG ENDS

Segment CSEG SEGMENT


de cod ASSUME cs:CSEG,ds:DSEG,ss:SSEG,es:DSEG

declarare si definire proceduri

start: mov ax,DSEG ; iniializarea registrelor segment se face numai in


mov ds,ax ; modulul principal
mov es,ax ; ds,es DSEG

programul principal

CSEG ENDS ; sfritul modulului


END start ; adresa start se include numai in modulul principal

Directiva ASSUME realizeaz o conexiune simbolic (logic) ntre definirea instruciunilor i


datelor n segmente logice (cuprinse ntre SEGMENT i ENDS) la momentul asamblrii i accesul, la
execuie, la instruciuni i date prin registrele de segment.
Etichetele sunt nume simbolice de adrese ce identific instruciunile. Etichetele pot fi referite n
alte instruciuni pentru executarea salturilor n program. Dac referirile la o etichet sunt fcute n cadrul
segmentului n care ea este definit atunci se spune ca ea are atributul NEAR .
Pentru declararea etichetelor in segmentul de program (etichete adrese de instruciuni) se utilizeaz
operatorul : (ex: START:)
Directiva END marcheaz sfritul logic al unui modul de program i e obligatorie n toate
modulele. Tot ce se gsete n fiierul surs dup aceast directiv este ignorat la asamblare. Forma
general este:
END [punct_de_start]
n care punct_de_start este o etichet sau un nume de procedur care marcheaz punctul n care se va da
controlul dup ncrcarea programului n memorie.

2.3 Tipuri de date


Bitul
Cel mai mic element de memorare a unei informaii este bitul, n care se poate memora o cifra
binara, 0 sau 1.
De obicei informaia de prelucrat se reprezint pe segmente contigue de bii denumite tetrade,
octei, cuvinte, dublu cuvinte, quadwords si tenbytes.

Tetrada
Tetrada este o secven de 4 bii, numerotai 0,1,2,3 de la dreapta la stnga, bitul 0 fiind cel mai
puin semnificativ, iar bitul 3 cel mai semnificativ:

1 0 1 1
3 2 1 0
Octetul (Byte)
Octetul sau byte este un element de numerotare, ce cuprinde o secvena de 8 bii. Octetul este unul
dintre cele mai importante elemente (celule ) de memorare adresabile. Cei 8 bii ai unui octet sunt
numerotai cu 0,1,2,...7 de la dreapta la stnga:
Arhitectura Calculatoarelor 9

0 1 1 1 0 1 0 1
7 6 5 4 3 2 1 0
Octetul este format din 2 tetrade, tetrad inferioara (din dreapta) conine biii 0, 1, 2, 3, iar cea
superioara (din stnga) conine biii 4, 5, 6, 7 ai octetului.
Cuvntul(Word)
Cuvntul este o secvena de 2 octei, respectiv 16 bii, numerotai de la dreapta spre stnga, astfel
0, 1, 2 ......14, 15. Bitul cel mai semnificativ este bitul 15. Primul octet(inferior) din cuvnt conine biii 0,
1, 2, 3, 4, 5, 6, 7, iar al doilea octet(superior), biii 7, 8, 9, 10, 11, 12, 13, 14, 15.

1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Cuvntul poate fi reprezentat printr-un registru de 16 bii sau n doi octei de memorie. In
memorie, octetul inferior (biii 0-7) este memorat la adresa mai mic, iar octetul superior (biii 8-15) la
adresa cea mai mare.
De exemplu cuvntul 4567h se reprezint intr-un registru de 16 bii sub forma 4567h, iar n
memorie la adresa 1000 sub forma 6745 (octetul 67 la adresa 1000, iar octetul 45 la adresa 1001).

Dublu cuvnt (Double Word)


O succesiune de 2 cuvinte (4 octei, 32 bii), reprezint un dublu cuvnt. Cei 32 de bii ai unui
dublu cuvnt sunt numerotai de la dreapta la stnga prin 0, 1, 2, ......30, 31. Bitul cel mai semnificativ
este bitul 31, octetul cel mai puin semnificativ conine biii 0-7, iar cel mai semnificativ octet (octetul 4)
conine biii 23-31.
Un dublu cuvnt poate fi reprezentat ntr-un registru de 32 bii sau pe 4 octe i consecutivi de
memorie. In memorie, octetul 1-cel mai puin semnificativ este memorat la adresa cea mai mica, iar
octetul 4-cel mai semnificativ la adresa cea mai mare.
De exemplu dublul cuvnt 12 34 56 78h, aflat la adresa 2000, va fi memorat astfel 78 56 34 12, cu
octetul 78h la adresa 2000, iar octetul 12h la adresa 2003.

Quadword
Quadword (qword) este format din 2 dublu cuvinte(4 cuvinte, respectiv 8 octei succesivi de
memorie). Cei 64 bii ai unui qword sunt numerotai de la dreapta la stnga astfel: 0, 1, 2, ......62, 63. Bitul
cel mai semnificativ este bitul 63. In memorie octetul 1 se reprezint la adresa cea mai mica, iar octetul 8
la adresa cea mai mare.

Tenbyte (10 octei)


O succesiune de 10 octei formeaz un tenbyte (tb). Cei 80 de bii ai elementului sunt numerota i
de la dreapta la stnga cu 0, 1, 2,......78, 79. In memorie octetul cel mai pu in semnificativ (bi ii 0-7) se
reprezint la adresa cea mai mica, iar octetul 10 ( biii 73-80) la adresa cea mai mare.

2.4 Definirea datelor


n limbajele de asamblare 80x86 se poate opera cu anumite tipuri de date, recunoscute de
procesor, acesta dispunnd de directive (pseudoinstructiuni) specifice pentru definirea lor.

a) Byte (octet).
Acest tip de date ocupa 8 bii, adic un octet(byte). Informaia dintr-un octet poate fi: un ntreg
fr semn cuprins intre 0 si 225, un ntreg cu semn cuprins intre 128 si 127, sau un caracter ASCII.
Definirea datelor de tip byte se face cu ajutorul directivei DB(Define Byte) care are sintaxa:

[variabila] DB lista expresii


unde
-variabila, opional, este un identificator asociat adresei efective a primului octet de memorie
generat, corespunztor primei expresii din lista de expresii
-lista-expresii cuprinde expresii constante(calculabile in momentul asamblrii) si separate prin
virgula.
Fie directivele:
Arhitectura Calculatoarelor 10
alfa DB 65, 72h, 75o, 11011b, 11h+22h, 0ach
DB -65, 'a', 'abc'
In memorie ncepnd de la adresa simbolica alfa, se va genera secvena de octei, reprezentata in
hexazecimal :

41 72 3d 1b 33 ac bf 61 61 62 63
alfa +0 +1 +2 +3 +4
Valoarea binara 11011b va fi generata la adresa alfa+3.
b) WORD (cuvnt).
Un cuvnt ocupa doi octei (16 bii) si poate fi reprezentat intr-un registru de 16 bi i sau in 2 octe i
consecutivi de memorie. Numerotarea biilor in cadrul unui cuvnt se face de la 0 la 15 (bitul 15 e bitul
cel mai semnificativ al cuvntului, iar bitul 0 este bitul cel mai puin semnificativ), numerotarea se face de
la dreapta la stnga:
Informaia memorata intr-un cuvnt poate fi :
-un ntreg pe 16 bii cu semn (bitul 15 este bitul de semn), cuprins intre -215 si 215 1,
- un ntreg pe 16 bii fr semn, cuprins intre 0 si 216
-sau o adresa de memorie de 16 bii.
Reprezentarea celor 2 octei ai cuvntului in memorie se face astfel nct octetul cel mai puin
semnificativ este memorat la adresa cea mai mica. De exemplu: daca valoarea 2345h este memorata la
adresa 2000h, atunci octetul 45h se va afla la adresa 2000h, iar octetul 23h la adresa 2001h.
Generarea datelor de tip cuvnt se poate face folosind directiva de tip DW(Define Word), a crei
sintaxa este :
[variabila] DW lista de expresii
unde:
variabil, opional, este un identificator asociat adresei efective a primului cuvnt de memorie
generat, corespunztor primei expresii din lista de expresii.
lista de expresii este o lista de expresii constante separate prin virgula.
Fie secvena de directive:
beta DW 4567h, 0bc4ah, 1110111011b, 2476o
DW -7683, 7683, 'ab'
In memorie de la adresa beta se vor genera octeii:
67 45 4a bc bb 03 3e 05 fd e1 03 e1 62 61
beta +2 +4 +6 +8 +10 +12 +14
Constanta octala 2476o este generat de la adresa beta +6.

c) Double WORD(dublu cuvnt)


Un dublu cuvnt ocupa 2 cuvinte sau 4 octei ( 32 bii ) si poate fi reprezentat in memorie pe 4
octei consecutivi, ntr-o pereche de registre de 16 bii sau ntr-un registru de 32 bii (la procesoarele de 32
bii).
Informaia memorata intr-un dublu cuvnt poate fi:
un ntreg pe 32 bii, cu sau fr semn;
un numr real in simpl precizie;
sau o adres fizic de memorie de 32 bii.
Generarea datelor de tip dublu cuvnt se poate face folosind directiva DD ( Define Double Word), a
crei sintaxa este:
[variabil] DD lista expresii
unde:
- variabil, opional, este un identificator asociat adresei efective primului dublu cuvnt de
memorie generat corespunztor primei expresii din lista de expresii;
- lista de expresii este o lista de expresii constante separate prin virgula.
Reprezentarea celor doua cuvinte a unui dublu cuvnt de memorie se face astfel nct cuvntul cel
mai puin semnificativ este memorat la adresa cea mai mica. De exemplu dublul cuvnt 12345678 h, aflat
la adresa 2000h se memoreaz astfel: cuvntul 5678h se memoreaz la adresa 2000h, iar cuvntul 1234h
la adresa 2002h, adic adresa de segment este memorata la adrese mari, iar deplasamentul (offsetul) la
adrese mici.
Arhitectura Calculatoarelor 11
Secvena de directive :
gama DD 12345678h, 1, -1
DD 1.0, -1.0
DD gama
presupunnd c memorarea se face de la adresa 4512:3467 va conduce la generarea urmtoarei secvene
de octei:

78 56 34 12 01 00 00 00 ff ff ff ff 00 00 80 3f
gama +4 +8 +12 +16

00 00 80 bf 67 34 12 45
gama+16 +20
Constanta reala -1.0 se asambleaz la adresa gama + 16.

d) QUAD WORD (8 octei)


Tipul Quad word (qword) ocupa 8 octei i este reprezentat in memorie pe 64 bii sau ntr-o
pereche de registre de 32 bii (n cazul procesoarelor de 32 bii).
Informaia stocata intr-un qword poate fi: un ntreg cu sau fr semn pe 64 bii, sau un numr real
in dubl precizie.
Generarea unor date de tip qword se face cu ajutorul directivei DQ (Define Quad word), a crei
sintaxa este:
[variabila] DQ lista de expresii
unde:
- variabila, opional, este un identificator asociat adresei efective primului qword de memorie generat
corespunztor primei expresii din lista de expresii;
- lista de expresii este o lista de expresii constante separate prin virgula.
Reprezentarea in memorie a celor 8 octei ai unui qword se face astfel nct octetul cel mai pu in
semnificativ este memorat la adresa cea mai mica.
Fie secvena :
q DQ 2, -2, 2.5, -2.5
care va fi reprezentat in memorie astfel:

02 00 00 00 00 00 00 00 fe ff ff ff ff ff ff ff
q +8 +16

00 00 00 00 00 00
04 40 00 00 00 00 00 00 04 c0
+24
Valoarea reala -2.5 este asamblat de la adresa q+24.

e) Ten Bytes
Valorile Ten byte (tbyte) ocup 10 octei consecutivi de memorie, sau unul din registrele
coprocesorului matematic.
Informaia stocata intr-un tbyte poate fi: un numr ntreg reprezentat ca o secvena de cifre BCD
(format mpachetat) cu semn sau un numr real in precizie extinsa.
Generarea unor date de tip tbyte se face cu directiva DT ( Define Ten Bytes) a crei format este:
[variabila] DT lista de expresii
unde:
- variabila, opional, este un identificator asociat adresei efective primului tbyte de memorie generat
corespunztor primei expresii din lista de expresii;
- lista de expresii este o lista de expresii constante separate prin virgula.

n format BCD mpachetat fiecare cifra zecimal se reprezint pe o tetrad (4 bii), deci 2 cifre
BCD pe octet. Un ntreg BCD se poate reprezenta cu maxim 19 cifre zecimale, care ar ocupa 76 bi i.
Ultima tetrad aflat la adresa cea mai mare este destinat memorrii semnului. Semnul se memoreaz
doar in bitul cel mai semnificativ al numrului, deci urmtorii 3 bii ai tetradei ce conine semnul pot fi
bii ai numrului. Astfel ntregii BCD pot fi cuprini intre:
Arhitectura Calculatoarelor 12
-79999 99999 99999 99999
i
+79999 99999 99999 99999
cifra cea mai semnificativ fiind reprezentat doar pe 3 bii.
Directiva:
tb DT 45671234567890123456, -45671234567890123456
va conduce la generarea urmtoarei secvene de octei:
56 34 12 90 78 56 34 12 67 45 56 34 12 90 78 56 34 12 67 c5
tb +10

2.5 Setul de instruciuni 8086

n cadrul acestui capitol, sunt prezentate n detaliu instruciunile de baz ale familiei de procesoare
Intel. Acolo unde este cazul, se specific tipurile interzise de adresare.
Setul de instruciuni este grupat n 6 clase:
instruciuni de transfer, care deplaseaz date ntre memorie sau porturi de intrare/ieire i registrele
procesorului, fr a executa nici un fel de prelucrare a datelor;
instruciuni aritmetice i logice, care prelucreaz date n format numeric;
instruciuni pentru iruri, specifice operaiilor cu date alfanumerice;
instruciuni pentru controlul programului, care n esen se reduc la salturi l la apeluri de
proceduri;
instruciuni specifice ntreruperilor hard i soft;
instruciuni pentru controlul procesorului.
Aceast mprire este realizat dup criterii funcionale. De exemplu, instruciunile PUSH i POP
sunt considerate ca instruciuni de transfer, dei, ia prima vedere, ar putea fi considerate instruciuni
specifice procedurilor. Acelai lucru despre instruciunile IN i OUT, care interfaeaz procesorul cu
lumea exterioar: ele sunt considerate instruciuni de transfer, dei ar putea fi considerate instruciuni de
intrare/ieire. Intrrile i ieirile sunt ns cazuri particulare de transfer.
Fiecare categorie de instruciuni este nsoit de specificarea explicit a indicatorilor de condiie care
sunt modificai n urma execuiei.

2.5.1 Instruciuni pentru transferuri de date, instruciuni n aritmetica binara i n


aritmetica BCD. Noiuni teoretice
Instruciunile de transfer permit copierea unui octet sau cuvnt de la sursa la destinaie. Destinaia
poate fi un registru, locaie de memorie sau un port de ieire, iar sursa poate fi un registru, o locaie de
memorie, constante sau port de intrare. Ca regula general destinaia i sursa nu pot fi ambele locaii de
memorie. n specificarea sursei i destinaiei se vor folosi notaiile:
segment: offset pentru adrese fizice;
(x) paranteze rotunde pentru a desemna coninutul lui x.
OBS. Instruciunea de transfer nu modifica indicatorii de condiie (flagurile) cu excepia instruciunilor
SAHF i POPF.

Instruciuni de transfer
a) Instruciunea MOV (Move Data).
Forma general a instruciunii Mov este:
mov dest, sursa ; (dest) (sursa)
realizeaz transferul informaiei de la adresa efectiva data de sursa la dest.
Exemplu:
mov ax, alfa; transfera coninutul adresei alfa n ax
mov bx, offset alfa; transfera adresa efectiva alfa n bx
mov al, 75h; transfera 75h n al
mov cx, [100]; transfera coninutul adresei 100 n cx
mov [di], bx; transfera coninutul lui bx la adresa coninuta n di
mov byte ptr alfa , [bx]; pune coninutul octetului de la adresa
;dat de bx la adresa alfa
Arhitectura Calculatoarelor 13

b) Instruciunea XCHG ( Exchange Data )


Interschimb sursa cu destinaia. Forma general:
XCHG dest, sursa
Restricii:
registrele de segment nu pot aprea ca operanzi;
cel puin un operand trebuie sa fie un registru general.
Exemple:
xchg al, ah
xchg alfa, ax
xchg sir [si], bx
xchg cs: [bx][si], ax
Interschimbarea coninutului a doi operanzi din memorie op1 i op2 se poate face prin secvena de
instruciuni:
mov reg, op1
xchg reg, op2
mov op2, reg

c) Instruciunea XLAT (Translate)


Forma general:
XLAT
Instruciunea nu are operanzi, semnificaia fiind:
(al) ds: ((bx)+(al))
adic se transfera n al coninutul octetului de la adresa efectiva : (bx)+(al).
Instruciunea se folosete la conversia unor tipuri de date, folosind tabele de conversie, adresa
acestor tabele se introduce n bx, iar n al se introduce poziia elementului din tabel. De exemplu:
conversia unei valori numerice cuprins intre 0 i 15 n cifrele hexazecimale corespunztoare, se poate
face prin:
tabel DB '0123456789abcdef''
..........
lea bx, tabel
mov al,11
xlat
n al se va depune cifra hexazecimala b.

d) Instruciunea IN (Input Data)


Execut o citire de la portul de intrare specificat 8 sau 16 bii, dup cum se specifica registrul al
sau ax sau alte registre generale, pentru noile procesoare.
Forma general:
IN dest, port
unde:
dest este registrul al sau ax (noile procesoare accept i alte registre n locul lui al, respectiv ax);
port este o constant cuprins intre 0 i 255, sau registrul dx.

e) Instruciunea OUT (Output Data)


Execut o scriere la portul de iesire specificat de 8 sau 16 bii, dup cum se specific registrul al
sau ax.
Forma general :
OUT dest, port
unde:
destinaie este registrul al sau ax;
port este o constant cuprins intre 0 i 255 sau registrul dx.

f) Instruciunea LEA (Load Effective Address)


Are ca efect ncarcrea adresei efective (offsetul) intr-un registru general.
Arhitectura Calculatoarelor 14
Forma general:
LEA reg, sursa
unde:
sursa - este un operand aflat n memorie, specificat printr-un mod de adresare ;
reg - este un registru general.
Exemplu:
lea bx, alfa
lea si, alfa [bx][si]
Acelai efect se obine folosind operandul OFFSET n Instruciunea MOV:
mov bx, offset alfa
mov si, offset alfa [bx][si]

g) Instruciunea LDS/ LES (Load Data Segment/ Load Extra Segment)


Forma general:
LDS reg, sursa
unde:
reg -este un registru general de 16 biti;
sursa -este un operand de tip double word aflat n memorie, care conine o adres complet de 32
bii.
Are ca efect transferul unei adrese complete n perechea de registre ds i reg specificat n instruciune,
adic:
(reg) ((sursa))
(ds) ((sursa) + 2)
Exemplu:
alfa db 25
adr_alfa dd alfa
. . . . . . .. . .. . . .
lds si, adr-alfa ; n registru si se transfer offset-ul,
;iar n ds adresa de segment a celulei alfa
mov byte ptr [si], 75
. . . . .. . . .. . . . . . . .

i) Instruciunea LAHF (Load AH with FLAGS)


Instruciunea ncarc n registrul AH octetul dat de partea cea mai puin semnificativa a registrului
FLAGS, ce conine indicatorii. Instruciunea nu are operanzi.
AH FLAGS 07

j) Instruciunea SAHF (Store AH into FLAGS)


Instruciunea ncarc n registrul FLAGS, n octetul cel mai puin semnificativ coninutul
registrului AH, adic:
FLAGS (AH) 07
Instruciunea nu are operanzi.

2.5.2 Aritmetica binara


Aceste instruciuni modifica coninutul registrului FLAGS.

a) Instruciunea ADD (Add)


Forma general:
ADD dest, sursa ; (dest) (dest) + (sursa)
unde:
dest poate fi un registru general sau o locaie de memorie;
sursa poate fi un registru general, o locaie de memorie sau o constant.
Cei doi operanzi nu pot fi simultan locaii de memorie.
Operaia se poate efectua pe octet sau pe cuvnt. Cei doi operanzi trebuie sa aib aceeai dimensiune
(acelai tip). n caz de ambiguitate se va folosi operatorul PTR.
Arhitectura Calculatoarelor 15
Indicatorii afectai sunt: AF, CF, PF, SF, ZF i OF
Exemple:
add ax, 5
add bl, 5
add ax, bx
add word ptr [bx], 75
add alfa, ax
add alfa, 5
add byte ptr [si], 75
add byte ptr alfa, 75

b) Instruciunea ADC (Add with Carry)


Forma general:
ADC dest, sursa ; (dest) (dest) + (sursa) + (CF)
Unde dest i sursa au aceeasi semnificaie ca la instruciunea ADD, iar CF este Carry Flag.
Instruciunea adun coninutul dest cu coninutul sursei i cu bitul de transport CF. Indicatorii afectai sunt
aceeai de la instruciunea ADD.
Operaia ADC se folosete la adunri de operanzi pe mai multe cuvinte, operaie n care poate
aprea transport de care trebuie sa se in seama.
Exemplu. S se adune doua numere op1, op2 n dubla precizie (pe 2 cuvinte).
op1 dd 12345678h
op2 dd 0abcdefgh
rez dd ?
...................................
mov ax, word ptr op1
add ax, word ptr op2
mov word ptr rez, ax
mov ax, word ptr op1+2
adc ax, word ptr op2+2; se considera eventualul transport
mov word ptr rez+2, ax

c) Instruciunea SUB (Substrat)


Forma general:
SUB dest, sursa ; (dest) (dest) (sursa)
unde dest i sursa au aceeai semnificaie ca la instruciunea ADD. Indicatorii afectai sunt cei specificai
la ADD.

d) Instruciunea SBB (Substrat with Borrow)


Forma general:
SBB dest, sursa ; (det) (dest) (sursa) (CF)
unde semnificaia dest, sursa i CF sunt cele prezentate la ADC. Instruciunea SBB ia n considerare
eventualul mprumut. Exemplu:
Op1 dd 12345678h
Op2 dd 0abcdefgh90h
Rez dd ?
.............
mov ax, word ptr op1
sub ax, word ptr op2
mov word ptr rez, ax
mov ax, word ptr op1 + 2
sbb ax, word ptr op2 + 2 ; se considera eventualul mprumut
mov word ptr rez + 2, ax

e) Instruciunea INC (Increment)


Forma general:
Arhitectura Calculatoarelor 16
INC dest ; (dest) (dest) + 1
unde dest este un registru general, un operand din memorie de tip octet sau cuvnt. Semnificaia fiind
operandul dest este incrementat cu unu. Indicatorii afectai sunt AF, PF, SF, ZF, OF.
Exemple:
inc alfa
inc bl
inc word ptr [bx] [si]

f) Instruciunea DEC (decrement)


Forma general:
DEC dest ; (dest) (dest) 1
unde dest are aceeai semnificaie ca dest de la Instruciunea INC. Aceeai indicatori ca la INC sunt
afectai.

g) Instruciunea NEG (Negate)


Forma general:
NEG dest : (dest) 0 (dest) schimbare de semn
unde dest este un operand pe 8 sau 16 bii ce poate fi un registru general sau o locaie de memorie.
Instruciunea afecteaz indicatorii AF, CF, PF, SF, OF i ZF.
Exemplu:
alfa db 75
............
mov al, alfa
neg al
mov alfa, al ; la adresa alfa avem - 75
sau
neg alfa

h) Instruciunea CMP (Compare)


Forma general:
CMP dest, sursa ; (dest) (sursa)
Instruciunea realizeaz o operaie de scdere intre cei doi operanzi, fr a modifica operandul
dest sau sursa cu poziionarea indicatorilor de condiie. Indicatorii afectai sunt: AF, CF, PF, SF, ZF i OF.
Aceasta instruciune se folosete mpreuna cu instruciunea de salt condiionat.
Exemple:
cmp ax, alfa[bx][si]
cmp [si], 0

i) Instruciunea CBW (Convert Byte to Word)


Are ca efect extinderea bitului de semn (AL7) din AL la ntreg registru AH, adic:
daca bitul de semn AL7 = 0 atunci (ah) 00h
altfel (ah) 0ffh.
Instruciunea nu are operanzi i nu afecteaz indicatorii de condiie.
Exemplu. Se cere s se adune un numr ntreg cu semn reprezentat pe octet cu un numr ntreg cu semn
pe cuvnt.
a db -75
b dw -188
c dw ?
.........
mov al, a
cbw ; convertete octetul la cuvnt
add ax, b
mov c, ax
..........
Arhitectura Calculatoarelor 17

j) Instruciunea CWD (Convert Word to Double Word)


Are ca efect extinderea bitului de semn din AX (AX15) la ntreg registrul DX, obinndu-se astfel AX pe
32 de bii, adic:
daca (AX15) = 0 atunci (dx) 0000h,
altfel (dx) 0ffffh.

Instruciunea nu are operanzi i nu afecteaz indicatorii de condiie.


Exemplu. Se cere diferena dintre un operand reprezentat pe 2 cuvinte (DO) i unul reprezentat pe cuvnt
(SO)
do dd 12345678h
so dw 0abcdh
rez dd ?
................
mov ax, so
cwd ax ; operandul so reprezentat n DX : AX
mov bx, ax ; salveaz ax n bx
mov ax, word ptr do
sub ax, bx
mov word ptr rez, ax
mov ax, word ptr do + 2
sbb ax, dx ; ia n considerare eventualul transport
mov word ptr rez + 2

k) Instruciunea MUL (Multiply)


Forma general:
MUL sursa
unde sursa poate fi un registru sau o locaie de memorie de 8 sau 16 bii. Rezultatul se obine pe un numr
dublu de bii (16 sau 32). Operaia realizat este produsul intre acumulator i sursa cu depunerea
rezultatului n acumulatorul extins (ax pe octet sau dx:ax pe cuvnt). Cei doi operanzi se consider
numere fr semn.
Dac sursa este pe octet avem:
(AX) (AL) * (sursa)
iar dac sursa este pe cuvnt avem:
(DX : AX) (AX )* (sursa)
Afecteaz indicatorii CF i OF, ceilali sunt nedefinii. Exemplu.

a db 10h
b dw 100h
c dw ?
d dd ?
.........................................................
mov al, 20h
mul a ; (ax)(al)*a
mov c, ax; depune rezultatul pe cuvnt
mov ax, 10h
mul b ; (dx:ax) (ax)*b
mov word ptr d, ax; depune rezultatul pe dublu cuvnt
mov word ptr d+2, dx
.........................................................

l) Instruciunea IMUL (Integer Multiply)


Forma general:
IMUL sursa
Arhitectura Calculatoarelor 18
Instruciunea este similara cu MUL, deosebirea constnd n faptul ca cei doi operanzi se consider
numere cu semn. Afecteaz indicatorii CF i OF, restul sunt nedefinii.
Exemplu:

alfa db 93
beta dw 143
rez dd ?
.........................................................
mov al, alfa
cbw ; extensia de semn n ah
imul beta (dx:ax) (ax)*(beta)
mov word ptr rez, ax
mov word ptr rez+2, dx

m) Intructiunea DIV (Divide)


Forma general:
DIV sursa
unde sursa este un registru sau o locaie de memorie, reprezentata pe octet sau cuvnt.
Instruciunea realizeaz mprirea fr semn intre demprit i mpritor. Daca mpritorul (sursa) este
reprezentat pe octet atunci dempritul este AX i rezultatul este: ctul n al iar restul n ah, adic:

DIV sursa ; (al) (ax)/(sursa)


; (ah) restul mpririi (ax)/(sursa)

Daca mpritorul (sursa) este reprezentat pe cuvnt atunci dempritul este considerat n DX i
AX, ctul se obine n AX iar restul n DX, adic
DIV sursa ; (ax) ctul mpririi (dx:ax)/(sursa)
; (dx) restul mpririi (dx:ax)/(sursa)
Toi indicatorii nu sunt definii. Operaia de mprire poate conduce la depsiri, dac ctul depete
valoarea maxim reprezentabil pe 8, respectiv pe 16 bii sau daca mpritorul este 0.

n) Instruciunea IDIV (Integer Divide)


Forma general:
IDIV sursa
Semnificaia instruciunii i a operandului sursa este aceeasi ca la Instruciunea DIV, cu diferena c
operanzii sunt considerai numere cu semn, deci mprirea se face cu semn. Indicatorii sunt nedefinii.
Operaia poate conduce la depsiri.

2.5.3 Aritmetica BCD

a) Instruciunea AAA (ASCII Adjust for Addition)


Instruciunea nu are operanzi i executa corecia acumulatorului AX, dup operaii de adunare cu numere
n format BCD despachetai. Semnificaia este:
daca (AL0:3) > 9 sau (AF) = 1, atunci {
(AL) (AL) + 6
(AH) (AH)+1
(AF) 1
(CF) 1
(AL) (AL) AND 0FH
}
Indicatorii afectai : AF, CF, restul nedefinii.
Exemplu:
mov ax, 408h
mov dx, 209h
add ax, dx ; (ax)=0611h
Arhitectura Calculatoarelor 19
AAA ; (ax)=0707h

b) Instruciunea AAS(ASCII Adjust for Subtraction)


Instruciunea nu are operanzi i execut corecia acumulatorului AX, dup operaii de scdere cu numere
n format BCD despachetai. Semnificaia este:
daca (AL0:3) > 9 sau (AF) = 1, atunci {
(AL) (AL) - 6
(AH) (AH) - 1
(AF) 1
(CF) 1
(AL) (AL) AND 0FH
}
Indicatorii afectai : AF, CF, restul nedefinii.
Exemplu:
mov ax, 408h
mov dx, 209h
sub ax, dx ; (ax)=01ffh
AAS ; (ax)=0109h

c) Instruciunea DAS (Decimal Adjust for Substraction)


Instruciunea nu are operanzi i executa corecia zecimala a acumulatorului AL, dup operaii de
scdere cu numere n format BCD mpachetat. Semnificaia este:
daca (AL0:3) > 9 sau (AF) = 1, atunci {
(AL) (AL) - 6
(AF) 1
}
daca acum (AL4:7) > 9 sau CF = 1, atunci {
(AL) (AL) - 60H
(CF) 1
}
Indicatorii afectai : AF, CF, PF, SF, ZF. Indicatorul OF este nedefinit.
De exemplu, n urma secvenei:
MOV AL, 52H
SUB AL, 24H ; AL = 2EH
DAS ; AL = 28H
se obine n AL rezultatul corect 28H.

d) Instruciunea AAM (ASCII Adjunct for Multiply)


Instruciunea nu are operanzi i efectueaz o corecie a acumulatorului AX, dup o nmulire pe 8
bii cu operanzi n format BCD despachetai.
Semnificaia este urmtoarea:
(AH) (AL) / 10
(AL) (AL) MOD 10

Indicatori afectai: PF, SF, ZF, restul nedefinite.


De exemplu
mov al, 7
mov bl, 9
mul bl ; 003fh
AAM ; 0603h

e) Instruciunea AAD (ASCII Adjunct for Division)


Instruciunea nu are operanzi i efectueaz o corecie a acumulatorului AX, naintea unei mpriri
a doi operanzi n format BCD despachetai.
Semnificaia este urmtoarea:
Arhitectura Calculatoarelor 20
(AL) (AH) * 10 + (AL)
(AH) 0

Indicatori afectai: PF, SF, ZF, restul nedefinite.


De exemplu
mov ax, 305h
mov bl, 2
AAD ; (ax)=23h
div bl ; (al)=11h (ah)=1

2.5.4 Exemple programe

Exemplul 1. Acest exemplu prezint cteva tehnici de adresare specifice procesoarelor din familia
8086/88:
TITLE exemplul_1
.MODEL SMALL
.STACK 10h
.DATA
alfa DW 3 DUP(?)
.CODE
begin: mov ax,@DATA
mov ds,ax
mov ax,17 ; Adresare imediata a operandului
; sursa care este o constant
; zecimala
mov ax,10001b ; Sursa este o constant binara
mov ax,11h ; Sursa este o constant hexa
mov alfa,ax ; Adresare directa a operandului
; destinaie
mov cx,ax ; Interschimb coninuturile
mov ax,bx ; registrelor ax i bx
mov bx,cx
xchg ax,bx ; Acelasi efect cu secvena
; anterioara
mov si,2
mov alfa[si],ax ; Adresare relativa cu registrul
; i a operandului destinaie
mov si,2
mov bx,OFFSET alfa; Adresare imediat a operandului
; surs (adresa variabilei alfa)
; datorit operatorului OFFSET
lea bx,alfa ; Aceasta instruciune are acelasi
; efect cu cea anterioar cu toate
; c sursa este adresat direct
mov cx,[bx][si] ; Adresare bazat indexat a sursei
mov cx,alfa+2 ; Aceast instruciune are acelasi
; efect cu cea anterioar, sursa
; fiind ns adresat direct
mov cx,alfa[2] ; Notaii echivalente pentru
mov cx,[alfa+2] ; Instruciunea anterioar
mov di,4
mov [bx][di],55h ; Se va semnala eroare deoarece nu
; s-a precizat tipul destinaiei
; care este o variabila anonima
mov BYTE PTR [bx][di],55h; Se va folosi aceast
Arhitectura Calculatoarelor 21
; variant cnd se dorete o
; adresare la nivel de octet
mov BYTE PTR alfa+4,55h; Aceast instruciune are
; acelasi efect cu cea anterioar,
; destinaia fiind ns adresat
; direct. Desi alfa este definit cu
; DW, operaia este realizata la
; nivel de octet
mov si,2
mov bx,3
mov alfa[bx][si],33h; Adresare bazata indexata
; relativa a operandului destinaie
mov alfa[bx+si],33h; Notaii echivalente pentru
mov [alpha+bx+si],33h; Instruciunea anterioara
mov [bx][si].alfa,33h
mov [bx][si]+alfa,33h
END begin
Pentru exemplificri s-a folosit Instruciunea mov n diferite variante de adresare: registru la registru,
din memorie n registru i din registru n memorie.

Exemplul 2. Se consider un vector de trei componente, fiecare component avnd dimensiunea de


un cuvnt. Sa se permute circular elementele vectorului cu o poziie la stnga:
TITLE exemplul_2
.MODEL SMALL
.STACK 10h
.DATA
vect DW 100h,200h,300h
.CODE
start: mov ax,@DATA; Iniializarea registrului
mov ds,ax ; de segment ds
mov dx,vect ; Salvare n dx a primei
; componente a vectorului
mov ax,vect+2; Transfer a doua
mov vect,ax ; component n prima
mov ax,vect+4; Transfer a treia
mov vect+2,ax; component n a doua
mov vect+4,dx; Transfer prima
; component n ultima
END start

Exemplul 3. Sa se ncarce intr-o variabila pointer valoarea propriei adrese, sub forma de offset i
segment.
TITLE exemplul_3
.MODEL SMALL
.STACK 10h
.DATA
var_ptr DD ?
; Directiva DD are ca efect generarea sau
; rezervarea unor entiti pe 32 de bii
.CODE
begin: mov ax,@DATA
mov ds,ax
mov ax,OFFSET var_ptr
mov WORD PTR var_ptr,ax
; Operatorul OFFSET selecteaz componenta de
; offset a adresei unei variabile
Arhitectura Calculatoarelor 22
mov ax,SEG var_ptr
mov WORD PTR var_ptr+2, ax
; Operatorul SEG selecteaz componenta de
; segment a adresei unei variabile
END begin

Exemplul 4. Sa se efectueze operatia: dp2 <- - dp1- sp1+sp2 stiind ca sp1 si sp2 sint intregi cu semn
reprezentati in simpla precizie, pe un cuvint si dp2 este un intreg cu semn in dubla precizie pe doua
cuvinte.
TITLE exemplul_7
.MODEL SMALL
.STACK 10h
.DATA
dp1 DD 12345678h
sp1 DW 170h
sp2 DW 180h
dp2 DD ?
.CODE
begin: mov ax,@DATA
mov ds,ax
mov si,WORD PTR dp1 ; Perechea (si:di)
mov di,WORD PTR dp1+2; este folosit ca
; acumulator pe 32 de bii deoarece (ax:dx)
; se folosete pentru conversii din simpla in
; dubla precizie
mov ax,sp1
cwd ; Se convertete coninutul registrului
; ax, considerat ca un numr ntreg fr
; semn, poriunea cea mai
; semnificativa depunndu-se n registrul dx
sub si,ax
sbb di,dx
mov ax,sp2
cwd
add si,ax
adc di,dx
mov WORD PTR dp2,si
mov WORD PTR dp2+2,di
END begin

ExempluL 5. Sa se elaboreze un program pentru implementarea operaiei:


z <-- ((w-x)/10*y)2
unde x, y, z, w sunt ntregi cu semn reprezentai pe cte un cuvnt.
TITLE exemplul_9
.MODEL SMALL
.STACK 10h
.DATA
w DW 200
x DW 100
y DW -1
z DW ?
.CODE
begin: mov ax,@DATA
mov ds,ax
mov ax,w ; Se folosete ax ca
; acumulator
Arhitectura Calculatoarelor 23
sub ax,x
mov bl,10
idiv bl ; mprire ntreag,
cbw
imul y
imul ax
mov z,ax
END begin

Exemplul 6. Sa se genereze 2 numere a cte 4 cifre zecimale reprezentate n format BCD mpachetat
(adic fiecare grup de doua cifre zecimale este memorat intr-un octet) i s se scrie o secvena de program
pentru calculul sumei i diferenei lor.
TITLE exemplul_11
.MODEL SMALL
.STACK 10h
.DATA
bcd1 DB 34h,18h; 1834 n format BCD
; mpachetat
bcd2 DB 89h,27h; 2789 n format BCD
; mpachetat
sum DB 2 DUP(?)
dif DB 2 DUP(?)
begin: mov ax,@DATA
mov ds,ax
mov al,bcd1
add al,bcd2
daa
mov sum,al
mov al,bcd1+1
adc al,bcd2+1
daa
mov sum+1,al
mov al,bcd1
sub al,bcd2
das
mov dif,al
mov al,bcd1+1
sbb al,bcd2+1
das
mov sum+1,al
END begin

Exemplul 7. S se scrie un program pentru nmulirea unui numr ntreg pozitiv de doua cifre
zecimale reprezentat n format BCD nempachetat cu o cifra zecimala:
TITLE exemplul_15
.MODEL SMALL
.STACK 10h
.DATA
dgt DB 09h ; 9 n format BCD
; nempachetat
num DB 03h,02h; 23 n format BCD
; nempachetat
rez DB 3 DUP(?)
.CODE
begin: mov ax,@DATA
mov ds,ax
Arhitectura Calculatoarelor 24
mov dl,dgt
mov al,num
mul dl ; ax - 001bh
aam ; ax- 0207h
mov dh,ah
mov rez,al
mov al,num+1
mul dl ; ax 0012h
aam ; ax 0108h
add al,dh ; ax- 010Ah
aaa ; ax 0200h
mov rez+1,al
mov rez+2,ah ; 07,00,02
END begin

Exemplul 8. S se scrie un program de conversie a unui numr zecimal de doua cifre sub forma a
doua caractere zecimale, i sa se afieze cele doua caractere pe ecran. Pentru afiare se va utiliza funcia
DOS cu codul 02h, n registrul dl aflndu-se codul ASCII al caracterului care se vrea afiat. La apelul
unei funcii DOS n registrul al se va transmite codul funciei.
TITLE exemplul_16
.MODEL SMALL
.STACK 10h
.DATA
oct DB 25
.CODE
start: mov ax,@DATA
mov ds,ax
mov al,oct
aam ; ax 0205h
add ah,'0'
add al,'0'
mov dx,ax
xchg dl,dh
mov ah,2 ; Funcia DOS cu codul 02h
int 21h ; se utilizeaz pentru
mov dl,dh; afiarea unui caracter pe
int 21h ; ecran, n dl
; transmindu-se codul ASCII al
; caracterului de afiat
mov ax,4C00h; Iesire normala la
int 21h ; sistemul de operare
END start

Exemplul 9. Conversia unui ntreg fr semn reprezentat pe 16 bii la un sir de caractere (cifre) n
baza 10. Algoritmul de conversie, daca n este numrul, i sir este variabila unde se depun cifrele
numrului descris, n C este:
adresa = sir;
do{
rest = n%10;
n = n/10;
*sir++ = rest + 0;
}while (n!=0);
*sir = 0;
inverseaza (adrsir);
Restul furnizeaz cifra curenta creia i se aduga codul ASCII al cifrei 0. Funcia inverseaz ordinea
caracterelor din irul generat de algoritm.
Arhitectura Calculatoarelor 25
Implementarea n asamblare arata astfel:
data segment
n dw 7654h
sir db 5 dup ("?"),'$'
data ends
cod segment
assume ds: data, cs:cod
start: mov ax,data
mov ds,ax

mov ax,n
convert:
mov cx,0
mov bx,10
divide:
mov dx,0
div bx ; ctul n AX, restul n DX (DL)
add dx,'0'
push dx
inc cx
cmp ax,0
jnz divide
reverse:
pop ax
mov sir[di],al
add di,1
dec cx
cmp cx,0
jnz reverse

mov dx, offset sir


mov ah,9
int 21h; 30292
mov ax, 4c00h
int 21h
cod ends
end start

2.5.5 Instruciuni de salt i ciclare


a)Instruciunea de salt necondiionat JMP
Forma generala :
JMP operand
unde, operand este adresa de salt necondiionat. Exista urmtoarele tipuri de instruciuni JMP:
de tip SHORT - cnd operandul specifica o adresa in domeniul -128 +127 fa de (IP) actualizat
de tip NEAR - operandul specifica o adresa din acelai segment de cod;
de tip FAR - operandul specifica o adresa din alt segment de cod.

b)Instruciuni de salt condiionat


Aceste instruciuni implementeaz salturile condiionate de indicatorii de condiie.
Forma generala:
Jcond operand
unde:
- cond este condiia de salt i este reprezentat de una sau doua litere (vezi tabelul de mai jos);
- operand este un offset cuprins intre -128 si 128.
Dac condiia este ndeplinit are loc saltul la adresa dat de operand, dac nu - se continu n
secven.
Arhitectura Calculatoarelor 26
Se observa ca exista 2 categorii de instruciuni pentru mai mic si mai mare, cele care conin
cuvintele above sau bellow si cele care conin cuvintele less sau greater. Primele se folosesc in
situaia comparrii a doua valori fr semn, iar ultimele in situaia comparrii a doua valori cu semn.
Fie secvenele de program:
mov ax,0FFFEh
mov bx, 2
cmp ax, bx
ja alfa

i
mov ax, 0FFFEh
mov bx, 2
cmp ax, bx
jg alfa
n care se compar pe cuvnt 0FFFEh si 2.
Se observa ca (AX) > (BX) daca cele doua valori se considera reprezentate fr semn si ca (AX) < (BX)
daca cele doua valori se considera cu semn. (-2 este mai mic decat 2). Ca atare in primul caz saltul la
eticheta alfa are loc, pe cand in cel de-al doilea caz nu are loc.
Fiecare mnemonic din tabel se refer la iniialele cuvintelor urmtoare, ce indic condiia n
limba englez: Above (peste, mai mare), Below (sub, mai mic), Equal (egal), Not (nu), Greater (mai
mare), Less (mai mic), Carry (transport), Zero, Overflow (depire de capacitate), Parity (PEven - paritate
par, POdd - paritate impar), Sign (semn).

Instruciune Condiie de salt Interpretare


(mnemonica)
JE, JZ ZF = 1 Zero, Equal
JL, JNGE SF OF Less, Not Greater or Equal
JLE,JNG SF OF sau ZF = 1 Less or Equal, Not Greater
JB, JNAE, JC CF = 1 Below, Not Above or Equal, Carry
JBE, JNA CF = 1 sau ZF = 1 Below or Equal, Not Above
JP, JPE PF = 1 Parity, Parity Even
JO OF = 1 Overflow
JS SF = 1 Sign
JNE, JNZ ZF = 0 Not Zero, Not Equal
JNL, JGE SF = OF Not Less, Greater or Equal
JNLE, JG SF = OF si ZF = 0 Not Less or Equal, Greater
JNB, JAE, JNC CF = 0 Not Below, Above or Equal, Not Carry
JNBE, JA CF = 0 si ZF = 0 Not Below or Equal, Above
JNP, JPO PF = 0 Not Parity, Parity Odd
JNO OF = 0 Not Overflow
JNS SF = 0 Not Sign
(Exemplu de citire: JNBE = jump if not below or equal, salt (J) dac nu (N) e mai mic (B) sau egal (E)).

c) Instructiunea JCXZ (JUMP if CX is Zero)


Instructiunea realizeaza salt la etcheta specificata daca continutul registrului CX este zero. Forma
generala:
JCXZ eticheta
unde eticheta este o eticheta aflata in domeniul -128 si 127 fata de (IP)

d) Instructiunea LOOP
Forma generala:
LOOP eticheta
Are ca efect:
cx cx -1
daca cx = 0 atunci
Arhitectura Calculatoarelor 27
(IP) (IP) + D8
adica se decrementeaza CX si daca acesta este diferit de zero se sare la eticheta specificata, in caz contrar
se continua cu instructiunea urmatoare. D8 este un deplasament pe 8 biti si reprezinta diferenta intre
offset-ul instructiunii urmatoare instructiunii LOOP si offset-ul etichetei.
Ex: Suma celor n octeti de la adresa sir.
.data
sir db 7, 9, 15, 25, -18, 33, 11
n equ ($ - sir)/type sir
suma db ?
.code
begin:
mov ax, @data
mov ds, ax
xor al, al
mov cx, n
xor si, si
repeta:
add al, sir[si]
inc si
LOOP repeta
mov suma, al
mov ax, 4c00h
int 21h
end begin

e) Instructiunea LOOPZ/LOOPE (LOOP While Zero/Equal)


Forma generala:
LOOPZ eticheta
sau
LOOPE eticheta
Semnificatia:
cx cx - 1
daca cx = 0 si ZF = 1 atunci
(IP) (IP) + D8
Se decrementeaza cx si daca acesta este diferit de zero si indicatorul ZF este 1 (rezultatul ultimei operatii
aritmetice a fost zero) se sare la eticheta specificata.

f) Instructiunea LOOPNZ/LOOPNE (Loop While Not Zero/Not Equal)


Forma generala:
LOOPNZ eticheta
sau
LOOPNE eticheta
Semnificatia:
cx cx - 1
daca cx 0 si ZF = 0 atunci
(IP) (IP) + D8
Efectul este ca se cicleaza cat timp rezultatul ultimei operatii aritmetice este diferit de zero, dar nu de mai
multe ori cat este continutul initial a lui cx.

2.5.6 Instruciuni de deplasare (SHL, SAL, SHR, SAR) si de rotatie (ROL, RCL, ROR, RCR).
Acest grup de instructiuni realizeaza operatii de deplasare si de rotatie la nivel de bit.
Instructiunile au doi operanzi: primul este operandul propriu-zis, iar al doilea este numarul de biti cu care
se deplaseaza sau se roteste primul operand. Ambele operatii se pot face la dreapta sau la stinga.
Deplasarea inseamna translatarea tuturor bitilor din operand la stinga/dreapta, cu completarea unei valori
fixe in dreapta/stinga si cu pierderea bitilor din stinga/dreapta. Deplasarea cu un bit la stinga este
Arhitectura Calculatoarelor 28
echivalenta cu inmultirea operandului cu 2, iar deplasarea la dreapta, cu impartirea operandului la 2.
Rotatie inseamna translatarea tuturor bitilor din operand la stinga/dreapta, cu completarea in
dreapta/stinga cu bitii care se pierd in partea opusa.
Ambele operatii se fac cu modificarea bistabilului CF, care poate chiar participa la operatiile de
rotatie.
Forma generala a instructiunilor este:
OPERATIE operand, contor
in care operand este un registru sau o locatie de memorie de 8 sau 16 biti, iar contor (numarul de biti) este
fie constanta 1, fie registrul CL, care contine numarul de biti cu care se deplaseaza/roteste operandul.
Procesoarele mai avansate (80286 si peste) accepta un numar oarecare de biti, specificat si printr-o
constanta intreaga.
La operatiile de deplasare , se modifica toate flagurile conform rezultatului, in afara de AF, care
este nedefinit. La operatiile de rotatie, se modifica numai CF si OF.
La instructiunile de deplasare, se considera deplasari logice si aritmetice, care se pot utiliza
dupa natura operanzilor.

a) Instructiunea SHL/SAL (Shift Logic/Arithmetic Left)


Are forma generala:
SHL/SAL operand, contor

Desi exista doua mnemonice (SHL si SAL), in fapt este vorba de o unica instructiune. Bitul cel
mai semnificativ al operandului trece in CF, dupa care toti bitii se deplaseaza la stanga cu o pozitie.
Operatia se repeta de atitea ori de cat este valoarea lui contor (1 sau continutul registrului CL).

b) Instructiunea SHR (Shift Logic Right)


Are forma generala:
SHR operand, contor

Bitul cel mai putin semnificativ din operand trece in CF, dupa care se deplaseaza toti bitii cu o
pozitie la dreapta (impartire la 2). Faptul ca operatia de impartire se executa fara semn inseamna ca se
completeaza cu un bit 0 dinspre stinga. Operatia se repeta de atitea ori cit este valoarea lui contor (1 sau
continutul registrului CL).

c) Instructiunea SAR (Shift Arithmetic Right)


Are forma generala:
SAR operand, contor

Bitul de semn ramine nemodificat. Bitul cel mai putin semnificativ din operand trece in CF, dupa
care se deplaseaza toti bitii cu o pozitie la dreapta . Faptul ca operatia de deplasare se executa cu semn
inseamna ca se completeaza toti bitii eliberati cu bitul de semn. Operatia se repeta de atitea ori cit este
valoarea lui contor (1 sau continutul registrului CL).

d) Instructiunea ROL (Rotate Left)


Are forma generala:
ROL operand, contor

Bitul cel mai semnificativ din operand trece atit in CF, cat si in bitul cel mai putin semnificativ din
operand, dupa ce toti bitii acestuia s-au deplasat la stanga cu o pozitie. Operatia se repeta de atitea ori cit
este valoarea lui contor (1 sau continutul registrului CL).
Arhitectura Calculatoarelor 29

e) Instructiunea ROR (Rotate Right)


Are forma generala:
ROR operand, contor

Bitul cel mai putin semnificativ din operand trece atit in CF, cat si in bitul cel mai semnificativ din
operand, dupa ce toti bitii acestuia s-au deplasat la dreapta cu o pozitie. Operatia se repeta de atitea ori cit
este valoarea lui contor (1 sau continutul registrului CL).

f) Instructiunea RCL (Rotate Left through Carry)


Are forma generala:
RCL operand, contor

Bitul cel mai semnificativ din operand trece in CF, se deplaseaza toti bitii din operand cu o
pozitie la stinga, iar CF initial trece in bitul cel mai putin semnificativ din operand. Operatia se repeta de
atitea oricit este valoarea lui contor (1 sau continutul registrului CL).

f) Instructiunea RCR (Rotate ight through Carry)


Are forma generala:
RCR operand, contor

Bitul cel mai putin semnificativ din operand trece in CF, se deplaseaza toti bitii din operand cu o
pozitie la dreapta, iar CF initial trece in bitul cel mai semnificativ din operand. Operatia se repeta de atitea
ori cit este valoarea lui contor (1 sau continutul registrului CL).

2.5.7 Instuctiuni logice


Instuctiunile logice realizeaza functiile logice de baza, pe octet sau pe cuvant. Operatiile se fac la
nivel de bit.

a) Instuctiunea NOT (Not)


Forma generala :
NOT dest
in care dest poate fi un registru sau o locatie de memorie. Instructiunea provoaca negarea tuturor bitilor
operandului, adica se face complementul fata de unu.

b) Instuctiunea AND (And)


Forma generala :
AND dest, sursa
in care dest poate fi un registru sau o locatie de memorie iar sursa un registru sau o locatie de memorie
sau o constanta. Instructiunea depune in dest si-logic la nivel de bit intre dest si sursa.
Indicatori afectati: SF, ZF, PF, CF=0, OF=0, AF nedefinit.

c) Instuctiunea OR (Or)
Forma generala :
OR dest, sursa
in care dest poate fi un registru sau o locatie de memorie iar sursa un registru sau o locatie de memorie
sau o constanta. Instructiunea depune in dest sau-logic la nivel de bit intre dest si sursa.
Indicatori afectati: SF, ZF, PF, CF=0, OF=0, AF nedefinit.

d) Instuctiunea XOR (Exclusive Or)


Arhitectura Calculatoarelor 30
Forma generala :
XOR dest,sursa
in care dest poate fi un registru sau o locatie de memorie iar sursa un registru sau o locatie de memorie
sau o constanta. Instructiunea depune in dest xor-logic la nivel de bit intre dest si sursa.
Indicatori afectati: SF, ZF, PF, CF=0, OF=0, AF nedefinit.

e) Instuctiunea TEST (Test)


Forma generala :
TEST dest,sursa
in care dest poate fi un registru sau o locatie de memorie iar sursa un registru sau o locatie de memorie
sau o constanta. Instructiunea realizeaza and-logic la nivel de bit intre dest si sursa cu pozitionarea
indicatorilor.
Indicatori afectati: SF, ZF, PF, CF=0, OF=0, AF nedefinit.

Exemple programe
{Cautare secventiala} Sa se scrie un program pentru cautarea primului blanc din sirul incepind de la
adresa sir. La iesirea din program ax va contine valoarea 0 daca sirul nu contine blancuri, altfel va contine
valoarea pozitiei din sir a primului blanc gasit. Se presupune ca sirul sir are l caractere.
TITLE exemplul_1
.MODEL SMALL
.STACK 10h
.DATA
sir DB 'Acesta este un sir!'
l EQU $-sir
.CODE
begin: mov ax,@DATA
mov ds,ax
mov cx,l
mov si,-1
mov al,' '
urm: inc si
cmp al,sir[si]
loopne urm
jne nu_gasit
mov ax,l
sub ax,cx
jmp iesire
nu_gasit: mov ax,0
iesire: nop
END begin

2.5.8 Instruciuni pentru controlul procesorului


Sunt instruciuni care controleaz anumite funcii ale procesorului, ce acioneaz fie prin
intermediul unor indicatori de control (sau registre de control), fie prin introducerea unor stri sau
semnale necesare pentru sincronizarea cu evenimentele externe.
Exemple:
CMC ;complementarea valorii indicatorului CF
CLC ;poziionarea pe 0 a indicatorului CF
STC ;poziionarea pe 0 a indicatorului CF
NOP ;Nici o operaie, dar consum 3 perioade de ceas.
CLD ;poziionarea pe 0 a indicatorului DF
STD ;poziionarea pe 1 a indicatorului DF
CLI ;poziionarea pe 0 a indicatorului IF, dezactivare ntreruperi mascabile
STI ;poziionarea pe 1 a indicatorului IF
HLT ;Oprire microprocesor pn la RESET, NMI, sau INT (dac sunt activate)
WAIT ;ateptare pn cnd vine semnalul exterior test=0
Arhitectura Calculatoarelor 31
ESC ;operaie destinat coprocesorului
LOCK ;prefix care activeaz semnalul extern /lock, astfel c microprocesorul anun
;c nu va rspunde la o cerere de cedare a controlului magistralelor.
2.5.9 Instruciuni pentru lucrul cu iruri
n afar de tipurile de baz amintite mai sus, exist i posibilitatea efecturii unor operaii de
transfer, sau operaii aritmetice i logice cu iruri de date (cu informaii aflate n zone continue de
memorie). Operaiile pe iruri pot fi efectuate individual, pentru fiecare cuvnt din ir, sau automat - cu
repetare, numrul de repetri al instruciunii fiind dictat de coninutul unui registru contor.
Operaiile tipic efectuate sunt:
transferul unui ir din zon sursa n zon destinaie
comparare ntre dou iruri
cutarea unei valori ntr-un ir
ncrcarea acumulatorului cu elementele unui ir.
citirea unui ir de la un port de intrare
scrierea unui ir la un port de ieire
Exemple :
MOVSB(W) ;transfer pe 8 (16) bii [DS:SI][ES:DI]
;SISI+1; DIDI+1 (decrementare pentru DF=1)
CMPSB(W) ;comparare pe 8(16) bii [DS:SI] cu [ES:DI]
;SISI+1; DIDI+1 (decrementare pentru DF=1)
SCASB(W) ;comparare pe 8(16) bii intre AL(AX) i [ES:DI]
;DIDI+1 (decrementare pentru DF=1)
LODSB(W) ;se ncarc AL(AX) de la [DS:SI]
;SISI+1 (decrementare pentru DF=1)
STOSB(W) ;se stocheaz AL(AX) la [ES:DI]
;DIDI+1 (decrementare pentru DF=1)
REP ;prefix de repetare. Contorul este CX.

DATA SEGMENT
sir1 DB 100 DUP(7)
sir2 DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME cs:CODE,ds:DATA,es:DATA
start: mov ax,DATA
mov ds,ax
mov es,ax
mov si,OFFSET sir1
mov di,OFFSET sir2
mov cx,LENGTH sir1
cld
muta: movs sir1,sir2
loop muta
CODE ENDS
END start

Utilizind prefixul rep bucla:


muta: movs sir1,sir2
loop muta
din exemplu se poate rescrie astfel:
rep movs sir1,sir2

2.5.10 Echivalari
Echivalarile reprezinta niste valori constante de tip constanta numerica sau sir de caractere atribuite unor
nume simbolice, simbolurile putind fi inlocuite in locul valorilor respective.
Arhitectura Calculatoarelor 32
a) Echivalarile numerice sint folosite pentru a atribui o constanta numerica unui simbol. Acestea pot fi:
- redefinibile: valoarea unui simbol poate fi redefinita in orice moment in timpul asamblarii;
Sintaxa unei echivalari numerice redefinite este:
nume = expresie
unde:
expresie poate fi un intreg, o expresie constanta, o constanta de tip sir de caractere sau doua constante sau
o expresie evaluata la o adresa.
nume este un nume de simbol unic sau un nume de simbol definit anterior cu =.
- neredefinibile: valoarea simbolului nu poate fi redefinita in timpul asamblarii.
Sintaxa unei echivalari numerice neredefinibile este:
nume EQU expresie
parametrii avind semnificatiile:
nume este un nume de simbol unic;
Simbolurile definite prin echivalari numerice pot fi folosite in constructii ulterioare ca operanzi imediati.
Acestor simboluri nu li se aloca memorie.
Operatorii admisi in cazul folosiri expresiilor constante sunt:

1.operatori aritmetici:
+ si - unari, + si - binari, * si /(impartire intreaga), mod(rest). Operaorii binari + si - se pot folosi si cind un
operad este o constanta si celalalt o adresa, rezultatul fiind o adresa. Operatorul binar se poate folosi si cind
ambii operanzi sint adrese, cu restrictia de a fi plasati in acelasi segment, rezultatul fiind o constanta.

2.operatori de deplasare:
SHR si SHL realizeaza deplasarea logica dreapta, stinga. Sintaxa este expresie SHR/SHL cant unde cant
reprezinta numarul de biti deplasati.

3.operatori logici la nivel de biti:


Acestia sint: NOT, AND, OR, XOR.

4.TYPE intoarce un numar ce reprezinta tipul unei expresii;

5.SIZE intoarce numarul total de octeti alocati pentru un tablou sau (variabila definita cu DUP);

6.HIGH, LOW selecteaza octetii cel mai semnificativ respectiv cel mai putin semnificativ ai unei
expresii;

Exemplificare echivalari :

DATA SEGMENT WORD 'DATA'


intgr = 14*3 ;=42
intgr = intgr/4 ;10
intgr = intgr mod 4 ;2
intgr = intgr+4 ;6
intgr = intgr-3 ;3
ORG 100h
a DB ? ;aduna 100h
b DB ? ;aduna 101h
mem1 EQU a+5 ;mem1=105h
mem2 EQU a-5 ;mem2=0FBh
const EQU b-a ;const=1
val = 01110111b
depls = val SHL 3 ;=01110111000b
depld = val SHR 3 ;=01111b
off_a EQU OFFSET a
high_off_a EQU HIGH off_a
seg_b EQU SEG b
Arhitectura Calculatoarelor 33
vect DW 60 DUP(?)
s_vect EQU SIZE vect ;60 * 2 = 120
l_vect EQU LENGTH vect ;60
t_vect EQU TYPE vect ;2
verif EQU t_vect*l_vect ;=2*60
DATA ENDS
END

In general echivalarile sint pastrate in fisiere separate de includere, fiind incluse intr-un program prin
intermediul directivei INCLUDE.

2.6 Subprograme i macroinstruiuni

n general definirea unui subprogram se face cu directiva PROC n maniera urmtoare:


nume PROC {NEAR | FAR}
corp
RET {constanta}
nume ENDP
Dac atributul NEAR i FAR lipsesc, n cazul utilizrii definiiilor complete se consider implicit
NEAR, iar n cazul definiiilor simplificate se folosesc valorile implicite n funcie de modelul de memorie
utilizat.
Tehnicile de transfer a parametrilor combin diversele modaliti de alegere a tipurilor de locaii
fizice pentru pstrarea parametrilor transmii: registre, locaii de memorie fixate, codul apelant, stiva
procesorului, tehnica blocurilor (tabelelor) de parametri, cu ceea ce se transmite efectiv referitor la un anumit
parametru: adresa sau valoarea acestuia.

Instructiunea CALL (apel de procedura)


Poate aparea sub una din formele:
CALL nume_proc
CALL NEAR PTR nume_proc
CALL FAR PTR nume_proc
Tipul apelului poate fi dedus din tipul procedurii (primul caz) sau specificat explicit prin NEAR si
FAR. Tipul apelului trebuie sa coincida cu tipul procedurii si cu tipul instructiunii RETURN din
interiorul procedurii.

Instructiunea RET (RETURN)


Forma general:
RET [n]
unde n este o constanta intreaga optionala.
Daca instructiunea RET este de tip NEAR semnificatia sa este:
(IP) SS: ((SP) + 1:(SP))
(SP) (SP) + 2
[(SP) (SP) + n]
adica se reface (IP) prin copierea continutului varfului stivei si incrementarea cu 2 a lui (SP). Daca in
instructiunea RET apare si constanta n atunci aceasta constanta se aduna la (SP), adica se descarca stiva.
Exemplu:
DATA SEGMENT
a DD 55555h
b DD 77777h
s DD ?
DATA ENDS
COD SEGMENT
...
; incarca primul numar in DX:AX
mov ax,WORD PTR a[0]
Arhitectura Calculatoarelor 34
mov dx,WORD PTR a[2]
; incarca al doilea number in DI:SI
mov si,WORD PTR b[0]
mov di,WORD PTR b[2]
; incarca adresa rezultatului in BX
mov bx,OFFSET s
; apeleaza procedura
call pro_ad
...
; codul procedurii
pro_ad PROC NEAR
add ax,si
adc dx,di
mov [bx],ax
mov [bx+2],dx
ret
pro_ad ENDP
...
COD ENDS

O macroinsrtuctiune reprezinta o secventa de cod sursa careia i se atribuie un nume simbolic, continutul
acastei secvente putind fi repetat ori de cite ori in cadrul unui program prin simpla referire la numele
simbolic respectiv. Utilizarea unei macroinstructiuni necesita parcurgerea a doi pasi:
1.Definirea macroinstructiunii, care se marcheaza printr-o macrodefinitie. Aceasta cuprinde o secventa de
cod, intre directivele MACRO si ENDM. Sintaxa este:

nume MACRO {parametrii}


cod
ENDM

unde:
nume reprezinta numele simbolic dat macroinstructiunii ;
parametrii reprezita parametrii formali optionali ai macroinstructiunii, separati prin virgula, blancuri
sau TAB-uri. La apelul macroinstructiunii, acesti parametri formali sint inlocuiti textual cu parametrii
actuali.

2.Apelul macroinstructiunii, care se realizeaza printr-un macroapel, cu sintaxa:


nume {argumente}
unde:
nume reprezinta numele simbolic al macroinstructiunii apelate;
argumente reprezinta lista parametrilor actuali, separati prin virgula, blancuri sau TAB-uri.
Apelul macroinstructiunii are ca efect includerea textuala a codului din definitia macroinstructiunii in
corpul programului.

Exemplu : Adunarea a 3 cuvinte cu depunerea rezultatului in ax.

TITLE exemplu
addup MACRO ad1,ad2,ad3
mov ax,ad1
add ax,ad2
add ax,ad3
ENDM
a DW 1
b DW 2
c DW 3
Arhitectura Calculatoarelor 35
d DW ?
begin:mov ax,@DATA
mov ds,ax
addup a,b,c
mov dx,ax
addup dx,dx,dx
mov d,ax
addup d,dx,c
END begin

Pentru definirea unor simboluri in cadrul unei macroinstructiuni, care la fiecare apel al macroinstructiunii
respective vor fi inlocuite cu nume unice de simboluri, gesionate de asamblor, se utilizeaza directiva LOCAL
cu sintaxa:
LOCAL nume {,nume} ...

Directiva LOCAL, daca este prezenta intr-o macrodefinitie, trebuie sa urmeze imediat directivei
MACRO.
Exemplu: Ridicarea unui numar la o putere.

power MACRO factor,exponent


LOCAL again,gotzero
xor dx,dx
mov ax,exponent
mov ax,1
again: jcxz gotzero
mul bx
loop again
gotzero:
ENDM
Arhitectura Calculatoarelor 36

3. Structura calculatoarelor

3.1 Componentele funcionale i clasificarea


Noiunea de la care pornim este aceea de calculator; acesta este un sistem programabil de prelucrare
a informaiei care are dou componente eseniale, inseparabile i definitorii: hardware i software.
A. Din punct de vedere hardware, calculatorul are trei componente funcionale legate ntr-un mod
specific (Figura 3.1).
Blocurile funcionale sunt:
1. Unitatea central de prelucrare (UCP) are dou funcii eseniale:
prelucrarea datelor;
controlul activitii ntregului calculator.
O unitate central de prelucrarea informaiei, avnd funciile enunate mai sus, care coordoneaz
un sistem structurat funcional ca n Figura 3.1 i care, fizic, se prezint sub forma unui singur cip (circuit
integrat) se numete microprocesor. Aceast accepiune standard a noiunii va fi folosit n continuare
pentru detalierea conceptelor care stau la baza funcionrii ntregului calculator.
2. MEMORIA este, din punctul de vedere al sistemului pe care l definim, o secven de locaii pentru
stocarea informaiei.
Fiecare locaie este definit prin dou entiti informaionale:
Coninutul, reprezentat de o niruie de cifre binare 0 sau 1 ("bii"); se va observa c nu am
folosit noiunea de "numr binar", pentru c informaia stocat ntr-o locaie de memorie poate
avea diverse semnificaii. Numrul de cifre binare coninute ntr-o locaie depinde de modul n
care microprocesorul organizeaz informaia n memorie; mrimea unei locaii va fi denumit
formatul memoriei, exprimat n numr de bii (de regul 8 sau 16 bii). Formatul memoriei nu
are nici-o legtur cu organizarea fizica a cipurilor de memorie.

MEMORY

Magistrala date

Magistrala adrese
CPU

Mgistrala control

I/O

Figura 3.1

Adres, reprezentnd numrul de ordine al locaiei, care permite identificarea sa n cadrul


secvenei de locaii (exist o coresponden biunivoc ntre fiecare locaie de memorie i adresa
Arhitectura Calculatoarelor 37
sa).
n privina memoriei unui calculator vom folosi cteva noiuni:
"Harta memoriei", definit ca fiind totalitatea locaiilor de memorie pe care le poate adresa un
microprocesor.
"Pagini" i/sau "segmente" sunt subdiviziuni logice ale hrii memoriei, ale cror dimensiuni,
fixe sau dinamice, sunt specifice modului n care un microprocesor anume organizeaz
memoria. Subliniem din nou c aceste moduri de organizare nu au nici-o legtur cu structura
fizic a memoriei unui calculator.
3. Dispozitivele de intrare/ ieire (I/O) sunt constituite din circuitele prin care se realizeaz legtura
ntre calculator i lumea exterioar. O unitate elementar de conversaie cu exteriorul poart numele de
"port de intrare/ieire". ntre porturi i locaiile din memorie exist nite similitudini:
Porturile sunt n esen tot locaii de memorare a informaiei, adresabile; desigur, informaia care
se folosete uzual aici este alctuit din operanzi/rezultate (date).
Exist o "hart a porturilor" care, aa cum vom arta n capitolele urmtoare, poate sau nu s fac
parte din harta memoriei.
Singura deosebire esenial fa de locaiile de memorie este legtura fizic pe care porturile o asigur
cu exteriorul; pentru microprocesor, de multe ori, aceast legtur fizic este transparent i
nesemnificativ.
n sfrit, componena hardware a calculatorului comport un set de legturi specifice; acestea se
realizeaz printr-o aa numit "magistral": un set de conexiuni fizice ntre blocuri prin care informaia
care circul are o semnificaie prestabilit. Sistemele la care ne referim au o magistral unic, ce le
caracterizeaz; din punct de vedere funcional, exist trei componente ale acestei magistrale,
individualizate i n Figura 3.1:
1. Magistrala de date, bidirecional, permite circulaia datelor (operanzi/rezultate), a instruciunilor i
chiar a adreselor.
2. Magistrala de adrese, unidirecional, permite microprocesorului s localizeze informaia n
Memorie sau n Dispozitivele de intrare/ieire; deci pe aceast magistral circul numai adrese.
3. Magistrala de control permite circulaia, bidirecional, a semnalelor de comand i control de la/la
microprocesor, n calitatea sa de Unitate central.
B. Din punct de vedere software, a doua component definitorie a calculatorului, definirea rezult
practic din considerentele anterioare: o serie de programe organizate n moduri specifice.
Prezentarea acestor noiuni i definirea lor ne permit cteva concluzii care s fac o prim delimitare
asupra conceptului de microprocesor aa cum este el neles n volumul de fa:
Microprocesorul constituie Unitatea central de prelucrare a unui sistem avnd schema
bloc funcional din Figura 3.1. Important este c el concentreaz i funcia de prelucrare i pe
cea de comand.
Toate celelalte componente ale sistemului nu au putere de decizie. Memoria, de pild, nu
controleaz i nici nu e necesar s controleze semnificaia informaiei pe care o deine i modul n
care este organizat logic.
Legtura dintre blocuri este asigurat de o magistral unic cu trei componente
funcionale; pe magistrala de date circul toate tipurile de informaii.
Funcionarea sistemului se face pe baza unor programe alctuite din secvene de
instruciuni. Acestea sunt citite din memorie de ctre microprocesor, recunoscute i apoi
executate.

Calculatoarele deseori se caracterizeaz prin :


a) Viteza de calcul - este o evaluare, determinat analitic sau experimental, a volumului de
instruciuni (comenzi) executate de calculator ntr-o unitate de timp. Viteza de calcul se msoar
n milioane de instruciuni executate pe secund (milion instruction per second, MIPS), milioane
de instruciuni n virgul mobil ( megaflops, MFLOPS ).
a) Limea magistralei de date limea (mrimea ) maximal a codului informatic care poate fi
prelucrat, pstrat i transferat n calculator, ca o unitate ntreag.
b) Capacitatea de stocare a memoratoarelor cantitatea informaiei codate, concomitent pstrat n
memoratoarele calculatorului. Pentru msurarea capacitii de stocare se folosesc urmtoarele
prefixe:
Arhitectura Calculatoarelor 38
1KiloByte = 210Byte 103 Byte
1MegaByte = 220 Byte 106 Byte
1GigaByte = 230 Byte 109 Byte
1TerraByte = 240 Byte 1012Byte
Clasificarea calculatoarelor conform caracteristicilor menionate este neactual.
Prezentm cteva clasificri moderne.

Industria modern produce o mare varietate de calculatoare. Din aceast varietate, vom clasifica
orientativ calculatoarele ( E. Tanenbaum "Organizarea structurat a calculatoarelor"):
circuitul integrat, sau calculatoare "one-off", domeniul de utilizare de ex. felicitrile (cri
potale);
calculatoare integrate (microcontrolere) - ceasuri, maini, diferite dispozitive;
console de jocuri jocuri la domiciliu;
calculatoare personale PC variantele desktop i laptop-uri;
servere - servere de reea;
grupe (clastere) de staii de lucru (COW- Cluster Of Workstations) - multicalculatoare conectate n
reele;
Mainframe - prelucrarea a bazelor de date ntr-o banc.

Circuite integrate
Ele mai sunt numite calculatoare "one-off". Aceste circuite pot fi lipite pe cri potale i interpreteaz
melodii cu tematica specific anumitor srbtori / aniversari, de tipul Happy Birthday. Probabil, cea
mai semnificativ realizare n acest domeniu a fost apariia circuitelor RFID (Radio Frequency
Identification Tehnologia identificrii prin radiofrecven). Aceast tehnologie presupune stocarea
informaiilor nu prin codurile de bare, ci prin intermediul unor cipuri electronice integrate, de ex. n
etichete, ecusoane, ambalaje de marf, corpurile animalelor etc. Aceste informaii, ce reprezint un cod
unic din 128 bii, pot fi citite de la distan de civa metri prin unde radio. Dimensiunea acestor circuite
este mai mic de 0,5mm, costul fiind de civa ceni. Circuitele nu utilizeaz surse de alimentare i pot
stoca informaia mult timp.
Informaia detaliat o putei gsi pe site-ul www.rfid.org.

Microcontrolere
La modul general un microcontroler este, actualmente, o structur electronic destinat controlului
(destul de evident!) unui proces sau, mai general, unei interaciuni caracteristice cu mediul exterior, fr
s fie necesar intervenia operatorului uman. El reprezint un microcircuit care incorporeaz o unitate
central (CPU) i o memorie mpreun cu resurse care-i permit interac iunea cu mediul exterior. Toate
aplicaiile n care se utilizeaz microcontrolere fac parte din categoria aa ziselor sisteme ncapsulate-
integrate (embedded systems), la care existena unui sistem de calcul incorporat este (aproape)
transparent pentru utilizator. Printre multele domenii, unde utilizarea lor este practic un standard
industrial, se pot meniona:
n industria de automobile (controlul aprinderii/motorului, climatizare, diagnoz, sisteme de alarm,
etc.), n aa zisa electronic de consum (sisteme audio, televizoare, camere video i videocasetofoane,
telefonie mobil, GPS-uri, etc.), n aparatura electrocasnic (maini de splat, frigidere, cuptoare cu
microunde, aspiratoare), n controlul mediului i climatizare (sere, locuine, hale industriale), n industria
aerospaial, n mijloacele moderne de msurare (aparate de msurare, senzori i traductoare inteligente),
la realizarea de periferice pentru calculatoare, n medicin.
Ca un exemplu din industria de automobile, unde numai la nivelul anului 1999, un BMW seria 7
utiliza 65 de microcontrolere, iar un Mercedes din clasa S utiliza 63 de microcontrolere; iar un avion
peste 200. Practic, este foarte greu de gsit un domeniu de aplicaii, n care s nu se utilizeze
microcontrolerele.

Console de jocuri. O consol de jocuri este un sistem dedicat jocurilor video, ce reprezint de fapt un
calculator interactiv pentru distracii. Deseori const din 2 uniti: un controller - cu ajutorul cruia,
utilizatorul poate introduce date sau interaciona cu obiectele de pe ecran i un bloc ce conine un
procesor, RAM, i un coprocesor pentru audio-video, incorporate intr-o carcas la care se conecteaz
Arhitectura Calculatoarelor 39
televizorul i controlerul. Prezentm caracteristicile principale ale Sony PlayStation4. Noua consol va
avea un procesor AMD Jaguar cu 8 nuclee i un GPU AMD Radeon de 1,84 teraflopi, alturi de memorie
RAM GDDR5 de 8GB i spatiu de stocare HDD pn 640 GB. Specificaiile PS4 includ i Blu-ray drives
cu un volum de 250 GB, alturi de conectivitate USB 3.0, Bluetooth 4.0, HDMI, Wi-Fi i Ethernet.
Calculatoare personale
Calculatoare personale (PC) se divizeaz n 2 grupe: variantele desktop i portabile (laptop, notebook,
palmtop (PDA). n structura lor, de regul, intr: microprocesoare, module de memorie de gigabytes, hard
discuri de terabytes, CD-ROM/DVD drives, modemuri, plci video, audio, de reea, monitoare .a.,
sisteme de operare complexe instalate.

Servere
Un server este o un calculator, care opereaz continuu n reeaua sa i ateapt solicitri din partea
altor calculatoare din reea, pentru a asigura accesul la toat paleta de forme de conectare i servicii.
Multe componente de hardware sunt identice cu cele ce le gsim ntr-un calculator personal. Totu i
serverele ruleaz sisteme de operare i programe specializate care sunt diferite fa de cele folosite pe
calculatoare personale.
Serverele deservesc resurse hardware care sunt partajate i pot uneori fi comandate de ctre
calculatoarele-client, cum ar fi imprimante (atunci serverul se numete print server) sau sisteme de fiiere
(atunci el se numete file server). Aceast partajare permite un acces i o securitate mai bune. Cu toate c
serverele pot fi construite, din comoditate, din componente obinuite de calculatoare, este necesar ca,
pentru operaii rapide i de mare amploare, serverele s foloseasc configuraii hardware optimizate
pentru aceste cerine. Cu toate c serverele ofer mult spaiu pe disc, pentru mrirea siguran ei n
funcionare sunt folosite hard-discuri de capacitate redus, numeroase, interconectate n mod special.
Folosirea mai multor microprocesoare duce la o mai mare fiabilitate n comparaie cu un singur
microprocesor. De asemenea se folosesc Uninterruptible Power Supplies (UPS-uri) pentru a fi siguri de
continuitatea de alimentare cu energie electric, astfel ca penele din reeaua public de curent s nu
provoace stricciuni ireparabile. Diferena major ntre computerele personale i servere nu este partea
hardware ci partea de software. Pe servere ruleaz sisteme de operare care sunt special proiectate pentru
acestea. De asemenea ele ruleaz aplicaii special proiectate pentru procesele dorite. n lumea serverelor
cele mai populare sistem de operare sunt FreeBSD, Sun Solaris i GNU/Linux care deriv i sunt
asemntoare cu sistemul de operare UNIX. UNIX a fost o alegere logic i eficient ca sistem de operare
pentru servere.

Grupe (clastere) de staii de lucru (COW- Cluster Of Workstations)


Clasterele constau din zeci, sute, mii de PC-uri sau statii de lucru conectate in retea prin placi de retea de larg
consum. Sistemele COW sunt gestionate de soft specializat, ce permite s direcioneze resursele lor pentru a
rezolva diferite probleme inginereti i tiinifice. Dac frecvena accesrilor la paginile web-site-ului se
estimeaz la mii, zeci de mii pe secund, este convenabil ca serverele s fie organizate n clastere de staii de
lucru.

Calculatoarele Mainframe
Calculatoarele mainframe sunt calculatoare ce pot exploata volume imense de date i pot suporta
lucrul a mii de utilizatori simultan. Un calculator mainframe se distinge mai ales prin capacitatea de
stocare i memoria intern. El poate rula ani ntregi fr ntrerupere, Unele calculatoare pot rula mai
multe sisteme de operare simultan, opernd astfel ca o mulime de maini virtuale. Preul unui astfel de
calculator este de ordinul sutelor de mii de dolari. Este solicitat de companiile care vehiculeaz i
prelucreaz un volum foarte mare de informaie. Principala diferen ntre supercalculatoare i mainframe
este c primele se folosesc pentru operaii ce necesit calcule intense, n timp ce mainframe efectueaz
operaii de complexitate redus asupra unor volume mari de date.
Supercalculatorul posed resurse hardware i software deosebite. Se utilizeaz n industria de
aprare, n cercetarea tiinific, n cteva universiti, n industria aeronautic i spaial. Departamentul
Energiei SUA deine un supercomputer din lume The Roadrunner. Acesta are o putere de calcul de 1
petaflop (1000 trilioane operaii pe secund). Ocup o suprafa de 1100 m2 i a fost construit din 700 de
procesoare AMD Opteron.
n anul 2013 compania Cray va realiza pentru Departamentul Energiei al SUA un supercomputer
cu o putere de calcul de 20 peta operaii de secund (20 petaflops) numit Titan. Astfel, n scurt timp (anul
Arhitectura Calculatoarelor 40
2025), se va realiza un supercomputer cu o putere de calcul de 10 exaflops (10 20 flops), care va fi capabil
s simuleze activitatea creierului uman.

n studiul arhitecturilor de calcul este foarte util existena unei metode de comparare a diferitelor
arhitecturi, fr a fi necesar compararea specificaiilor detaliate ale fiecrei arhitecturi. Astfel c
arhitecturile de calcul sunt clasificate pe baza unui set mai restrns de caracteristici.
Clasificarea lui Flynn
Cea mai cunoscut clasificare a arhitecturilor de calcul este cea propus de Flynn (profesor la
Stanford University) n 1966. Aceast clasificare nu examineaz structura explicit a sistemelor ci
urmrete fluxul de date i de instruciuni prin acestea. Prin flux de instruciuni se nelege secvena de
instruciuni executat de o main sau unitate de execuie; iar prin flux de date se nelege secvena de
date apelate de fluxul de instruciuni.
Dup Flynn arhitecturile de calcul se mpart n urmtoarele patru categorii:
cu un flux de instruciuni i un flux de date (SISD);
cu un flux de instruciuni i mai multe fluxuri de date (SIMD);
cu mai multe fluxuri de instruciuni i un flux de date (MISD);
cu mai multe fluxuri de instruciuni i mai multe fluxuri de date (MIMD).

SISD (Single Instruction Single Data):


Din aceast categorie fac parte calculatoarele convenionale care execut un singur flux de instruciuni
asupra unui singur flux de date. Aceste siteme de calcul se mai numesc i calculatoare von Neumann.

Figura 3.2 Arhitectura von Neumann


Instruciunile sunt executate secvenial, ns pot exista suprapuneri ntre acestea dac este
implementat conceptul de band de asamblare (pipeline) majoritatea sistemelor SISD actuale utilizeaz
conceptul de band de asamblare. Calculatoarele SISD pot avea mai multe uniti funcionale (ex:
coprocesor matematic, procesor grafic, procesor de intrare/ieire, etc.), ns acestea sunt vzute ca o
singur unitate de execuie.

Figura 3.3 Arhitectura SISD


UC unitate de comand;
UE unitate de execuie, element de procesare, procesor;
MM modul de memorie;
SI flux (ir) de instruciuni;
SD flux (ir) de date.
Exemple de calculatoare SISD: CDC 6600, CDC 7600, Amdhal 470/6, Cray-1.

SIMD (Single Instruction Multiple Data)


Aceast categorie de arhitecturi cuprinde sistemele de calcul compuse din mai multe uniti de
execuie identice aflate sub comanda unei singure uniti de control. Unitatea de control transmite acelai
flux de instruciuni, simultan, tuturor unitilor de execuie. Toate unitile de execuie execut simultan
aceeai instruciune asupra datelor din memoria proprie (exist sisteme ce au i o memorie partajat
pentru comunicaii). Unitatea de control trebuie s permit tuturor elementelor de procesare s-i termine
instruciunea curent nainte de iniierea unei noi instruciuni, astfel c execuia instruciunilor trebuie
Arhitectura Calculatoarelor 41
sincronizat ntre toate unitile de execuie. Ca i ordin de mrime numrul procesoarelor implicate ntr-o
structur SIMD este de cteva mii.
Aplicabilitate: calculatoarele SIMD sunt folosite n cazul aplicaiilor paralele ce necesit un control fin
asupra datelor. Exemplu: reele neuronale.
Exemple de implementri SIMD: ILLIAC-IV, PEPE, BSP, STARAN, MPP, DAP, Connection Machine
CM-1, CM-2 (de la Thinking Machines Corporation), MassPar MP-1, MP-2.

Figura 3.4 Arhitectura SIMD


Topologia reelei de interconectare nu apare n clasificarea lui Flynn.
MISD (Multiple Instruction Single Data)
Arhitecturile MISD au mai multe elemente de procesare, fiecare executnd un set diferit de instruciuni
asupra unui singur flux de date. Acest lucru este realizabil n dou moduri:
acelai element din fluxul de date este prelucrat de toate procesoarele, fiecare executnd propriile
operaii asupra respectivei date;
un element din fluxul de date este prelucrat de primul procesor, rezultatul obinut este pasat mai
departe celui de-al doilea procesor .a.m.d., formndu-se astfel o macro-band de asamblare.
Singurul exemplu de implementare pentru acest tip de arhitecturi este C.mmp (calculator
multimicroprocesor) construit la Carnegie-Mellon University. Acest calculator este reconfigurabil i poate
opera n modurile SIMD, MISD i MIMD.

Figura 3.5 Arhitectura MISD

MIMD (Multiple Instruction Multiple Data)


Majoritatea sistemelor multiprocesor se pot ncadra n aceast categorie. Un sistem de calcul MIMD
are mai multe elemente de procesare interconectate, fiecare avnd propria unitate de control. Procesoarele
lucreaz fiecare asupra propriilor date executnd asupra lor propriile instruciuni. Sistemele MIMD pot
avea i memorie partajat. Operaiile executate de fiecare procesor sunt independente intre ele, deci
Arhitectura Calculatoarelor 42
modul lor de operare este asincron.
Acest tip de arhitecturi sunt aplicabile n cazul aplicaiilor paralele (calcul paralel).
Exemple de implementare: C.mmp, Burroughs D825, Cray-2, S1, Cray X-MP, SGI/Cray Power
Challenge Array, SGI/Cray Origin-2000, HP/Convex SPP-2000, Pluribus, IBM 370/168 MP, Univac
1100/80, Tandem/16, IBM 3081/3084, BBN Butterfly, Meiko Computing Surface (CS-1), FPS T/40000,
iPSC.

Figura 3.6 Arhitectura MIMD

O variant ntre SIMD i MIMD sunt arhitecturile SPMD (Single Program Multiple Data), n care
unitile de procesare execut acelai segment de cod asupra unor date diferite, independent unul de
cellalt (n mod asincron).
SIMD < SPMD < MIMD

Prezentare general a microprocesoarelor Intel


Primele microprocesoare sunt produse la firma Intel n 1971: ele se "numeau" 4004 i 8008, pe
patru i respectiv 8 bii. Primul microprocesor considerat "standard", care impune chiar o definire a
termenului i a unor concepte legate de aceast modalitate de prelucrare a informaiei este ns 8080
produs tot de firma Intel. Tot firma Intel este cea care lanseaz primul microprocesor care lucreaz pe 16
bii - Intel 8086 (1978). n 1979, Intel face, aparent, un pas napoi: lanseaz 8088 care este identic n
interior cu 8086 dar n exterior lucreaz pe 8 bii. Strategia firmei este limpede: muli fabricani nu sunt
pregtii s schimbe toate celelalte componente ale sistemelor de prelucrare pe 16bii, aa c vor prefera
nc microprocesoarele compatibile cu magistrala de 8 bii.
n tabelul de mai jos sunt prezentate generaiile i carateristicile de baz ale microprocesoarelor Intel.
Tabelul 1 - Generaiile i carateristicile de baz ale microprocesoarelor Intel
Frecvena
Limea Cache Frecvena
de tact a
magistralei Interior de tact
Tip/generaie Anul magistralei
Date/Adrese, (L1), (interioar,)
de memorie,
Bii kB (Mhz)
(Mhz)
8088/First 1979 8/20 None 4.77-8 4.77-8
8086/First 1978 16/20 None 4.77-8 4.77-8
80286/Second 1982 16/24 None 6-20 6-20
80386DX/Third 1985 32/32 None 16-33 16-33
80386SX/Third 1988 16/32 None 16-33 16-33
80486DX/Fourth 1989 32/32 8 25-50 25-50
80486SX/Fourth 1989 32/32 8 25-50 25-50
80486DX2/Fourth 1992 32/32 8 25-40 50-80
80486DX4/Fourth 1994 32/32 8+8 25-40 75-120
Pentium/Fifth
1993 64/32 8+8 60-66 60-200
Pentium
1997 64/32 16+16 66 166-233
MMX/Fifth
Arhitectura Calculatoarelor 43
Pentium Pro/Sixth 1995 64/36 8+8 66 150-200
Pentium II/Sixth 1997 64/36 16+16 66 233-300
Pentium 1999 64/36 32K+32K 100 650-1400
III/Sixth
Pentium4/ 2000 64/36 64K+64K 100 1300-3800
Seventh
Consacrarea definitiv a produselor Intel o face firma IBM care, n 1981, anun primele
calculatoare personale, IBM PC-XT, care folosesc 8088/8086. Aceste procesoare au introdus conceptul de
segmentare a memoriei: memoria este mprit n zone numite segmente de maxim 64 KB, iar cele patru
registre de segment pot pstra adresele de baz ale segmentelor active. Aceste procesoare pot funciona
numai n modul real, care este un mod uniproces, n care se execut un singur proces (program sau task)
la un moment dat.
n 1982 Intel lanseaz microprocesorul 80286 (ignorm c, ntre timp, multe firme ca National,
Fairchild, RCA, Signetics etc. produc componente similare); acesta, dei tot pe 16 bii, introduce o serie
de noi concepte fundamentale care tind s schimbe chiar noiunea de microprocesor. Procesorul 80286
poate funciona n modul real al procesoarelor precedente, dar dispune i de un mod de adresare virtual
sau mod protejat. Acest mod utilizeaz coninutul registrelor de segment ca selectori sau pointeri n tabele
ale descriptorilor de segment. Procesorul dispune de o unitate de gestiune a memoriei virtuale. n modul
protejat, procesorul poate funciona n regim multi-proces (multitasking), n care pot fi executate mai
multe procese n mod concurent. n acest mod se realizeaz o comutare prin hardware ntre procesele care
se execut concurent. Firma IBM lanseaz i ea o nou generaie de calculatoare personale: PC-AT
("Advanced Technology") care folosete Intel 80286.
Procesorul 80386 a introdus n cadrul arhitecturii Intel registre de 32 de bii, utilizate att pentru
pstrarea datelor, ct i pentru adresare. Pentru compatibilitate cu procesoarele anterioare, aceste registre
s-au obinut prin extinderea registrelor de 16 bii, fiind posibil utilizarea n continuare a vechilor registre,
acestea constituind jumtatea de ordin inferior a registrelor de 32 de bii. A fost introdus un nou mod de
funcionare, numit mod virtual 8086. Instruciunile originale au fost extinse cu noi forme care utilizeaz
operanzi i adrese de 32 de bii, i au fost introduse instruciuni complet noi, ca de exemplu instruciuni
pentru operaii la nivel de bit.
Procesorul 80386 a introdus de asemenea mecanismul de paginare ca metod de gestiune a
memoriei virtuale. El a fost primul din cadrul familiei 80x86 care a utilizat o form de prelucrare paralel
i o memorie ncorporat cache cu informaii despre pn la 32 de pagini cel mai recent accesate.
Procesorul 80486 a fost primul din familia 80x86 la care unitatea de calcul n virgull mobil a
fost integrat n acelai circuit cu unitatea central. Procesorului i s-a adugat o memorie cache de nivel 1
(L1 Level 1) de 8 KB. Au fost adugai de asemenea noi pini i noi instruciuni care permit realizarea
unor sisteme mai complexe: sisteme multiprocesor i sisteme care conin o memorie cache de nivel 2 (L2
Level 2).
Au fost dezvoltate versiuni ale procesorului 80486 n care au fost incluse faciliti pentru reducerea
consumului de putere, ca i alte faciliti de gestiune a sistemului. Una din aceste faciliti este noul mod
de gestiune a sistemului (System Management Mode SMM), pentru care s-a prevzut un pin dedicat de
ntrerupere. Acest mod permite operaii complexe de gestiune a sistemului (ca de exemplu gestiunea
puterii consumate de diferitele subsisteme ale calculatorului), ntr-un mod transparent pentru sistemul de
operare i pentru programele de aplicaii. Facilitile numite Stop Clock i Auto Halt Power down
permit funcionarea unitii centrale la o frecven redus a tactului pentru reducerea puterii consumate,
sau chiar oprirea funcionrii (cu memorarea strii).
n 1993, se lanseaz primul microprocesor al generaiei a cincea, numit din acest motiv Pentium.
Procesorul Pentium a adugat o nou linie de execuie de tip pipeline a instruciunilor, pentru a se obine
performane superscalare. Cele dou linii de execuie a instruciunilor, numite U i V, permit execuia a
dou instruciuni pe durata unei perioade de tact. Capacitatea memoriei cache L1 a fost de asemenea
dublat , fiind alocai 8 KB pentru instruciuni i 8 KB pentru date. Memoria cache pentru date utilizeaz
protocolul MESI, care permite gestiunea memoriei cache att prin metoda mai eficient write-back, ct
i prin metoda write-through utilizat de procesorul 80486. Procesorul Pentium utilizeaz predicia
salturilor pentru a crete performanele construciilor care utilizeaz bucle de program. Registrele
generale sunt tot de 32 de bii, dar s-au adugat magistrale interne de date de 128 i 256 de bii pentru a
crete viteza transferurilor interne, iar magistrala extern de date a fost extins la 64 de bii. Procesorului i
s-a adugat un controler avansat de ntreruperi (Advanced Programmable Interrupt Controller APIC)
Arhitectura Calculatoarelor 44
pentru a permite realizarea sistemelor cu mai multe procesoare Pentium, fiind adugate de asemenea noi
pini i un mod special de procesare dual pentru sistemele cu dou procesoare.
Procesorul Pentium Pro este primul din cadrul familiei de procesoare P6. Acest procesor are o
arhitectur superscalar mbuntit, care permite execuia a trei instruciuni ntr-o perioad de tact.
Procesorul Pentium Pro, ca i urmtoarele procesoare din familia P6, se caracterizeaz prin execuia
dinamic a instruciunilor, care const din analiza fluxului de date, execuia instruciunilor ntr-o alt
ordine dect cea secvenial, o predicie mbuntit a salturilor i execuia speculativ. Pe lng cele
dou memorii cache L1 de cte 8 KB, prezente i la procesorul Pentium, procesorul Pentium Pro dispune
i de o memorie cache L2 de 256 KB, aflat n acelai circuit cu unitatea central , conectat cu aceasta
printr-o magistral dedicat de 64 de bii. Procesorul Pentium Pro are o magistral de adrese extins la 36
de bii, astfel nct spaiul adreselor fizice este de pn la 64 GB.
Procesorul Pentium II se bazeaz pe arhitectura Pentium Pro, la care s-au adugat extensiile MMX
(Multimedia Extensions). Memoria cache L2 a fost mutat n afara capsulei procesorului. Att memoria
cache L1 pentru date, ct i memoria cache L1 pentru instruciuni au fost extinse la 16 KB fiecare.
Dimensiunea memoriei cache L2 poate fi de 256 KB, 512 KB, 1 MB sau 2 MB. Procesorul Pentium II
utilizeaz diferite stri cu consum redus de putere, ca de exemplu AutoHALT, Sleep i Deep Sleep,
pentru reducerea puterii consumate n perioadele de inactivitate.
Pentium III este ultimul din cadrul familiei P6, i se bazeaz pe arhitecturile procesoarelor Pentium Pro i
Pentium II. Au fost adugate 70 de noi instruciuni la setul de instruciuni existent. Acestea sunt destinate
att unitilor funcionale existente la procesoarele precedente, ct i noii uniti de calcul n virgul
mobil de tip SIMD (Single Instruction, Multiple Data).
Primul din familia P7, numit Pentium 4, a primit i o nou arhitectur cu o vitez de procesare mai
performant. n versiunea microprocesorului cu frecvena de tact de 3,06 Ghz a fost realizat o nou
tehnologie hyperthreading. Aceast tehnologie permite ca procesele (programele) s fie divizate n dou
fluxuri de program pentru a fi procesate n paralel de microprocesor, ce mrete viteza de procesare.
Pentru creterea vitezei de prelucrare a datelor audio i video a fost introdus un set suplimentar din SSE
instruciuni.
n noembrie 2004 firma Intel a renunat la producerea n serie a microprocesorului Pentium 4 cu
frecvena de 4 Ghz din cauza dificultilor aprute la rcirea lui.
Actualmente, firma Intel, ncapsuleaz dou i mai multe nuclee de microprocesor cu frecvene reduse
n circuitul unui microprocesor, ce exclud dificultile cu rcirea lor.
Evoluia dispozitivelor pe care am descris-o pn n acest moment se refer exclusiv la
microprocesoarele ale cror caracteristici eseniale i arii de aplicaii posibile s-au dezvoltat de la tipurile
de baz lansate n anii 70. Noi vom denumi aceste dispozitive " microprocesoare" i le vom defini n acest
capitol; vom detalia, n evoluia lor, conceptele eseniale care stau la baza funcionrii lor n capitole
urmtoare.
Exist ns i alte direcii de dezvoltare a dispozitivelor de prelucrare a informaiei; un exemplu sunt
aa numitele "procesoare cu set redus de instruciuni" (RISC) avnd ca reprezentani procesoarele SPARC
(produse de diferite firme), i860 (Intel), M88000 (Motorola) etc. De asemenea exist procesoare
specializate pentru anumite tipuri de prelucrri specifice cum sunt procesoarele digitale de semnal (DSP)
i altele.
n volumul de fa, ne vom ocupa de ceea ce este cunoscut sub numele de microprocesor. Motivul
pentru care am insistat pe reprezentanii familiei Intel este acela c, dup prerea noastr, aceast firm
ofer reperele importante ale implementrii conceptelor de baz care caracterizeaz aceste dispozitive.

3.2 Microprocesoarele CISC/RISC


Multe microprocesoare au seturi de instruciuni ce includ mai mult de 100 200 instruciuni. Ele
folosesc o varietate de tipuri de date i un mare numr de moduri de adresare. Tendina aceasta de a mri
numrul de instruciuni a fost influenat de mai muli factori, dintre care amintim:
perfecionarea unor modele de procesoare existente anterior, pentru a pune la dispoziia
utilizatorilor (programelor utilizator) ct mai multe funcii;
adugarea de instruciuni care s faciliteze translatarea din limbajele de nivel nalt n programe
cod executabil (limbaj main);
Aa arhitecturi de microprocesoare au fost numite arhitecturi CISC - Complex Instruction Set
Computer - calculator cu set complex de instruciuni. Cteva din caracteristici sunt:
Multe instruciuni care prelucreaz operanzi din memorie;
Arhitectura Calculatoarelor 45
Format de lungime variabil pentru instruciuni;
Unitate de control microprogramat (micro-codat), avantajoasa din punctul de vedere al
flexibilitii implementrii, dar lent;
Set complex (extins) de instruciuni i o mare varietate de moduri de adresare;
Un numr relativ mic de registre n interiorul UCP.
Utilizarea compilatoarelor optimizatoare - pentru a optimiza performanele codului obiect;
Ideea simplificrii setului de instruciuni, n scopul mririi performanelor procesorului, provine din
proiectele realizate la universitile americane din Berkeley (RISC I, RISC II i SOAR) i Stanford
(proiectul MIPS). Proiectele RISC (Reduced Instruction Set Computer - Calculator cu set redus de
instruciuni) au urmrit ca instruciunile procesorului s fie de aceeai lungime, instruciunile s se
execute ntr-o singur perioad de ceas (cu ajutorul tehnicii de tip pipeline). La RISC se urmrete de
asemenea ca accesrile la memorie (consumatoare de timp) s se efectueze doar pentru operaiile de
ncrcare i stocare (arhitectura fiind numit n consecin: "load/store"), iar celelalte operaii s se
efectueze cu operanzi stocai n registrele interne ale UCP. Unele din proiectele de arhitecturi RISC
folosesc un set mare de ferestre de registre pentru a accelera operaiile de apel al subrutinelor.
Rezumnd, putem enumera cteva din elementele caracteristice pentru mainile RISC:
Acces la memorie limitat, doar prin instruciuni de ncrcare (load) i stocare (store);
Format de lungime fix pentru instruciuni, deci uor de decodificat; caracteristic care contribuie
la simplificarea structurii unitii de control;
structur simpl a unitii de control, deci cu vitez mare de funcionare;
Relativ puine tipuri de instruciuni (tipic sub 100 de instruciuni) i puine moduri de adresare
(din nou aceast caracteristic contribuie i la simplificarea structurii unitii de control);
Tehnica de tip pipeline este utilizat i la arhitecturile CISC, dar la RISC tehnica este mai eficient
i mai uor de implementat, datorit lungimii constante a instruciunilor;
Un numr relativ mare de registre n interiorul UCP;
Asa cum s-a artat mai sus, arhitecturile RISC restricioneaz numrul de instruciuni care acceseaz
direct memoria principal. Cele mai multe instruciuni ale RISC presupun doar operaii ntre registrele
interne UCP. Pentru c instruciunile complexe nu exist n setul de instruciuni, dac este nevoie de ele,
acestea se implementeaz prin rutine cu ajutorul instruciunilor existente. n final, ntr-un program
executabil vor fi mai multe instruciuni dect la CISC, dar execuia pe ansamblu va fi mai rapid. Formal,
toate microprocesoarele x86 erau microprocesoare de tip CISC, dar microprocesoarele noi, ncepnd de la
Intel 486DX sunt microprocesoare CISC cu un nucleu RISC. Instruciunile microprocesoarelor x86 de tip
CISC, nainte de executarea lor, sunt transformate ntr-un set simplu de instruciuni interne de tip RISC..
Multe microprocesoare moderne ncorporeaz arhitecturi RISC, ca de exemplu ARM, DEC Alpha,
SPARC, AVR, MIPS, POWER, PowerPC.

3.3 Banda de asamblare (pipeline)


Introducem noiunea de arhitectura suprascalar. Pentru a explica aceast noiune, urmrim utilizarea
microinstruciunilor executate n paralel (tehnica "pipeline") folosite de microprocesoarele moderne.
ncepnd cu microprocesorul i486 (fig. 3.7 ), Intel a introdus o band de asamblare, numit tehnica
pipeline, care const din 5 segmente:
Unitate de Unitate pentru Unitate pentru
execuie n segmentare paginare
virgul mobil
Unitate de
interfa cu
magistrala

Memoria
cache
Unitate de
execuie
Unitate pentru Unitate
decodificare pentru
instruciuni prefetch
Arhitectura Calculatoarelor 46

Figura 3.7
Ciclul main fetch(Citirea instruciunii din cache sau din memoria intern);
Decodificarea instruciunii decodific n microinstruciuni;
Generarea adresei pentru localizarea operanzilor n memorie;
Prelucrarea instruciunii n UAL;
nscrierea rezultatului ( unde va fi nscris rezultatul depinde de formatul instuciunii).
Toate aceste segmente sunt executate n paralel. Din unitatea prefetch instruciunea se transfer n
unitatea pentru decodificarea instruciuni, i unitatea prefetch este liber i poate citi urmtoarea
instruciune. Deci, n interiorul microprocesorului se afl 5 instruciuni n diferite segmente de execuie.
Aceste segmente formeaz o Band de asamblare (pipeline).
Figura 3.8 ilustreaz o band de asamblare cu 5 unitati numite si stages (segmente, etape). Segmentul 1
extrage instructiunea din memorie si o plaseaza ntr-un registru tampon. Segmentul 2 o decodifica,
determinndu-i tipul si operanzii. Segmentul 3 localizeaza si extrage operanzii, fie din registri, fie din
memorie. Segmentul 4 executa instructiunea, de obicei rulnd operanzii prin calea de date, iar segmentul
5 scrie rezultatul n registri.

Figura 3.8 - O banda de asamblare de 5 segmente (a)


Starea fiecarui segment n functie de timp (b).

n figura 3.8 b vedem cum opereaza o banda de asamblare n functie de timp. n ciclul 1, segmentul
S1 lucreaza asupra instructiunii 1 (o extragere din memorie). n ciclul 2, S2 decodifica instructiunea 1.
Tot n ciclul 2, S1 extrage instructiunea 2. n ciclul 3, S3 extrage operanzii pentru instructiunea 1, S2
decodifica instructiunea 2 si S1 extrage instructiunea 3.
Microprocesoarele ce includ o Band de asamblare se numesc microprocesoare cu arhitectura scalar,
cele ce includ dou i mai multe - microprocesoare cu arhitectura suprascalar. Microprocesorul
Pentium include dou Benzi de asamblare i poate executa 2 instruciuni pe durata unei perioade de ceas
(clock, stare).
Date fiind avantajele benzii de asamblare, ar fi de dorit mai multe din acestea. n figura 3.9 este
prezentat o posibil proiectare a unui UCP n band de ansamblare duala. Pentru a putea lucra n paralel,
cele 2 instructiuni nu trebuie s-i dispute resursele (de exemplu registrele) i nici una nu trebuie s
depind de rezultatul celeilalte. Fie compilatorul trebuie s garanteze c ipoteza anterioara e respectat,
fie conflictele sunt detectate i eliminate pe parcursul execuiei, cu ajutorul unui hardware suplimentar.
Arhitectura Calculatoarelor 47

Figura 3.9 Banda de ansamblare duala cu 5 segmente

Pentium are dou benzi de ansamblare asemanatoare cu cele din fig. 3.9, dei mpartirea ntre
segmentele 2 si 3 (numite decode-1 si decode-2) este puin diferit fa de cea din exemplul nostru. Banda
de asamblare principal, numita u pipeline, poate executa orice instrutiune Pentium, n timp ce a doua
band, numit v pipeline, poate executa doar instruciuni pentru ntregi i o instruciune simpl n
virgul mobil FXCH. Reguli destul de complexe determin dac instruciunile sunt compatibile, astfel
nct s poat fi executate n paralel.
Alte UCP utilizeaz abordari cu totul diferite. Idea de baz este de a avea o singur band de
ansamblare, dar cu mai multe uniti funcionale, aa cum se observa n figura 3.10.

Figura 3.10 - Un processor superscalar cu 5 unitati functionale

Procesorul Pentium II are o structur asemntoare (sunt i diferene) cu cea din fig. 3.10. Unita ile
funcionale UAL din segmentul S4 pot executa instruciuni timp de un ciclu de ceas, iar cele care
acceseaz memoria sau care lucreaz n virgul mobil (mai lente), au nevoie de mai mult timp dect un
ciclu de ceas pentru a-i executa funcia. Dup cum se poate observa, pot exista mai multe uniti
funcionale n segmentul S4.

You might also like