Sunteți pe pagina 1din 64

Arhitectura Calculatoarelor

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. n assembler acest instruciune se descrie mov al,6.
Scrierea instruciunilor se poate realiza, la nceput, n limbaj natural, transpunndu-se apoi ntrun 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

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 se cunoasc
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 1, numit nivelul logicii digitale, este reprezentat de componentele hardware ale calculatorului
(maina fizic). Circuitele acestui nivel execut instruciunile main ale nivelului 2. Elementele de baz
ale acestor circuite sunt porile logice, fiecare poart fiind format la rndul ei dintr-un numr de
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 2 reprezint setul de instruciuni ale unei arhitecturii concrete de microprocesor.
Productorii de microprocesoare proiecteaz microprocesoarele sale ca s recunoasc un anumit set de
instruciuni pentru a efectua operaiuni de baz, cum ar fi copierea, adunarea, sau multiplicarea. Acest set
de instruciuni este menionat ca limbaj main. Fiecare instruciune din limbajul ma in este executat fie
direct prin hardware-ul calculatorului sau de un microprogram ncorporat n cipul microprocesorului.
De menionat c la anumite calculatoare nivelul de microprogram lipsete. La aceste calculatoare,

Arhitectura Calculatoarelor

instruciunile mainii convenionale sunt executate direct de circuitele electronice ale nivelului 1.
Nivelul 3 este nivelul limbajului de asamblare. Limbaj de asamblare, care apare la nivelul 3,
folosete mnemonice scurte, cum ar fi ADD, SUB, i MOV, care sunt u or decompilate (asamblate) la
nivelul ISA.
Nivelul 4 const din limbajele destinate programatorilor de aplicaie, fiind numit nivelul
limbajelor de nivel nalt. Programele scrise n aceste limbaje sunt translatate n o mulime de instruciuni
a limbajului nivelului 3 cu ajutorul compilatoarelor sau interpretoarelor.
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.

Arhitectura Calculatoarelor

2 Regitrii microprocesoarelor
2.1 Noiuni generale
n Assembler, calculatorul este vzut la nivelul hardware: adrese fizice de memorie, regitri,
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).
2.2 Regitrii microprocesoarelor 86-64
Fiecare program la execuie obine anumite resurse ale microprocesorului. Aceste resurse (regitri)
sunt necesare pentru executarea i pstrarea n memorie a instruciunilor i datelor programului, a
informaiei despre starea curent a programului i a microprocesorului.
Microprocesoarele pe 32 bii funcioneaz n diferite moduri, ce determin mecanismele de protecie
i de adresare a memoriei: modul real 8086 (pe 16 bii), modul virtual 8086 (V8086), modul protejat pe
32 bii (inclusiv protejat pe 16 bii). Modul de funcionare a microprocesorului este impus de sistemul de
operare (SO) n conformitate cu modul definit de aplicaii (task-uri).
n microprocesoarele pe 64 bii au fost introduse noi moduri de funcionare:
Modul pe 64 bii (64-bit mode) acest mod susine adresarea virtual pe 64 bii i extensiile
regitrilor pe 64 bii. n acest mod este folosit numai modelul plat de memorie (un segment
comun pentru cod, date i stiv).
Modul de compatibilitate (compatibility mode) permite SO s execute aplicaii pe 32 i 16
bii. Pentru aplicaii microprocesorul reprezint un microprocesor pe 32 bii cu toate atributele
modului protejat, cu mecanismele de segmentare i paginare.
Microprocesoarele pe 64 bii reprezint seturi de regitri disponibile programatorilor (figura 2.1).

Figura 2.1 Regitrii microprocesoarelor 86-64

Arhitectura Calculatoarelor

Structura i destinaia regitrilor setului FPU/MMX, XMM, de sistem vor fi prezentate n capitolul
Modelul program ale microprocesoarelor.
2.2.1 Regitrii de uz general
n figura 2.2 sunt prezentai regitrii de uz general pe 64 bii.

Figura 2.2 - Regitrii de uz general pe 64 bii


Regitrii pe 64 bii sunt indicai cu prefixul (REX). Adresarea la fiecare din 16 regitri se petrece ca la
un registru pe 64-, 32-, 16- sau 8 bii (se folosesc numai biii inferiori). Structura i destinaia regitrilor
va fi detaliat n subcapitolele urmtoare, n descrierea modurilor de compatibilitate.
2.3 Modul de compatibilitate pe 16 bii
Pentru modul de compatibilitate pe 16 bii (modul 8086), sunt utilizai numai prile inferioare pe 16
bii (figura 2.3) ai regitrilor microprocesoarelor pe 64 (32) bii, setul de regitri este urmtorul:

Figura 2.3
Toi regitrii sunt de 16 bii. O serie de regitri (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 regitrilor sunt:
AX - registru acumulator
BX - registru de baz general
CX - registru contor

Arhitectura Calculatoarelor

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 (bii indicatori) procesorului, sau bistabililor de condiie, iar
registrul IP (instruction pointer) este registrul de instruciuni.
Regitrii de date (AX, BX, CX, DX) pot fi folosite pentru memorarea datelor, ns unele din acestea
sunt folosite special pentru alte scopuri. De exemplu registrul CX este folosit ca contor n instruciunea
LOOP de ciclare, care l modific implicit i-i testeaz valoarea, registrul DX este folosit n instruciunile
de mprire si nmulire, iar registrul BX este folosit pentru adresarea datelor (operanzilor).
n modul 8086 unui program scris n limbaj de asamblare se aloc patru zone de lucru n memorie: o
zon pentru date, o zon pentru instruciuni, o zon special pentru stiv i o zon suplimentar pentru date.
Fiecare din aceste zone pot avea pn la 64K octei i poart denumirea de segment. Astfel exist segmentul
de date (Data Segment), segmentul de instruciuni, cod (Code Segment), segmentul de stiv (Stack Segment)
si segmentul suplimentar de date (Extra Segment).
Este posibil ca cele 4 segmente sa fie suprapuse total sau parial. Adresele de nceput ale acestor
segmente se afl n 4 regitri segment.
Denumirile regitrilor 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 regitrilor de segment corespund zonelor principale ale unui program
executabil. Astfel, perechea de regitri (CS:IP) va indica totdeauna adresa urmtoarei instruciuni care se
va executa, iar perechea (SS:SP) indic totdeauna adresa vrfului stivei. Regitrii DS i ES conin
adresele segmentelor de date i sunt folosite pentru a accesa date.
Dac segmentul de date ncepe de la locaia de memorie 1234h atunci DS va conine valoarea 1234h. Exist
instruciuni pentru ncrcarea adreselor de memorie n regitrii segment.
Regitrii pointer (SP si BP) se folosesc pentru calculul offsetului (distanei fa de nceputul unui
segment) din cadrul segmentului. Cei doi regitri pointer sunt: pointerul de stiva SP (Stack Pointer) si
pointerul de baza (Base Pointer). SP si BP sunt de 16 biti.
Registrul SP reine adresa efectiv (offsetul) a vrfului stivei (figura 2.4). Adresa fizic a vrfului stivei
SS:SP este dat de perechea de regitri SS si SP, registrul SS conine adresa de nceput al segmentului de
stiva iar SP conine offsetul din acest registru (adic distana in octei de la nceputul registrului de stiva):

stiva
Push ax
SP

Varful stivei
offset

SS

Baza stivei

Arhitectura Calculatoarelor

Figura 2.4
Registrul BP este folosit la calculul offset-ului din interiorul unui segment. De exemplu poate fi
folosit ca pointer al unei stive proprii, dar nu a procesorului. Este folosit n principal pentru adresarea
bazat indexat a datelor.
Regitrii de index, de 16 biti sunt: SI (Source Index) si DI (Destination Index). Regitrii de index
sunt folosite pentru accesul la elementele unui tablou sau a unei tabele. Aceti regitri sunt folosite
ndeosebi in prelucrarea irurilor de caractere.
Registrul de instruciuni (Instruction Pointer) conine offsetul curent n segmentul de cod. Adic
adresa efectiv a urmtoarei instruciuni de executat din segmentul de cod curent. Dup executarea
instruciunii curente, microprocesorul preia din IP adresa urmtoarei instruc iuni de executat i
incrementeaz corespunztor valoarea lui IP, cu numrul de octei ai codului instruciunii ce va fi
executat. Uneori acest registru se numete numrtor de program.
Registrul de flag-uri (fanioane) (bistabili de condiie) al modului 8086 are configuraia din figura
2.5. O serie de flag-uri sunt flag-uri de stare: acestea sunt poziionate la 0 sau la 1 ca urmare a unor
operaii aritmetice sau logice, conin informaii despre ultima instruciune executat. Celelalte flag-uri
controleaz anumite operaii ale procesorului.
Din cei 16 bii ai registrului sunt folosii 9 bii: 0, 2, 4, 6 11.
Aproape toate instruciunile limbajului de asamblare afecteaz biii de stare.
Semnificaia flag-urilor (biilor) 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.

Figura 2.5 - Registrul de flag-uri 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 flag-ul 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.
Flag-urile CF, PF, AF, ZF, SF i OF sunt numite flag-uri de stare (aritmetice). Flag-urile TF, IF i DF sunt
numite flag-uri de control.
2.3.1 Formarea adresei fizice
Procesorul 8086 dispune de adrese pe 20 de bii, fiind capabil s adreseze 1 megaoctet de memorie
(220). Se pune problema cum se formeaz adresa fizic pe 20 de bii (deci pe 5 cifre hexa), deoarece toate

Arhitectura Calculatoarelor

Regitrii 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 n unul din cei 4 regitri 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.6.
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).

Figura 2.6 - 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.3.2 Definirea segmentelor. Structura programelor
Segmentele logice conin cele trei componente ale unui program: cod, date si stiv.
Pentru a scrie un program ASM (n modul 8086), se folosesc directivele simplificate de definire a
segmentelor. Acestea sunt:
.model small (precizeaz un model de memorie)
.stack n (definire de segment de stiv)
.data (definire de segment de date)
.code (definire de segment de cod)
end etichet (sfrit logic al programului)

Arhitectura Calculatoarelor

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.
Structura programului este:
.MODEL small
.STACK 512
.DATA
definirea datelor
.CODE
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 i 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 i n cadrul segmentului de cod. Regitrii de segment nu sunt niciodat ncrcate cu valori
absolute. Se las n seama sistemului de operare sarcina amplasrii n 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.
Cele mai des utilizate modele de memorie sunt tiny i small (pot fi i 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.
small - datele i stiva sunt grupate ntr-un singur segment iar codul n alt segment. Fiecare din acestea
nu depesc 64KO.
Etichetele sunt nume simbolice de adrese (offset) 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 n segmentul de program 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.4 Modul de compatibilitate pe 32 bii (microprocesor de 32 bii)
Pentru modul de compatibilitate pe 32 bii, sunt utilizate numai prile inferioare pe 32 bii ai
regitrilor microprocesoarelor pe 64 de bii i setul de regitri de uz general este prezentat n figura 2.7.
Microprocesoarele de 32 bii sunt compatibile ca arhitectur cu cele de 16 bi i, prin aceea c regitrii de

Arhitectura Calculatoarelor

10

16 bii se regsesc ca subregitri ai regitrilor de 32 de bi i. Pentru accesarea regitrilor de 32 bii a fost


adugat un set de instruciuni.
Regitrii din figur, de exemplu al, ah, ax , indic regitri pe 8 i 16 bii ale registrului extins eax
pe 32 bii (prefix e (Extended)).

Figura 2.7 - Setul de regitri de uz general


Regitrii generale ax, bx, cx, dx, si, di, bp i sp de 16 bi i fac parte din regitrii generale de 32 bi i ai
microprocesoarelor de 32 bii extinse: eax, ebx, ecx, edx, esi, edi, ebp si esp. Primii 16 bi i din aceti
regitri sunt regitrii generali ai microprocesoarelor de 16 biti.
Analog regitrii IP si FLAGS de 16 bii sunt extinse la 32 bii in cazul regitrilor EIP i ELAGS de
32 bii. Registrul FLAGS se regsete n primii 16 bii ai registrului EFLAGS.
rsegment au fost pstrate de 16 bii, dar s-au adugat doi noi regitri FS i GS.
Pe lng aceti regitri, microprocesoarele de 32 (64) de bii dispun de ali regitri de control, de
gestionare a adresei, de depanare i de test, care difer de la un tip de procesor la altul fiind folosite n
principal de programele de sistem.
Semnificaia regitrilor segment n cazul microprocesoarelor de 32 bi i a fost modificat, ele sunt
folosite ca selectoare de segment (detaliat n capitolul memoria virtual). n acest caz ele nu indic o
adres de segment, ci un descriptor de segment care precizeaz adresa de baz a segmentului,
dimensiunea acestuia i drepturile de acces asociate acestuia. Astfel adresa de baz poate fi specificat pe
32 bii iar dimensiunea unui segment s fie de pn la 4 GB.
2.5 Tipuri de date
Tipurile de date sunt urmtoarele.
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:

Arhitectura Calculatoarelor

11

1
3

0
2

1
1

1
0

Octetul (Byte). Octetul sau byte este un element de memorare, 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:
0
7

1
6

1
5

0
4

0
3

0
2

0
1

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 secven 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
15

1
14

1
13

0
12

0
11

0
10

0
9

1
8

1
7

0
6

0
5

1
4

1
3

0
2

0
1

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 con ine bi ii 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 (n ordinea little-endian).
De exemplu dublul cuvnt 12 34 56 78h, aflat la offset-ul 0000, va fi memorat astfel 78 56 34 12,
cu octetul 78h la offset-ul 0000, iar octetul 12h la offset-ul 0003.

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 72-79) la adresa cea mai mare.

Arhitectura Calculatoarelor

12

2.6 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 directivelor BYTE i SBYTE:
value1
value2
value3
value4
value5
value6

BYTE
BYTE
BYTE
SBYTE
SBYTE
BYTE

'A' ; character ASCII


0 ; byte fr semn
255 ; byte fr semn
128 ; byte cu semn
+127 ; byte cu semn
? ; byte nedefinit

Definirea datelor de tip byte se face i cu ajutorul directivei DB (Define Byte):


Fie directivele:
alfa
DB 65, 72h, 75o, 11011b, 11h+22h, 0ach
DB -65, 'a', 'abc'
n memorie ncepnd de la adresa simbolica alfa (offset, etichet de date), se va genera secvena
de octei, reprezentata in hexazecimal :
41
alfa +0

72
+1

3d
+2

1b
+3

33
+4

ac

bf

61

61

62

63
+10

Valoarea binara 11011b va fi generata la adresa alfa+3.


Definirea irurilor de caractere:
salutare1 BYTE "Good afternoon",0
greeting2 BYTE 'Good night',0
Utilizarea operatorului DUP (duplicate):
BYTE 20 DUP(0) ; 20 bytes, toate ncrcate cu zero
BYTE 20 DUP(?) ; 20 bytes, nedefinii
BYTE 4 DUP("STACK") ; 20 bytes: "STACKSTACKSTACKSTACK"
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
- o adresa de memorie de 16 bii.
Reprezentarea celor 2 octei ai cuvntului in memorie se face astfel nct octetul cel mai pu in
semnificativ este memorat la adresa cea mai mica. De exemplu: daca valoarea 2345h este memorata la

Arhitectura Calculatoarelor

13

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 directivele de tip WORD i SWORD:
word1 WORD
65535 ; ntreg pe 16 bii fr semn
word2 SWORD -32768 ; ntreg pe 16 bii cu semn
word3 WORD ?
; neiniializat
Generarea datelor de tip cuvnt se poate face i cu directiva de tip DW (Define Word):
Fie secvena de directive:
beta

DW
DW

4567h, 0bc4ah, 1110111011b, 2476o


-7683, 7683, 'ab'

In memorie de la adresa beta se vor genera octeii:


67
45
beta

4a
+2

bc

bb
+4

03

3e
+6

05

fd e1
+8

03

e1

62
61
+12

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 regitri de 16 bii sau ntr-un registru de 32 bii (la procesoarele de 32
bii).
Informaia memorata ntr-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 directivele DWORD i SDWORD:
val1 DWORD 12345678h ; fr semn
val2 SDWORD 21474836 ; cu semn
val3 DWORD 20 DUP(?) ; fr semn
Generarea datelor de tip dublu cuvnt se face i cu directiva DD (Define Double Word):
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.
Secvena de directive :
val1 DD 12345678h ; fr semn
val2 DD 21474836 ; cu semn
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 regitri de 32 bii (n cazul procesoarelor de 32 bii), sau ntr-un registru pe 64 bii.
Informaia stocata intr-un qword poate fi: un ntreg cu sau fr semn pe 64 bii, sau un numr real
n dubl precizie.
Generarea unor date de tip qword se face cu ajutorul directivei QWORD:
quad1 QWORD 1234567812345678h
Generarea unor date de tip qword se face i cu directiva DQ (Define Quad word):

Arhitectura Calculatoarelor

14

quad1 DQ 1234567812345678h
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.

e) Ten Bytes
Valorile Ten byte (tbyte) ocup 10 octei consecutivi de memorie, sau unul din regitrii
coprocesorului matematic.
Informaia stocata intr-un tbyte poate fi: un numr ntreg reprezentat ca o secvena de cifre BCD
(format mpachetat) cu sau fr semn, sau un numr real in precizie extinsa.
Generarea unor date de tip tbyte se face cu directiva TBYTE, de ex. valoarea zecimal -1234:
intVal TBYTE 80000000000000001234h
Generarea datelor de tip tbyte se face i cu directiva DT ( Define Ten Bytes):
intVal

DT 80000000000000001234h

n format BCD mpachetat fiecare cifra zecimal se reprezint pe o tetrad (4 bi i), deci 2 cifre
BCD pe octet. Un ntreg BCD se poate reprezenta cu maxim 19 cifre zecimale, care ocup 76 bii. Ultima
tetrad aflat la adresa cea mai mare este destinat memorrii semnului.
f) Definirea datelor n virgul mobil
Definirea datelor n virgul mobil se face cu directivele:
REAL4 definete variabile n virgul mobil, n simpla precizie pe 32 bii;
REAL8 definete variabile n virgul mobil, n dubla precizie pe 64 bii;
REAL10 definete variabile n virgul mobil, cu precizie extins pe 80 bii.
rVal1 REAL4 -1.2
rVal2 REAL8 3.2E-260
rVal3 REAL10 4.6E+4096
ShortArray REAL4 20 DUP(0.0)
Definirea datelor n virgul mobil se face i cu directivele:
rVal1 DD -1.2
rVal2 DQ 3.2E-260
rVal3 DT 4.6E+4096
Gama valorilor definite pot fi:
REAL4 - 1.18 x10-38 pn 3.40 x1038
REAL8 - 2.23x10-308 pn 1.79x10308
REAL10 - 3.37x10-4932 pn 1.18x104932
2.7 Setul de instruciuni MASM
n cadrul acestui subcapitol, sunt prezentate n detaliu instruciunile de baz ale familiei de
microprocesoare Intel (x86). 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 regitrii
microprocesorului, fr a executa nici un fel de prelucrare a datelor;

Arhitectura Calculatoarelor

15

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, la prima vedere, ar putea fi considerate instruciuni
specifice procedurilor. Acelai lucru despre instruciunile IN i OUT, care interfaeaz microprocesorul 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 flag-urilor (indicatorilor de
condiie) care sunt modificai n urma execuiei.
Structura general a instruciunilor x86 este urmtoarea:
[eticheta:] mnemonic [operanzi][ ; comentariu ]
Instruciunile pot conine zero, unu, doi sau trei operanzi. Omitem cmpurile etichet i comentariu:
mnemonic
mnemonic [destinatie]
mnemonic [destinatie],[sursa]
mnemonic [destinatie],[ sursa-1],[ sursa-2]
Sunt trei tipuri de baz de operanzi:
valoare imediat
registru (valoare se afl n registru al microprocesorului)
referin la o locaie de memorie.

2.7.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 patrate pentru a desemna coninutul lui x.
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.
Restricii:
Este necesar ca ambii operanzi s fie de aceiai mrime;
Ambii operanzi nu pot fi locaii de memorie (este necesar utilizarea unui registru);
Regitrii IP, EIP, sau RIP nu pot fi ca operanzi destinaie.
Structura instruciunii MOV poate fi urmtoarea:
MOV reg,reg

Arhitectura Calculatoarelor

16

MOV mem,reg
MOV reg,mem
MOV mem,imm
MOV reg,imm
Exemple:
.data
var1 WORD ?
var2 WORD ?
.code
mov ax,var1
mov var2,ax
.data
oneByte BYTE 78h
oneWord WORD 1234h
oneDword DWORD 12345678h
.code
mov eax,0 ; EAX = 00000000h
mov al,oneByte ; EAX = 00000078h
mov ax,oneWord ; EAX = 00001234h
mov eax,oneDword ; EAX = 12345678h
mov ax,0 ; EAX = 12340000h
.data
alfa dw 1234h
beta db 56h
.code
mov ax, alfa;
transfera coninutul adresei alfa n ax
mov bx, offset beta; 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
Instruciunea MOVZX (move with zero-extend)
Copie coninutul sursei n destinaie cu extinderea valorii ntroducnd zerouri. Aceast instruciune este
utilizat numai petru valori fr semn. Sunt trei variante:
MOVZX reg32,reg/mem8
MOVZX reg32,reg/mem16
MOVZX reg16,reg/mem8
Exemple:
.data
byteVal BYTE 10001111b
.code
movzx ax,byteVal ; AX = 0000000010001111b

Arhitectura Calculatoarelor

17

.data
byte1 BYTE 9Bh
word1 WORD 0A69Bh
.code
movzx eax,word1 ; EAX = 0000A69Bh
movzx edx,byte1 ; EDX = 0000009Bh
movzx cx,byte1 ; CX = 009Bh
Instruciunea MOVSX (move with sign-extend)
Copie coninutul sursei n destinaie cu extinderea valorii ntroducnd uniti. Aceast instruciune este
utilizat numai petru valori cu semn. Sunt trei variante:
MOVZX reg32,reg/mem8
MOVZX reg32,reg/mem16
MOVZX reg16,reg/mem8
Exemplu:
mov bx,0A69Bh
movsx eax,bx ; EAX = FFFFA69Bh
movsx edx,bl ; EDX = FFFFFF9Bh
movsx cx,bl ; CX = FF9Bh
b) Instruciunea XCHG ( Exchange Data )
Interschimb sursa cu destinaia. Forma general:
XCHG
dest, sursa
Restricii:
Regitrii de segment nu pot aprea ca operanzi;
cel puin un operand trebuie sa fie un registru general.
Sunt trei variante:
XCHG reg,reg
XCHG reg,mem
XCHG mem,reg
Exemple:
xchg
al, ah
xchg
alfa, ax
xchg
sir [si], bx
xchg eax,ebx ; exchange 32-bit regs
Interschimbarea coninutului a doi operanzi din memorie op1 i op2 se poate face prin secvena de
instruciuni:
mov
reg, op1
xchg
reg, op2

Arhitectura Calculatoarelor

mov

18

op2, reg

Exemplu de program:
.data
val1 WORD 1000h
val2 WORD 2000h
arrayB BYTE 10h,20h,30h,40h,50h
arrayW WORD 100h,200h,300h
arrayD DWORD 10000h,20000h
.code
main PROC
; Demonstrating MOVZX instruction:
mov bx,0A69Bh
movzx eax,bx ; EAX = 0000A69Bh
movzx edx,bl ; EDX = 0000009Bh
movzx cx,bl ; CX = 009Bh
; Demonstrating MOVSX instruction:
mov bx,0A69Bh
movsx eax,bx ; EAX = FFFFA69Bh
movsx edx,bl ; EDX = FFFFFF9Bh
mov bl,7Bh
movsx cx,bl ; CX = 007Bh
; Memory-to-memory exchange:
mov ax,val1 ; AX = 1000h
xchg ax,val2 ; AX=2000h, val2=1000h
mov val1,ax ; val1 = 2000h
; Direct-Offset Addressing (byte array):
mov al,arrayB ; AL = 10h
mov al,[arrayB+1] ; AL = 20h
mov al,[arrayB+2] ; AL = 30h
; Direct-Offset Addressing (word array):
mov ax,arrayW ; AX = 100h
mov ax,[arrayW+2] ; AX = 200h
; Direct-Offset Addressing (doubleword array):
mov eax,arrayD ; EAX = 10000h
mov eax,[arrayD+4] ; EAX = 20000h
mov eax,[arrayD+4] ; EAX = 20000h
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 BYTE '0123456789abcdef''
..........
lea
bx, tabel
mov al,11
xlat
n al se va depune cifra hexazecimala b.
c) Instruciunile IN (Input Data) i OUT (Output Data)

Arhitectura Calculatoarelor

19

Instruciunea IN execut o citire de 8, 16, 32 bii de la portul de intrare. i invers, instruciunea


OUT execut o scriere de 8, 16, 32 bii ntr-un port. Sintaxa este urmatoarea:
IN accumulator,port
OUT port,accumulator

Port poate fi o constant cu plaja 0 - FFh, sau poate fi o valoare ncrcat n registrul DX cu plaja
0 - FFFFh. Ca Accumulator va fi registrul AL pentru transferuri pe 8-bii, AX pentru transferuri pe 16bii i EAX pentru transferuri pe 32-bii.
Exemple:
in al,3Ch
; input byte from port 3Ch
out 3Ch,al
; output byte to port 3Ch
mov dx, portNumber ; DX can contain a port number
in ax,dx
; input word from port named in DX
out dx,ax
; output word to the same port
in eax,dx
; input doubleword from port
out dx,eax
; output doubleword to same port

f) Instruciunea LEA (Load Effective Address)


Are ca efect ncarcrea adresei efective (offsetul) intr-un registru general.
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]

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
Ex.
.data
saveflags BYTE ?
.code
lahf ; load flags into AH
mov saveflags,ah ; save them in a variable
j) Instruciunea SAHF (Store AH into FLAGS)
Instruciunea ncarc n registrul FLAGS (EFLAGS or RFLAGS), n octetul cel mai puin
semnificativ coninutul registrului AH, adic:
FLAGS [AH] 07
Instruciunea nu are operanzi.
Ex.
mov ah,saveflags
sahf
Instruciunea PUSH

; load saved flags into AH


; copy into Flags register

Arhitectura Calculatoarelor

20

Instruciunea PUSH decrementeaz registrul ESP i copie operandul surs n stiv. Un operand pe
16 bii decrementeaz registrul ESP cu 2, iar un operand pe 32 bii cu 4. Sunt 3 formate ale instruciunii:
PUSHreg/mem16
PUSHreg/mem32
PUSHimm32
Instruciunea POP
Instruciunea PUSH copie coninutul stivei n operandul surs pe 16 sau 32 bii i incrementeaz
registrul ESP cu valorile 2 sau 4 respectiv. Sunt 2 formate ale instruciunii:
POPreg/mem16
POPreg/mem32
Instruciunile PUSHFD i POPFD
Instruciunea PUSHFD copie coninutul registrului EFLAGS pe 32 bii n stiv, iar POPFD
extrage din stiv valoarea pe 32 bii i ncarc registrul de fanioane EFLAGS.
pushfd
popfd
Instruciunile PUSHAD, PUSHA, POPAD i POPA
Instruciunea PUSHAD copie coninutul regitrilor de uz general n stiv n ordinea urmtoare:
EAX, ECX, EDX, EBX, ESP (valorile naintea execuiei PUSHAD), EBP, ESI i EDI. Iar
inctruciunea POPAD extrage din stiv i ncarc regitrii de uz general n ordinea invers.
Respectiv instruciunea PUSHA copie coninutul regitrilor de uz general pe 16 bii n stiv n
ordinea urmtoare: AX, CX, DX, BX, SP, BP, SI, DI. Iar inctruciunea POPA extrage din stiv i ncarc
regitrii de uz general pe 16 bii, n ordinea invers.
2.7.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.
Operanzii au aceeai structur ca la instruciunea MOV. Cei doi operanzi nu pot fi simultan locaii de
memorie.
Operaia se poate efectua pe 8,16, 32 sau pe 64 bii. Cei doi operanzi trebuie sa aib aceeai dimensiune
(acelai tip). n caz de ambiguitate se va folosi operatorul PTR.
Indicatorii afectai sunt: AF, CF, PF, SF, ZF i OF
Exemple:
add
add
add
add
add
add
add
add
.data

ax, 5
bl, 5
ax, bx
word ptr [bx], 75
alfa, ax
alfa, 5
byte ptr [si], 75
byte ptr alfa, 75

Arhitectura Calculatoarelor

21

var1 DWORD 10000h


var2 DWORD 20000h
.code
mov eax,var1 ; EAX = 10000h
add eax,var2 ; EAX = 30000h
.data
sum qword 0
.code
mov rax,5
add
rax,6
mov sum,rax

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 s se in seama.
Exemplu 1. S se adune doua numere op1, op2 pe 2 cuvinte (dword).
op1 dword 12345678h
op2 dword 0abcdefgh
rez
dword ?
...................................
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
Exemplu 2. Adunm 2 numere ntregi pe 32 bii (FFFFFFFFh + FFFFFFFFh), producnd un rezultat pe
64-bii, suma va fi in EDX:EAX, care este 00000001FFFFFFFEh:
mov edx,0
mov eax,0FFFFFFFFh
add eax,0FFFFFFFFh
adc edx,0
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. Structura operanzilor ca la instruciunea MOV.
.data
var1DWORD30000h
var2DWORD10000h
.code

Arhitectura Calculatoarelor

22

moveax,var1;EAX=30000h
subeax,var2;EAX=20000h
d) Instruciunea SBB (Substrat with Borrow)
Forma general:
SBB dest, sursa ; [dest] [dest] [sursa] [CF]
unde semnificaia dest, sursa i CF sunt cele prezentate la ADC. Instruciunea SBB ia n considerare
eventualul mprumut. Exemplu:
Op1 dword 12345678h
Op2 dword 0abcdef78h
Rez dword ?
.............
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
Alt exemplu. Scderea dintr-un ntreg de 64 bii un untreg de 32 bii. Perechea de regitri EDX:EAX se
ncarc cu valoarea 0000000700000001h i scdem 2. La prima etap se va scdea din partea inferioar
(EAX-00000001h), adic din 1 vom scdea 2, ce va duce la mprumut cu setarea indicatorului Carry.
movedx,7;parteasuperioar?
moveax,1;parteainderioar?
subeax,2;sc?derea2
sbbedx,0;sc?dereap?r?iisuperioare

e) Instruciunea INC (Increment)


Forma general:
INC dest ; [dest] [dest] + 1
unde dest este un registru general, un operand din memorie. Semnificaia fiind operandul dest este
incrementat cu unu. Indicatorii afectai sunt AF, PF, SF, ZF, OF.
Exemple:
inc
alfa
inc
bl
inc
eax
inc
rbx
inc
word ptr [bx] [si]
f) Instruciunea DEC (decrement)

Arhitectura Calculatoarelor

23

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, 16, 32 sau 64 bii ce poate fi un registru general sau o locaie de memorie.
Instruciunea afecteaz indicatorii AF, CF, PF, SF, OF i ZF.
Exemplu:
alfa byte 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.
Cnd comparm doi operanzi fr semn indicatoarele Zero i Carry indic urmtoarea relaie ntre
operanzi:

Exemple:
cmp
cmp

ax, alfa[bx][si]
[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
sbyte -75

Arhitectura Calculatoarelor

24

b
sword -188
c
sword ?
.........
mov al, a
cbw ;
convertete octetul la cuvnt
add
ax, b
mov c, ax
..........
j) Instruciunea CWD (Convert Word to Double Word)
Are ca efect extinderea bitului de semn din AX [AX 15] la ntreg registrul DX, obinndu-se astfel DX:AX
pe 32 de bii, adic:
daca semnul [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 (dw) i unul reprezentat pe cuvnt
(sw)
dw
dword 12345678h
sw
word 0abcdh
rez
dword ?
................
mov ax, so
cwd
; 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
Instruciunea CDQ (convert doubleword to quadword)
Are ca efect extinderea bitului de semn din EAX [EAX31] la ntreg registrul EDX, obinndu-se astfel o
valoare de 64 de bii in perechea de regitri EDX:EAX, adic:
daca semnul [EAX31] = 0 atunci [EDX] 00000000h,
altfel [edx] 0ffffffffh.
Instruciunea nu are operanzi i nu afecteaz indicatorii de condiie.
k) Instruciunea MUL (Multiply)
Forma general:
MULreg/mem8
MULreg/mem16
MULreg/mem32
MULreg/mem64
unde reg poate fi un registru sau o locaie de memorie mem de 8, 16, 32, 64 bii. Rezultatul se obine pe
un numr dublu de bii (16, 32, 64, 128). Operaia realizat este produsul intre acumulator i sursa cu
depunerea rezultatului n acumulatorul extins. Cei doi operanzi se consider numere fr semn.
Dac sursa este pe octet avem:
[AX] [AL] * [reg/mem8]
moval,5h
movbl,10h

Arhitectura Calculatoarelor

25

mulbl;AX=0050h,CF=0
Diagrama ilustreaz interaciunea dintre regitri:

Dac sursa este pe cuvnt avem:


[DX:AX] [AX] * [reg/mem16]
.data
val1WORD2000h
val2WORD0100h
.code
movax,val1;AX=2000h
mulval2;DX:AX=00200000h,CF=1
Diagrama ilustreaz interaciunea dintre regitri:

Dac sursa este pe 32 bii avem:


[EDX:EAX] [EAX] * [reg/mem32]
moveax,12345h
movebx,1000h
mulebx;EDX:EAX=0000000012345000h,CF=0
Diagrama ilustreaz interaciunea dintre regitri:

iar dac sursa este pe 64 bii avem:


[RDX:RAX] [RAX] * [reg/mem64]
movrax,0FFFF0000FFFF0000h
movrbx,2
mulrbx;RDX:RAX=0000000000000001FFFE0001FFFE0000
Afecteaz indicatorii CF i OF, ceilali sunt nedefinii.
l) Instruciunea IMUL (Integer Multiply)
Instruciunea IMUL semnific nmulirea cu semn. Instruciunea poate avea 1, 2, sau 3operanzi. Afecteaz
indicatorii CF i OF, restul sunt nedefinii.
Structura cu un operand:
IMULreg/mem8 ;AX=AL*reg/mem8
IMULreg/mem16 ;DX:AX=AX*reg/mem16
IMULreg/mem32 ;EDX:EAX=EAX*reg/mem32
Structura cu doi operanzi. Structura cu doi operanzi trunchiaz produsul la limea registrului de

Arhitectura Calculatoarelor

26

destinaie. Dac cifrele semnificative sunt pierdute, se seteaz indicatorii CF i OF.


IMULreg16,reg/mem16
IMULreg16,imm8
IMULreg16,imm16
IMULreg32,reg/mem32
IMULreg32,imm8
IMULreg32,imm32

Structura cu 3 operanzi - op1=op2*op3 (trunchiaz produsul):


IMULreg16,reg/mem16,imm8
IMULreg16,reg/mem16,imm16
IMULreg32,reg/mem32,imm8
IMULreg32,reg/mem32,imm32
Exemplu cu 2 operanzi:
.data
word1SWORD4
dword1SDWORD4
.code
movax,16
;AX=16
movbx,2
;BX=2
imulbx,ax
;BX=32
imulbx,2
;BX=64
imulbx,word1;BX=256
moveax,16
;EAX=16
movebx,2
;EBX=2
imulebx,eax;EBX=32
imulebx,2
;EBX=64
imulebx,dword1;EBX=256
Exemplu cu 3 operanzi:
.data
word1SWORD4
dword1SDWORD4
.code
imulbx,word1,16
;BX=word1*16
imulebx,dword1,16
;EBX=dword1*16
imulebx,dword1,2000000000;signedoverflow!

m) Intructiunea DIV (Divide)


Forma general:
DIV sursa
unde sursa este un registru sau o locaie de memorie, reprezentata pe octet, cuvnt, 32 bii sau 64 bii.
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]

Arhitectura Calculatoarelor

27

movax,0083h
;demp?r?itul
movbl,2
;mp?r?itorul
divbl
;AL=41hcatul,AH=01hrestul

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]
movdx,0;cleardempartitul,high
movax,8003h;dempartitul,low
movcx,100h;mpartitorul
divcx;AX=0080hctul,DX=0003hrestul

Daca mpritorul (sursa) este reprezentat pe 32 bii atunci dempritul este considerat n EDX i EAX
(64 bii), ctul se obine n EAX iar restul n EDX
.data
dividendQWORD0000000800300020h
divisorDWORD00000100h
.code
movedx,DWORDPTRdividend+4;highdoubleword
moveax,DWORDPTRdividend;lowdoubleword
divdivisor;EAX=08003000h,EDX=00000020h

Daca mpritorul (sursa) este reprezentat pe 64 bii atunci dempritul este considerat n RDX i RAX
(64 bii), ctul se obine n RAX iar restul n RDX
.data
dividend_hiQWORD0000000000000108h
dividend_loQWORD0000000033300020h
divisorQWORD0000000000010000h
.code
movrdx,dividend_hi
movrax,dividend_lo
divdivisor
;RAX=0108000000003330
;RDX=0000000000000020

Toi indicatorii nu sunt definii. Operaia de mprire poate conduce la depiri, dac ctul dep e te
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 o singur

Arhitectura Calculatoarelor

28

diferen important dempritul cu semn trebuie s fie extins nainte ca mprirea s fie executat.
Extinderea semnului se execut cu instruciunile CBW, CWD, CDQ.
Indicatorii sunt nedefinii. Operaia poate conduce la depsiri.
Ex. mprim -48 la +5
.data
byteValSBYTE48;D0hexadecimal
.code
moval,byteVal;parteainferioar?ademp?r?itului
cbw
;extindemALinAH
movbl,+5
;mp?r?itorul
idivbl
;AL=9ctul,AH=3restul

2.7.3 Aritmetica BCD


2.3.1 Instruciunea AAA (ASCII Adjust for Addition)
Instruciunea nu are operanzi i execut corecia acumulatorului AX, dup operaii de adunare cu numere
n format BCD despachetat. 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
AAA
; [ax]=0707h
2.3.2 Instruciunea AAS (ASCII Adjust for Subtraction)
Instruciunea nu are operanzi i execut corecia acumulatorului AX, dup operaii de scdere cu numere
in format BCD despachetat. 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
2.3.3 Instruciunea DAS (Decimal Adjust for Substraction)
Instruciunea nu are operanzi i execut 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
}

Arhitectura Calculatoarelor

29

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.
2.3.5 Instruciunea AAM (ASCII Adjunct for Multiply)
Instruciunea nu are operanzi i efectueaz o corecie a acumulatorului AX, dup o nmul ire pe 8
bii cu operanzi n format BCD despachetat.
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
2.3.6 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 despachetat.
Semnificaia este urmtoarea:
[AL] [AH] * 10 + [AL]
[AH] 0
Indicatori afectai: PF, SF, ZF, restul nedefinite.
De exemplu
mov ax, 305h
mov bl, 2
AAD
; [ax]=35h
div bl ; [al]=12h [ah]=1
2.7.4 Exemple programe
Exemplul 1. Acest exemplu prezint cteva tehnici de adresare specifice procesoarelor din familia
x86:
INCLUDE Irvine32.inc
.data
alfa WORD 3 DUP(?)
.code
main proc
mov ax,17 ; Adresare imediata a operandului
; sursa care este o constant zecimala
mov ax,10101b ; Sursa este o constant binara
mov ax,11b
;
mov ax,0bch
; Sursa este o constant hexa

Arhitectura Calculatoarelor

30

mov
mov
mov
mov
xchg
mov
mov

alfa,ax
; Adresare directa a operandului destinatie
cx,ax
; Interschimba registrii ax si bx
ax,bx
; Folosind registrul cx
ax,cx
;
ax,bx
; Interschimba direct cei 2 regitri.
si,2
alfa[si],ax ; Adresare relativa cu registrul
; i a operandului destinaie
mov esi,2
mov ebx,offset alfa ; Adresare imediat a operandului
; surs (adresa variabilei alfa)
; datorit operatorului OFFSET
lea ebx,alfa
; Acelasi efect
mov ecx,[ebx][esi]
; Adresare bazata indexata a sursei
mov cx,alfa[2]
; Acelasi efect.
mov cx,[alfa+2]
; Acelasi efect
mov di,4
mov byte ptr [ebx][edi],55h ; Se va folosi aceast
; variant cnd se dorete o
; adresare la nivel de octet
mov esi,2
mov ebx,3
mov alfa[ebx][esi],33h ; Adresare bazata indexata
; relativa a operandului destinaie
mov alfa[ebx+esi],33h ; Notatii echivalente
mov [alfa+ebx+esi],33h
mov [ebx][esi]+alfa,33h
exit
main ENDP
END main
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. S se calculeze expresia aritmetic: e=((a+b*c-d)/f+g*h)/i. Se consider
a, d, f
cuvant, iar b, c, g, h, i byte. Ca s putem executa mprirea cu f convertim mpritorul la dublucuvnt.
Ne vor interesa doar cturile mpririlor, rezultatul va fi de tip octet.
INCLUDE Irvine32.inc
.data
a dw 5
b db 6
cd db 10
d dw 5
f dw 6
g db 10
h db 11
i db 10
interm dw ?
rez db ?
.code
main proc
mov eax,0
mov al, b

Arhitectura Calculatoarelor

31

imul cd
; in ax avem b*c
add ax, a
; ax=b*c+a
sub ax, d
; ax=b*c+a-d
cwd
; am convertit cuvantul din ax, in dublu cuvantul , retinut in dx:ax
idiv f
; obtinem ctul n ax si restul n dx ax=(a+b*c-d)/f
mov interm, ax
; interm=(a+b*c-d)/f
mov al, g
imul h
; ax=g*h
add ax, interm
; ax=(a+b*c-d)/f+g*h
idiv i
; se obtine catul n al si restul n ah
mov rez, al
exit
main ENDP
END main
Fiierul Irvine32.inc este o bibliotec de proceduri ce apeleaz funcii Win32 API, conceput
pentru a oferi o interfa simpl pentru intrri-ieiri de date la consol. (API - Application Programming
Interface, un set de funcii oferite de sistemul de operare Windows pentru manipularea resurselor
calculatorului i sunt implementate n urmtoarele trei biblioteci: user32.dll, kernel32.dll i gdi32.dll).
Fereastra consolei (sau fereastra linie de comand, cmd.exe) este o fereastr textual, creat de
MS-Windows, pentru afiarea liniei de comand. Vom descrie unele funcii utilizate pentru a introduce
date de la tastatur i afiarea datelor de ieire. Aceste proceduri se apeleaz cu instruciunea call, de
exemplu call Clrscr.
Procedurile apelate utilizeaz diferite echivalri.
2.7.5 Echivalri i operatori
Echivalrile reprezint nite valori constante de tip constant numeric sau ir de caractere atribuite
unor nume simbolice, simbolurile putnd fi nlocuite n locul valorilor respective.
a) Echivalrile numerice sunt folosite pentru a atribui o constanta numerica unui simbol. Acestea pot fi:
- redefinibile: valoarea unui simbol poate fi redefinit n orice moment n timpul asamblrii;
Sintaxa unei echivalri numerice redefinite este:
nume = expresie
unde: - expresie poate fi un ntreg, o expresie constant, o constant de tip ir de caractere sau dou constante
sau o expresie evaluat la o adres, nume este un nume de simbol unic sau un nume de simbol definit
anterior cu =.
- neredefinibile: valoarea simbolului nu poate fi redefinita n timpul asamblrii.
Sintaxa unei echivalri numerice neredefinibile este:
nume EQU expresie
Parametrii avnd semnificaiile: nume este un nume de simbol unic.
Simbolurile definite prin echivalri numerice pot fi folosite n construcii ulterioare ca operanzi imediai.
Acestor simboluri nu li se aloc memorie.
Operatorii admii in cazul folosiri expresiilor constante sunt operatori aritmetici: +, -, *, /(mprire
ntreag) i mod.
OFFSET. Operatorul OFFSET returneaz distana unei variabile n octei, de la nceputul
segmentului. De exemplu variabila myByte n segmentul de date va arta n felul urmtor:

PTR. Operatorul PTR este utilizat la accesarea unui operand, dimensiunea crui este diferit de cea
necesar. Exemple de utilizare.

Arhitectura Calculatoarelor

32

.data
myDoubleDWORD12345678h
.code
movax,WORDPTRmyDouble;5678h
movax,WORDPTR[myDouble+2];1234h
movbl,BYTEPTRmyDouble;78h
.data
wordListWORD5678h,1234h
.code
moveax,DWORDPTRwordList;EAX=12345678h
TYPE. Operatorul TYPE ntoarce un numr ce reprezint tipul unei expresii n octei.
LENGTHOF. Operatorul LENGTHOF ntoarce numrul de elemente a unui ir, tablou de date.
SIZEOF. Operatorul SIZEOF ntoarce numrul total de octei alocai pentru un tablou sau variabil
definita cu DUP.
Exemple.
.DATA
intgr =
14*3
;=42
intgr =
intgr/4
;10
intgr =
intgr+4
;14
intgr =
intgr-3
;11
m1 EQU
5
m2 EQU
-5
const EQU
m1+m2
;const=0
vect DW
60 DUP(?)
s_vect EQU
SIZEOF vect ;60 * 2 = 120
l_vect EQU
LENGTHOF vect ;60
t_vect EQU
TYPE vect ;2
verif EQU
t_vect*l_vect ;=2*60
mov ax, SIZEOF vect
n general echivalrile sunt pstrate n fiiere separate de includere, fiind incluse ntr-un program prin
intermediul directivei INCLUDE.
2.7.6 Procedurile utilizate
Procedura
Clrscr
Crlf
Delay
DumpMem
DumpRegs
Gotoxy
Randomize
Random32
RandomRange
ReadChar
ReadDec
ReadHex

Descrierea
terge fereastra consolei i poziioneaz cursorul n colul stnga sus.
Sunt coduri ASCII ce indic sfritul liniei, din rnd nou
ntrerupe execuia programului pentru un interval specificat de milisecunde
Procedura afieaz un tablou de date (array) n hexazecimal
Afieaz coninutul regitrilor EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP,
EFLAGS, i registrul EIP n hexazecimal
Plaseaz cursorul pe un rnd i coloan n fereastra de consol
Seteaz (iniializeaz) generatorul de numere aleatoare
Procedura genereaz i returneaz un numr ntreg aleator pe 32 de bii n
EAX.
Genereaz un ntreg aleator ntr-un interval specificat.
Ateapt un singur caracter introdus de la tastatur i returneaz caracterul
n AL
Citete de la tastatur un ntreg zecimal fr semn pe 32 de bii, finalizarea
introducerii - tasta Enter
Citete de la tastatur un ntreg hexazecimal pe 32 de bii, finalizarea
introducerii - tasta Enter

Arhitectura Calculatoarelor

ReadInt
ReadString
SetTextColor
WaitMsg
WriteBin
WriteBinB
WriteChar
WriteDec
WriteHex
WriteHexB
WriteInt
WriteString
WriteWindowsMs
g

33

Citete de la tastatur un ntreg zecimal cu semn pe 32 de bii, finalizarea


introducerii - tasta Enter
Citete de la tastatur un ir de caractere, finalizarea introducerii - tasta
Enter
Seteaz culorile textului i de fundal a consolei.
Afieaz un mesaj i ateapt un clic pe o tast
Afieaz un ntreg fr semn pe 32 de bii n format binar ASCII
Afieaz un ntreg n format binar pe un octet, cuvnt, sau 32 de bii
Afieaz un singur caracter
Afieaz un ntreg fr semn pe 32 de bii n format zecimal
Afieaz un ntreg pe 32 de bii n format hexazecimal
Afieaz un ntreg de un byte, word, sau doubleword n format hexazecimal
Afieaz un ntreg cu semn pe 32 de bii n format zecimal
Afieaz un ir, finalizat cu un octet nul
Afieaz un ir care conine cele mai recente erori generate de MSWindows

Descrierea detaliat
Delay. nainte de a apela Delay, setai registrul EAX cu intervalul dorit n milisecunde. Exemplu:
moveax,1000;1second
callDelay
DumpMem. nainte de apelare, n ESI - ncrcai deplasamentul tabloului, n ECX - numrul de
locaii de memorie, iar n EBX tipul locaiei de memorie (1 = byte, 2 = word, 4 = doubleword). n
exemplul urmtor se afieaz un tablou din 11 cuvinte duble (doubleword) n hexazecimal:
.data
arrayDWORD1,2,3,4,5,6,7,8,9,0Ah,0Bh
.code
mainPROC
movesi,OFFSETarray;startingOFFSET
movecx,LENGTHOFarray;numrul de locaii de memorie
movebx,TYPEarray;tipul locaiei de memorie - doubleword
callDumpMem
La ieire se va afia:
000000010000000200000003000000040000000500000006
0000000700000008000000090000000A0000000B
DumpRegs. Afieaz coninutul regitrilor EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EFLAGS, i
registrul EIP n hexazecimal. Se afieaz, de asemenea, valorile fanioanelor (indicatoarelor) Carry, Sign,
Zero, Overflow, Auxiliary Carry, i Parity.
callDumpRegs
La ieire se va afia:
EAX=00000613EBX=00000000ECX=000000FFEDX=00000000
ESI=00000000EDI=00000100EBP=0000091EESP=000000F6
EIP=00401026EFL=00000286CF=0SF=1ZF=0OF=0AF=0PF=1
Gotoxy. Plaseaz cursorul pe un rnd i coloan n fereastra de consol. n mod implicit, valorile
coordonatei X este de la 0-79 i Y- de la 0 la 24. Cnd apelai Gotoxy, ncrcai coordonatele Y (rnd) n
DH i coordonatele X (coloana) n DL. Exemplu:
movdh,10;randul10
movdl,20;coloana20
callGotoxy;pozitiacursorului

Arhitectura Calculatoarelor

34

Randomize. Aceast procedur stabilete valoarea iniial a unui generator de numere aleatorii pentru
formulele care sunt utilizate n procedurile Random32 i RandomRange. Cnd apela i procedura
Randomize ca valoare iniial a generatorului se folosete timpul curent, rotunjit la 1/100 sec. Acest lucru
asigur c la fiecare pornire, valoarea iniial a generatorului va fi diferit i, prin urmare, secven a de
numere aleatoare generate vor fi, de asemenea, diferite.
Este suficient ca procedura s fie rulat o singur dat, la nceputul programului.
Ex. S generm un ir din 10 numere.
Call Randomize
mov ,10
l1: Call Random32
;Aici in registrul se afla un numar aleator
; El poate fi salvat intr-o variabila (masiv),
;sau afisat pe ecran
l l1

Random32. Procedura Random32 genereaz i returneaz un ntreg aleator pe 32 de bii n EAX. Cnd
Procedura este solicitat n mod repetat, Random32 genereaz o secven aleatoare de valori.
.data
randValDWORD?
.code
callRandom32
movrandVal,eax
RandomRange. Procedura RandomRange produce un numr ntreg aleator n intervalul de la 0 la n-1,
unde n este un parametru de intrare ncrcat n registrul EAX. Numrul generat aleator este ntors n
EAX. Urmtorul exemplu genereaz un numr ntreg aleator ntre 0 i 4999 i se salveaz ntr-o variabil
numit randVal.
.data
randValDWORD?
.code
moveax,5000
callRandomRange
movrandVal,eax
ReadChar. Procedura ReadChar ateapt un singur caracter introdus de la tastatur i l ncarc n
registrul AL. Caracterul este introdus fr ecou (fr afiare).
.data
charBYTE?
.code
callReadChar
movchar,al
Dac executai clic pe o tast funcional (F1 ), sgeat ( ), Ins, sau Del, procedura ncarc
registrul AL cu zero, i n AH se va introduce scan -codul tastei.
ReadDec. Procedura ReadDec citete un ntreg zecimal de 32-bii fr semn de la tastatur i ncarc
valoarea n EAX. Spatiile sunt ignorate. Se introduc numai valori zecimale. De exemplu, dac utilizatorul
introduce 123ABC, valoarea returnat n EAX este 123.
.data
intValDWORD?
.code
callReadDec
movintVal,eax

Arhitectura Calculatoarelor

35

ReadHex. Procedura ReadHex citete un ntreg hexazecimal de 32 de bii de la tastatura si ncarc


valoarea binar corespunztoare n EAX. Nu indic eroare la introducerea valorilor nevalide. Putei utiliza
att litere mari i mici pentru caracterele de la A la F. Un numr maxim de opt cifre pot fi introduse
(caracterele suplimentare sunt ignorate). Spaiile sunt ignorate.
.data
hexValDWORD?
.code
callReadHex
movhexVal,eax
ReadInt. Procedura ReadInt citete un ntreg de 32-bii, cu semn, de la tastatur i ncarc valoarea n
EAX. Utilizatorul poate introduce, opional, semnul plus sau minus, i restul numrului poate consta doar
din cifre. ReadInt seteaz n 1 flag-ul Overflow i va afia un mesaj de eroare n cazul n care valoarea
introdus nu intr n plaja numerelor cu semn de 32-bii (plaja: -2,147,483,648 +2,147,483,647 ).
Se introduc numai valori zecimale. De exemplu, n cazul n care utilizatorul introduce 123ABC, valoarea
introdus va fi 123.
.data
intValSDWORD?
.code
callReadInt
movintVal,eax
ReadString. Procedura ReadString citete un ir de caractere de la tastatur, clic Enter finalizarea
introducerii. nainte de invocarea procedurii, este necesar s ncarcm EDX cu offset-ul buffer-ului unde
va fi stocat irul i ECX cu numrul maxim de caractere care va fi introdus, plus 1 (pentru byte-ul nul de
finalizare). Procedura returneaz numrul de caractere introduse de utilizator n EAX.
.data
bufferBYTE21DUP(0);inputbuffer
byteCountDWORD?;holdscounter
.code
movedx,OFFSETbuffer;pointtothebuffer
movecx,SIZEOFbuffer;specifymaxcharacters
callReadString;inputthestring
movbyteCount,eax;numberofcharacters
ReadString introduce automat byte-ul nul n memorie, la sfritul irului. Dup ce utilizatorul a introdus
irul "ABCDEFG" n variabila buffer va fi:
Coninutul variabilei byteCountva fi egal cu 7.
SetTextColor. Procedura SetTextColor seteaz culorile textului i de fundal a consolei. La invocarea
procedurii culorile textului i de fundal este necesar s fie ncrcate n registrul EAX. Constantele
culorilor predefinite sunt urmtoarele:

Constantele sunt predefinite n irvine32.inc. Urmtoarele constante indic culoarea galben a caracterului

Arhitectura Calculatoarelor

36

pe fundal albastru:
yellow_ (blue*16)
Urmtoarea secven seteaz: caracter alb pe fundal albastru:
moveax,white_ (blue*16);whiteonblue
callSetTextColor
WaitMsg. Procedura WaitMsg afieaz mesajul Press any key to continue. . . i ateapt ca utilizatorul
s execute clic pe o tast. Procedura n-are parametri de intrare. Apelul este urmtorul:
callWaitMsg
WriteBin. Procedura WriteBin afieaz un ntreg fr semn pe 32 de bii n format binar ASCII. ntregul
este necesar s fie ncrcat n EAX. Biii sunt afiai n grupe de cte 4 bii.
moveax,12346AF9h
callWriteBin
n urma invocrii se va afia:
00010010001101000110101011111001
WriteBinB. Procedura WriteBinB afieaz un ntreg n format binar pe un octet, cuvnt, sau 32 de bii.
ncrcai n EAX ntregul i n EBX indicai valoarea de afiat n octei (1, 2, sau 4). Biii sunt afiai n
grupe de cte 4 bii.
moveax,00001234h
movebx,TYPEWORD;2octetiinferiori
callWriteBinB;displays0001001000110100
WriteChar. Procedura WriteChar afieaz un singur caracter. ncrcai caracterul de afiat (sau codul
ASCII al caracterului) n registrul AL.
moval,'A'
callWriteChar;displays:"A"
WriteDec. Procedura WriteDec afieaz un ntreg fr semn pe 32 de bii n format zecimal. ncrcai
ntregul n EAX.
moveax,295
callWriteDec;displays:"295"
WriteHex. Procedura WriteHex afieaz un ntreg pe 32 de bii n format hexazecimal. Introducei
zerouri, dac este necesar. ncrcai ntregul n EAX.
moveax,7FFFh
callWriteHex;displays:"00007FFF"
WriteHexB. Procedura WriteHexB afieaz un ntreg de un byte, word, sau doubleword n format
hexazecimal. ncrcai n EAX ntregul i n EBX indicai valoarea de afiat n octei (1, 2, sau 4).
moveax,7FFFh
movebx,TYPEWORD;2bytes
callWriteHexB;displays:"7FFF"
WriteInt. Procedura WriteInt afieaz un ntreg cu semn pe 32 de bii n format zecimal. Este necesar s
introdicei semnul. ncrcai ntregul n EAX.
moveax,216543
callWriteInt;displays:"+216543"

Arhitectura Calculatoarelor

37

WriteString. Procedura WriteString afieaz un ir, finalizat cu un octet nul. ncrcai offset-ul irului n
registrul EDX.
.data
promptBYTE"Enteryourname:",0
.code
movedx,OFFSETprompt
callWriteString
WriteWindowsMsg. Procedura WriteWindowsMsg afieaz un ir care conine cele mai recente erori
generate de MS-Windows, la invocarea funciilor de sistem.
callWriteWindowsMsg
Un exemplu de mesaj:
Error2:Thesystemcannotfindthefilespecified.
2.7.7 Instruciuni de salt i ciclare
a)Instruciunea de salt necondiionat JMP
Forma generala :
JMP operand
unde, operand este adresa de salt necondiionat. Exist urmtoarele tipuri de instruciuni JMP:
de tip SHORT - cnd operandul specifica o adres n domeniul -128 +127 fa de (IP)
actualizat
de tip NEAR - operandul specific o adres din acelai segment de cod;
de tip FAR - operandul specific o adres 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 dou litere (vezi tabelul de mai jos);
- operand este un offset cuprins ntre -128 si 128.
Dac condiia este ndeplinit are loc saltul la adresa dat de operand, dac nu - se continu n
secven.
Se observ c exist 2 categorii de instruciuni pentru mai mic si mai mare, cele care conin
cuvintele above sau bellow i cele care conin cuvintele less sau greater. Primele se folosesc n
situaia comparrii a dou valori fr semn, iar ultimele n situaia comparrii a dou 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 i 2.
Se observ c (AX) > (BX) dac cele dou valori se consider reprezentate fr semn i c (AX) < (BX)
dac cele dou valori se consider cu semn. (-2 este mai mic decat 2). Ca atare n primul caz saltul la
eticheta alfa are loc, pe cand n cel de-al doilea caz nu are loc.

Arhitectura Calculatoarelor

38

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
Less, Not Greater or Equal
SF OF
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) Instruciunea JCXZ (JUMP if CX is Zero)
Instruciunea realizeaz salt la eticheta specificat dac coninutul registrului CX este zero. Forma
generala:
JCXZ eticheta
JECXZ eticheta
JRCXZ eticheta
unde eticheta este o eticheta aflata in domeniul -128 si 127 fata de (IP).
Exemple:
movedx,0A523h
cmpedx,0A523h
jneL5;jumpnottaken
jeL1;jumpistaken
movbx,1234h
subbx,1234h
jneL5;jumpnottaken
jeL1;jumpistaken
movcx,0FFFFh
inccx
jcxzL2;jumpistaken
xorecx,ecx
jecxzL2;jumpistaken
Exemple, comparri cu semn:
movedx,1
cmpedx,0
jnlL5;jumpnottaken(1>=0isfalse)
jnleL5;jumpnottaken(1>0isfalse)

Arhitectura Calculatoarelor

39

jlL1;jumpistaken(1<0istrue)
movbx,+32
cmpbx,35
jngL5;jumpnottaken(+32<=35isfalse)
jngeL5;jumpnottaken(+32<35isfalse)
jgeL1;jumpistaken(+32>=35istrue)
movecx,0
cmpecx,0
jgL5;jumpnottaken(0>0isfalse)
jnlL1;jumpistaken(0>=0istrue)
movecx,0
cmpecx,0
jlL5;jumpnottaken(0<0isfalse)
jngL1;jumpistaken(0<=0istrue)
Exemplu, salt la etichet dac toi biii (2, 3 i 7) sunt setai n 1:
moval,status
andal,10001100b;maskbits2,3,7
cmpal,10001100b;allbitsset?
jeResetMachine;yes:jumptolabel
d) Instruciunea LOOP
Forma general:
LOOP eticheta
Are ca efect:
ecx ecx -1
dac ecx = 0 atunci
[IP] [IP] + D8
adic se decrementeaz ECX (CX i RCX n modurile pe16 i 64 bii respectiv) i dac acesta este diferit
de zero se sare la eticheta specificat, n caz contrar se continu cu instruciunea urmtoare. D8 este un
deplasament pe 8 bii i reprezint diferena ntre offset-ul instruciunii urmtoare instruciunii LOOP i
offset-ul etichetei. Se utilizeaz i notaiile:
instruciunea LOOPD utilizeaz registrul ECX ca registru contor;
instruciunea LOOPW utilizeaz registrul CX ca registru contor.
Ex: Suma celor n octei de la adresa sir.
.data
sir byte 7, 9, 15, 25, -18, 33, 11
n equ LENGTHOF sir
suma byte ?
.code
xor eax, eax
mov ecx, n
xor esi, esi
repeta:
add al, sir[esi]
inc esi

Arhitectura Calculatoarelor

40

LOOP repeta
mov suma, al
e) Instruciunea LOOPZ/LOOPE (LOOP While Zero/Equal)
Forma generala:
LOOPZ eticheta
sau
LOOPE eticheta
Semnificaia:
cx cx - 1
daca cx > 0 si ZF = 1 atunci
[IP] [IP] + D8
Se decrementeaz cx (ECX, RCX) i dac acesta este diferit de zero i indicatorul ZF este 1 (rezultatul
ultimei operaii aritmetice a fost zero) se sare la eticheta specificat.
f) Instruciunea LOOPNZ/LOOPNE (Loop While Not Zero/Not Equal)
Forma generala:
LOOPNZ eticheta
sau
LOOPNE eticheta
Semnificaia:
cx cx - 1
daca cx > 0 i ZF = 0 atunci
[IP] [IP] + D8
Efectul este c se cicleaz ct timp rezultatul ultimei operaii aritmetice este diferit de zero, dar nu de mai
multe ori ct este coninutul iniial a lui CX (ECX, RCX).
2.7.8 Instruciuni de deplasare (SHL, SAL, SHR, SAR) si de rotaie (ROL, RCL, ROR, RCR).
Acest grup de instruciuni realizeaz operaii de deplasare i de rotaie la nivel de bit.
Instruciunile au doi operanzi: primul este operandul propriu-zis, iar al doilea este numrul de bi i cu care
se deplaseaz sau se rotete primul operand. Ambele operaii se pot face la dreapta sau la stnga.
Deplasarea nseamn transferul tuturor biilor din operand la stnga/dreapta, cu completarea unei valori
fixe n dreapta/stnga i cu pierderea biilor din stnga/dreapta. Deplasarea cu un bit la stnga este
echivalenta cu nmulirea operandului cu 2, iar deplasarea la dreapta, cu mprirea operandului la 2.
Rotaie nseamn transferul tuturor biilor din operand la stnga/dreapta, cu completarea n
dreapta/stnga cu biii care se pierd n partea opus.
Ambele operaii se fac cu modificarea bistabilului CF, care particip la operaiile de rotaie.
Forma generala a instruciunilor este:
OPERATIE operand, contor
n care operand este un registru sau o locaie de memorie de 8 sau 16 bii, iar contor (numrul de bii) este
fie o constant , fie registrul CL, care conine numrul de bii cu care se deplaseaz/rotete operandul.
La operaiile de deplasare , se modific toate flag-urile conform rezultatului, n afar de AF, care
este nedefinit. La operaiile de rotaie, se modific numai CF i OF.
La instruciunile de deplasare, se consider deplasri logice i aritmetice, care se pot utiliza
dup natura operanzilor.
a) Instruciunea SHL/SAL (Shift Logic/Arithmetic Left)
Are forma general:
SHL/SAL operand, contor

Dei exist dou mnemonice (SHL i SAL), n fapt este vorba de o unic instruc iune. Bitul cel

Arhitectura Calculatoarelor

41

mai semnificativ al operandului trece n CF, dup care toi biii se deplaseaz la stnga cu o pozi ie.
Operaia se repet de attea ori de ct este valoarea lui contor (0-255 sau coninutul registrului CL).
Dac deplasm valoarea binar 11001111 n stnga cu un bit, dup deplasare va deveni 10011110.

Structura instruciunii (similar i SHR, SAL, SAR, ROR, ROL, RCR, RCL) este urmtoarea:
SHLreg,imm8
SHLmem,imm8
SHLreg,CL
SHLmem,CL
Exemple:
movbl,8Fh;BL=10001111b
shlbl,1;CF=1,BL=00011110b
moval,10000000b
shlal,2;CF=0,AL=00000000b
movdl,10;before:00001010
shldl,2;after:00101000
b) Instruciunea SHR (Shift Logic Right)
Are forma general:
SHR
operand, contor

Bitul cel mai puin semnificativ din operand trece in CF, dup care se deplaseaz toi biii cu o
poziie la dreapta (mprire la 2). Faptul c operaia de mprire se execut fr semn nseamn c se
completeaz cu un bit 0 dinspre stnga. Operaia se repet de attea ori ct este valoarea lui contor (0-255
sau coninutul registrului CL).
Exemple:
moval,0D0h;AL=11010000b
shral,1;AL=01101000b,CF=0
moval,00000010b
shral,2;AL=00000000b,CF=1
c) Instruciunea SAR (Shift Arithmetic Right)
Are forma general:
SAR
operand, contor

Bitul de semn rmne nemodificat. Bitul cel mai puin semnificativ din operand trece in CF, dup
care se deplaseaz toi biii cu o poziie la dreapta . Faptul c opera ia de deplasare se execut cu semn
nseamn c se completeaz toi biii eliberai cu bitul de semn. Operaia se repet de attea ori ct este

Arhitectura Calculatoarelor

42

valoarea lui contor (0-255 sau coninutul registrului CL).


Exemple:
moval,0F0h;AL=11110000b(16)
saral,1;AL=11111000b(8),CF=0
movdl,128;DL=10000000b
sardl,3;DL=11110000b
movax,128;EAX=????FF80h
shleax,16;EAX=FF800000h
sareax,16;EAX=FFFFFF80h
d) Instruciunea ROL (Rotate Left)
Are forma general:
ROL
operand, contor

Bitul cel mai semnificativ din operand trece att in CF, ct i n bitul cel mai puin semnificativ
din operand, dup ce toi biii acestuia s-au deplasat la stnga cu o pozi ie. Opera ia se repet de attea ori
ct este valoarea lui contor (0-255 sau coninutul registrului CL).
moval,40h;AL=01000000b
rolal,1;AL=10000000b,CF=0
rolal,1;AL=00000001b,CF=1
rolal,1;AL=00000010b,CF=0
e) Instruciunea ROR (Rotate Right)
Are forma generala:
ROR
operand, contor

Bitul cel mai puin semnificativ din operand trece att n CF, ct i n bitul cel mai semnificativ
din operand, dup ce toi biii acestuia s-au deplasat la dreapta cu o pozi ie. Opera ia se repet de attea
ori ct este valoarea lui contor (0-255 sau coninutul registrului CL).
moval,01h;AL=00000001b
roral,1;AL=10000000b,CF=1
roral,1;AL=01000000b,CF=0
moval,00000100b
roral,3;AL=10000000b,CF=1
f) Instruciunea RCL (Rotate Left through Carry)
Are forma general:
RCL
operand, contor

Arhitectura Calculatoarelor

43

Bitul cel mai semnificativ din operand trece n CF, se deplaseaz toi biii din operand cu o
poziie la stnga, iar CF iniial trece n bitul cel mai puin semnificativ din operand. Operaia se repet de
attea ori ct este valoarea lui contor (0-255 sau coninutul registrului CL).
clc;CF=0
movbl,88h;CF,BL=010001000b
rclbl,1;CF,BL=100010000b
rclbl,1;CF,BL=000100001b

f) Instruciunea RCR (Rotate right through Carry)


Are forma general:
RCR
operand, contor

Bitul cel mai puin semnificativ din operand trece n CF, se deplaseaz toi biii din operand cu o
poziie la dreapta, iar CF iniial trece n bitul cel mai semnificativ din operand. Opera ia se repet de
attea ori ct este valoarea lui contor (0-255 sau coninutul registrului CL).
stc;CF=1
movah,10h;AH,CF=000100001
rcrah,1;AH,CF=100010000
Instruciunile SHLD/SHRD (shift left double, shift right double)
Forma general:
SHLD dest, sursa, contor
SHRD dest, sursa, contor
Structura instruciunii:
SHLDreg16,reg16,CL/imm8
SHLDmem16,reg16,CL/imm8
SHLDreg32,reg32,CL/imm8
SHLDmem32,reg32,CL/imm8
Deplasarea stnga se petrece dup urmtoarea schem:

Iar deplasarea dreapta dup urmtoarea schem:

Arhitectura Calculatoarelor

44

Exemple:
.data
wvalWORD9BA6h
.code
movax,0AC36h
shldwval,ax,4;wval=BA6Ah

movax,234Bh
movdx,7654h
shrdax,dx,4

2.7.9 Instruciuni logice


Instruciunile logice realizeaz funciile logice de baz, pe 8, 16, 32 sau 64 bii. Operaiile se fac la
nivel de bit.
a) Instruciunea NOT (Not)
Forma generala :
NOT dest
n care dest poate fi un registru sau o locaie de memorie. Instruc iunea provoac negarea tuturor biilor
operandului, adic se face complementul fa de unu.
moval,11110000b
notal;AL=00001111b
b) Instruciunea AND (And)
Forma generala :
AND dest, sursa
n care dest poate fi un registru sau o locaie de memorie, iar sursa un registru, o locaie de memorie sau
o constant. Instruciunea depune n dest i-logic la nivel de bit ntre dest i sursa.
Indicatori afectai: SF, ZF, PF, CF=0, OF=0, AF nedefinit. Structura instruciunii:
ANDreg,reg
ANDreg,mem
ANDreg,imm
ANDmem,reg
ANDmem,imm
Valoarea imediat imm nu poate depi mrimea de 32 bii.
moval,10101110b
andal,11110110b;resultinAL=10100110

Arhitectura Calculatoarelor

45

c) Instruciunea OR (Or)
Forma generala :
OR dest, sursa
n care dest poate fi un registru sau o locaie de memorie, iar sursa un registru, o locaie de memorie sau
o constanta. Instruciunea depune n dest sau-logic la nivel de bit ntre dest i sursa.
Indicatori afectai: SF, ZF, PF, CF=0, OF=0, AF nedefinit.
moval,11100011b
oral,00000100b;resultinAL=11100111
d) Instruciunea XOR (Exclusive Or)
Forma generala :
XOR dest,sursa
n care dest poate fi un registru sau o locaie de memorie, iar sursa un registru, o locaie de memorie sau
o constant. Instruciunea depune n dest xor-logic la nivel de bit ntre dest i sursa.
Indicatori afectai: SF, ZF, PF, CF=0, OF=0, AF nedefinit. Tabelul de adevr este urmtorul:

e) Instruciunea TEST (Test)


Forma generala :
TEST dest,sursa
n care dest poate fi un registru sau o locaie de memorie, iar sursa un registru, o locaie de memorie sau
o constanta. Instruciunea realizeaz and-logic la nivel de bit ntre dest i sursa i nu modific destinaia,
cu poziionarea indicatorilor.
Indicatori afectai: SF, ZF, PF, CF=0, OF=0, AF nedefinit.
Aceast instruciune este deseori utilizat pentru a testa starea unui bit (bii).
Exemplu. Fie este necesar s testm starea bitului 5:
testal,00100000b;testbit5
Dac ZF=0, atunci bitul 5 este egal cu 1, iar dac ZF=1, bitul 5 egal cu 0.
f)Instruciunile BSF, BSR (Bit scan forward, reverse)
Forma generala :
BSF dest,sursa
BSFreg16,r/m16
BSFreg32,r/m32
Instruciunea scaneaz biii operandului surs, ncepnd cu bitul 0 (BSR-15/31) pn la bitul 15/31
(BSR-0), pentru a gsi primul bit de 1.
Dac se ntlnete bitul de 1, flag-ul ZF este setat n 0, iar n operandul destinaie este ncrcat
indexul (poziia) primului bit de 1.
n cazul n care nici un bit de 1 nu este gsit, flag-ul ZF este setat n 1.
Exemplu:
mov bx,0002h
;bx=0000 0010b
...
bsf cx,bx ;cx=0001h
jz
null
...
null:

Arhitectura Calculatoarelor

46

Instruciunile BT, BTC, BTR, BTS (Bit tests)


Forma generala :
BT dest,sursa
BTr/m16,imm8
BTr/m16,r16
BTr/m32,imm8
BTr/m32,r32
Instruciunea BT copie bitul n, specificat n surs, n flag-ul Carry. Operandul destinaie conine
valoarea cu bitul cutat, iar operandul surs conine poziia bitului cutat.
Instruciunea BTC copie bitul n, n flag-ul Carry i compementeaz bitul n n operandul
destinaie.
Instruciunea BTR copie bitul n, n flag-ul Carry i seteaz bitul n n 0 n operandul destinaie.
Instruciunea BTS copie bitul n, n flag-ul Carry i seteaz bitul n n 1 n operandul destinaie.
mov ebx,01001100h
bt
ebx,8 ;testarea bitului 8 i setarea cf n 1
jc m1
;salt la m1, dac valoarea bitului este 1
Exemple programe
{Cutare secveniala} S se scrie un program pentru cutarea primului blanc din irul ncepnd de la
adresa sir. La ieirea din program eax va conine valoarea 0 daca irul nu conine blancuri, altfel va conine
valoarea poziiei din sir a primului blanc gsit. Se presupune c irul sir are l caractere.
.data
sir DB 'Acesta este un sir!'
l
EQU sizeof sir
.code
mov ecx,l
mov esi,-1
mov al,' '
urm: inc esi
cmp al,sir[esi]
loopne urm
jne nu_gasit
mov eax,esi
jmp iesire
nu_gasit: mov eax,0
iesire: nop
2.8 Instruciuni pentru controlul procesorului
Sunt instruciuni care controleaz anumite funcii ale procesorului, ce acioneaz fie prin
intermediul unor indicatori de control (sau regitri 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 1 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

Arhitectura Calculatoarelor

47

HLT ;Oprire microprocesor pn la RESET, NMI, sau INT (dac sunt activate)
WAIT ;ateptare pn cnd vine semnalul exterior test=0
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.9 Instruciuni pentru lucrul cu iruri
n afar de tipurile de baz amintite mai sus, exist i posibilitatea efecturii unor opera ii 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 :
Instruciunile MOVSB (Move (copy) bytes)
MOVSW (Move (copy) words)
MOVSD (Move (copy) doublewords)
Transfer pe 8 (16,32) bii, din zona de memorie indicat de ESI, n zona de memorie indicat de
registrul EDI. Dup transferul primului byte (word, doubleword), dac flag-ul DF=0, se petrece
autoincrementarea ESIESI+1; EDIEDI+1 (decrementare pentru DF=1).
n operaii cu iruri sunt utilizate prefixe de repetare:
REP
REPZ, REPE
REPNZ, REPNE

Repetare pn ecx>0
Repetare pn ZF=1 i ecx>0
Repetare pn ZF=0 i ecx>0

Exemplu. Fie dat s copiem 20 de cuvinte duble din irul surs source n irul destinaie target:
.data
sourceDWORD20DUP(0FFFFFFFFh)
targetDWORD20DUP(?)
.code
cld
;direction=forward
movecx,LENGTHOFsource;setamcontorulREP
movesi,OFFSETsource;incarcamESIcuadresasoursei
movedi,OFFSETtarget;incarcamEDIcuadresadestina?iei
repmovsd
;copiemcuvinteduble
Instruciunile CMPSB (Compare bytes)
CMPSW (Compare words)
CMPSD (Compare doublewords)
Comparare pe 8 (16,32) bii, din zona de memorie indicat de ESI, cu zona de memorie indicat
de registrul EDI. Dup compararea primului byte (word, doubleword), dac flag-ul DF=0, se petrece
autoincrementarea ESIESI+1; EDIEDI+1 (decrementare pentru DF=1).
Exemple:
.data

Arhitectura Calculatoarelor

48

sourceDWORD1234h
targetDWORD5678h
.code
movesi,OFFSETsource
movedi,OFFSETtarget
cmpsd
;comparedoublewords
jaL1
;jumpifsource>target
Dac comparm cuvinte multiple:
movesi,OFFSETsource
movedi,OFFSETtarget
cld;direction=forward
movecx,LENGTHOFsource;repetitioncounter
repecmpsd;repeatwhileequal
Prefixul REPE repet compararea, incrementnd ESI i EDI n mod automat, pn cnd ECX =0
sau o pereche de cuvinte duble nu va fi egal.
Instruciunile SCASB (SCAS- Scans a string)
SCASW
SCASD
Instruciunile compar valoarea din AL/AX/EAX cu byte, word sau doubleword din zona de memorie
indicat de EDI. Instruciunile sunt utile la cutarea unui singur element ntr-un ir.
Exemple:
.data
alphaBYTE"ABCDEFGH",0
.code
movedi,OFFSETalpha;incarcamEDIcuadresa
;siruluidescanat
moval,'F'
;cautamliteraF
movecx,LENGTHOFalpha;setamregistrulcontor
cld
;direction=forward
repnescasb;repetampananuesteegal
jnzquit;iesiredacaliteranuafostgasita
Instruciunile STOSB (STOS- Store string data)
STOSW
STOSD
Instruciunile ncarc valoarea din AL/AX/EAX , n memorie cu offset-ul indicat de EDI. Incrementarea
se petrece conform flag-ului DF (DF=0- incrementarea, DF=1- decrementarea).
Exemplu. irul string1este completat cu valoarea 0FFh.
.data
Count=100
string1BYTECountDUP(?)
.code
moval,0FFh;valoareadedeincarcat
movedi,OFFSETstring1;EDIcuadresasirului
movecx,Count;numaruldeelementealesirului
cld;direction=forward
repstosb;copiereaALinstring1
Instruciunile LODSB (LODS- Load Accumulator from String)
LODSW

Arhitectura Calculatoarelor

49

LODSD
Instruciunile ncarc valoarea din byte, word sau doubleword din memorie idicat de ESI, n
AL/AX/EAX respectiv. Instruciunile sunt utile la cutarea unui singur element ntr-un ir.
Exemplu: Multiplicarea fiecrui element a unui ir cu o constant.
INCLUDEIrvine32.inc

.data
arrayDWORD1,2,3,4,5,6,7,8,9,10;testdata
multiplierDWORD10
.code
mainPROC
cld
;direction=forward
movesi,OFFSETarray;sirulsursa
movedi,esi
;siruldestinatie
movecx,LENGTHOFarray;setareacontorului
L1:lodsd
;incarcarea[ESI]inEAX
mulmultiplier;multiplicareacuconstanta
stosd;copiedinEAXin[EDI]
loopL1
exit
mainENDP
ENDmain
2.10 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.
Tehnicile de transfer a parametrilor combin diversele modaliti de alegere a tipurilor de locaii
fizice pentru pstrarea parametrilor transmii: regitri, 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 aprea 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 i
FAR. Tipul apelului trebuie s coincid cu tipul procedurii i cu tipul instructiunii RETURN din
interiorul procedurii.
Instructiunea RET (RETURN)
Forma general:
RET [n]
unde n este o constant ntreag opional.
Dac instruciunea RET este de tip NEAR semnificaia sa este:
[IP] SS: [[SP] + 1: [SP]]

Arhitectura Calculatoarelor

50

[SP] [SP] + 2
[[SP] [SP] + n]
adic se reface (IP) prin copierea coninutului vrfului stivei i incrementarea cu 2 a lui (SP). Dac n
instruciunea RET apare i constanta n atunci aceast constant se adun la (SP), adic se descarc stiva.
Exemplu:
.data
a DWORD 55555h
b DWORD 77777h
s DWORD ?
.code
...
; ncarc primul numar in DX:AX
mov ax,WORD PTR a
mov dx,WORD PTR [a+2]
; incarca al doilea number in DI:SI
mov si,WORD PTR b
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
...
O macroinstruciune reprezint o secven de cod surs creia i se atribuie un nume simbolic, coninutul
acestei secvene putnd fi repetat ori de cte ori n cadrul unui program prin simpla referire la numele
simbolic respectiv. Utilizarea unei macroinstruciuni necesit parcurgerea a doi pai:
1.Definirea macroinstruciunii, care se marcheaz printr-o macro definiie. Aceasta cuprinde o secvena de
cod, ntre directivele MACRO si ENDM. Sintaxa este:
nume MACRO {parametrii}
cod
ENDM
unde:
nume reprezint numele simbolic dat macroinstruciunii ;
parametrii reprezint parametrii formali opionali ai macroinstruciunii, separai prin virgul,
blancuri sau TAB-uri. La apelul macroinstruciunii, aceti parametri formali sunt nlocuii textual cu
parametrii actuali.
2.Apelul macroinstruciunii, care se realizeaz printr-un macroapel, cu sintaxa:
nume {argumente}
unde:
nume reprezint numele simbolic al macroinstruciunii apelate;
argumente reprezint lista parametrilor actuali, separai prin virgul, blancuri sau TAB-uri.
Apelul macroinstruciunii are ca efect includerea textual a codului din definiia macroinstruciunii n
corpul programului.

Arhitectura Calculatoarelor

51

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


addup MACRO ad1,ad2,ad3
mov ax,ad1
add ax,ad2
add ax,ad3
ENDM

a WORD 1
b WORD 2
cd WORD 3
d WORD ?
..
addup a,b,cd
mov dx,ax
addup dx,dx,dx
mov d,ax
addup d,dx,cd
Pentru definirea unor simboluri n cadrul unei macroinstructiuni, care la fiecare apel al macroinstructiunii
respective vor fi nlocuite cu nume unice de simboluri, gestionate de asamblor, se utilizeaz directiva
LOCAL cu sintaxa:
LOCAL nume {,nume} ...
Directiva LOCAL, dac este prezent ntr-o macrodefinitie, trebuie s urmeze imediat directivei
MACRO.
Exemplu: Ridicarea unui numar la o putere.
power MACRO factor,exponent
LOCAL again, gotzero
xor dx,dx
mov ax,factor
mov cx,exponent
again: jcxz gotzero
mul bx
loop again
gotzero:
ENDM

Arhitectura Calculatoarelor

52

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 (8 bii). Formatul memoriei nu are nici-o legtur
cu organizarea fizica a cipurilor de memorie.
MEMORY

Magistrala date
CPU

Magistrala adrese

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
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.

Arhitectura Calculatoarelor

53

"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:
1KiloByte = 210Byte 103 Byte
1MegaByte = 220 Byte 106 Byte
1GigaByte = 230 Byte 109 Byte
1TerraByte = 240 Byte 1012Byte

Arhitectura Calculatoarelor

54

1PetaByte =

250 Byte 1015Byte

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 civa centimetri pn la sute de metri) prin unde radio. Dimensiunea
acestor circuite este mai mic de 0,5mm (figura 3.2), costul fiind de c iva cen i. Circuitele nu utilizeaz
surse de alimentare i pot stoca informaia mult timp.

a)
b)
Figura 3.2 - Circuitul RFID -a, b fr anten
Informaii detaliate le 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 ncapsulateintegrate (embedded systems), la care existena unui sistem de calcul incorporat este (aproape)
transparent pentru utilizator.

Arhitectura Calculatoarelor

55

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, .a.
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 aplica ii, 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 con ine un
procesor, RAM, i un coprocesor pentru audio-video, incorporate intr-o carcas la care se conecteaz
televizorul i controlerul. Prezentm caracteristicile principale ale Sony PlayStation4. Noua consol are
un procesor AMD Jaguar cu 8 nuclee i un GPU AMD Radeon, cu o vitez de calcul 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, Intel produce microprocesoare specializate pentru servere i staii de lucru - Intel
Xeon. Cu toate c serverele ofer mult spaiu pe disc, pentru mrirea siguran ei n func ionare sunt
folosite hard-discuri de capacitate redus, numeroase, interconectate n mod special.
Folosirea mai multor microprocesoare duce la o mai mare fiabilitate n compara ie 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

Arhitectura Calculatoarelor

56

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 (1015 operaii pe secund, n virgul mobil). Ocup o suprafa de 1100 m2 i a fost construit din
700 de procesoare AMD Opteron.
n anul 2013 compania Cray a realizat 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
2025), se va realiza un supercomputer cu o putere de calcul de 10 exaflops (10 19 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.

Arhitectura Calculatoarelor

57

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
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.

Arhitectura Calculatoarelor

58

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
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

Arhitectura Calculatoarelor

59

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
de tact a
Frecvena
magistralei
Interior
magistralei de tact
Tip/generaie
Anul
Date/Adrese, (L1),
de
(interioar,)
Bii
kB
memorie,
(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
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 cei patru
regitri 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 regitrilor 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

Arhitectura Calculatoarelor

60

("Advanced Technology") care folosete Intel 80286.


Procesorul 80386 a introdus n cadrul arhitecturii Intel regitri de 32 de bii, utilizate att pentru
pstrarea datelor, ct i pentru adresare. Pentru compatibilitate cu procesoarele anterioare, aceti regitri sau obinut prin extinderea regitrilor de 16 bii, fiind posibil utilizarea n continuare a vechilor regitri,
acestea constituind jumtatea de ordin inferior ai regitrilor 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. Regitrii 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)
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 stare (perioad de
tact, ceas). 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 de tip SSE (Streaming SIMD Extensions) 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).

Arhitectura Calculatoarelor

61

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.
3.2 Microprocesoarele CISC/RISC
Multe microprocesoare au seturi de instruciuni ce includ mai mult de 100 200 instruc iuni. 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;
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 regitri 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 regitrii interni ale UCP. Unele din proiectele de arhitecturi RISC folosesc
un set mare de ferestre de regitri 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);

Arhitectura Calculatoarelor

62

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 regitri n interiorul UCP;
Aa cum s-a artat mai sus, arhitecturile RISC restricioneaz numrul de instruc iuni care acceseaz
direct memoria principal. Cele mai multe instruciuni ale RISC presupun doar opera ii ntre regitrii
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 execuie n virgul mobilUnitate pentru segmentare

Unitate pentru paginare


Unitate de interfa cu magistrala

Memoria
cache

Unitate de
execuie
Unitate pentru decodificare instruciuni
Unitate pentru prefetch

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 uniti numite i stages (segmente, etape). Segmentul 1
extrage instruciunea din memorie i o plaseaz ntr-un registru tampon. Segmentul 2 o decodific,
determinndu-i tipul i operanzii. Segmentul 3 localizeaz i extrage operanzii, fie din regitri, fie din
memorie. Segmentul 4 execut instruciunea, de obicei rulnd operanzii prin calea de date, iar segmentul
5 scrie rezultatul n regitri.

Arhitectura Calculatoarelor

63

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


Starea fiecrui segment n funcie de timp (b).
n figura 3.8 b vedem cum opereaz o band de asamblare n func ie de timp. n ciclul 1, segmentul
S1 lucreaz asupra instruciunii 1 (o extragere din memorie). n ciclul 2, S2 decodific instruc iunea 1.
Tot n ciclul 2, S1 extrage instruciunea 2. n ciclul 3, S3 extrage operanzii pentru instruc iunea 1, S2
decodifica instruciunea 2 i S1 extrage instruciunea 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 asamblare dual. Pentru a putea lucra n paralel,
cele 2 instruciuni nu trebuie s-i dispute resursele (de exemplu Regitrii) 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.

Figura 3.9 Banda de asamblare dual cu 5 segmente


Pentium are dou benzi de asamblare asemntoare cu cele din fig. 3.9, dei mpr irea 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 instruc iune 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 abordri cu totul diferite. Idea de baz este de a avea o singur band de
asamblare, dar cu mai multe uniti funcionale, aa cum se observ n figura 3.10.

Arhitectura Calculatoarelor

64

Figura 3.10 - Un procesor superscalar cu 5 uniti funcionale


Procesorul Pentium II are o structur asemntoare (sunt i diferene) cu cea din fig. 3.10. Unit 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 unit i
funcionale n segmentul S4.

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