analiza şi sinteza blocurilor funcţionale ale calculatorului se pot efectua cu
ajutorul .... Operaţiile de adunare şi scădere se reduc la operaţia de adunare a ...
Aritmetica în sistemele de calcul 1. Sisteme de numeraţie Un sistem de numeraţie este reprezentat prin totalitatea regulilor de reprezentare a numerelor, cu ajutorul unor simboluri numite cifre. Cifra este un simbol care reprezintă o cantitate întreagă. Baza (rădăcina) sistemului de numeraţie este numărul de simboluri diferite permise pentru reprezentarea numerelor. În sistemele de calcul se utilizează sistemul de numeraţie binar, B 2 = {0,1}, acesta prezentând o serie de avantaje: existenţa unei corespondenţe biunivoce cu stările stabile ale unui circuit electronic digital; are o aritmetică simplă; analiza şi sinteza blocurilor funcţionale ale calculatorului se pot efectua cu ajutorul algebrei booleene, construită pe mulţimea B 2. Conversia unui număr dintr-o bază de numeraţie α într-o nouă bază de numeraţie β se face examinând separat partea întreagă şi partea fracţionară. Să luăm, de exemplu, numărul 121,45 în zecimal. Se doreşte transformarea acestuia în baza 2. Pentru a putea realiza acest lucru, vom privi numărul dat ca două numere distincte: partea întreagă 121 şi partea fracţionară 0,45. Prima dată vom transforma numărul 121 în binar, prin împărţiri succesive la 2 şi prin luarea resturilor obţinute la împărţiri în ordinea inversă a obţinerii. 12110 = 11110012 Pentru a transforma partea fracţionară 0,45 în binar va trebui să efectuăm înmulţiri succesive cu 2 şi să preluăm partea întreagă a rezultatelor. 0,45 * 2 = 0,9 -> 0 0,9 * 2 = 1,8 -> 1 0,8 * 2 = 1,6 -> 1 0,6 * 2 = 1,2 -> 1 … Algoritmul se opreşte în momentul în care partea fracţionară devine 0 sau s-a atins precizia dorită (numărul de cifre pentru reprezentarea rezultatului). 0,4510 = 0,011100112 Prin concatenarea rezultatelor parţiale se obţine rezultatul final al conversiei. Astfel:
121,4510 = 1111001,011100112 Observaţie: În timp ce numerele întregi se pot reprezenta exact în binar, numerele subunitare se reprezintă aproximativ, făcând excepţie numai acele numere subunitare care se pot scrie sub forma de sumă de puteri negative ale lui 2 (0,5; 0,25 etc.). Pentru transformarea inversă, din binar în zecimal, vom înmulţi biţii numărului cu puterile lui 2 corespunzătoare rangului cifrei. 10110101,01101012 = 1*27 + 0*26 + 1*25 + 1*24 + 0*23 + 1*22 + 0*21 + 1*20 + 0*2-1 + 1*2-2 + 1*2-3 + 0*2-4 + 1*2-5 + 0*2-6 + 1*2-7 ≈ 181,414
2. Reprezentarea numerelor întregi Numerele întregi se reprezintă în calculator în formatul cu virgulă fixă. Numărul de biţi utilizaţi pentru reprezentare (n), determină numărul de valori distincte reprezentabile (2 n). Pentru reprezentarea în calculator a numerelor întregi fără semn se utilizează următoarele coduri: a) codul binar ponderat – poziţia fiecărui bit din reprezentare determină ponderea sa în calculul valorii. Numărul se reprezintă prin valoarea sa, pe toţi cei n biţi ai reprezentării, domeniul de valori fiind [0, 2 n - 1]. Ex.: 1101 => 13 b) codul Gray – are proprietatea că două valori adiacente în cod diferă printr-un singur bit. În tabelul următor este prezentat codul Gray pe 4 biţi.
Valoare (hexa) 0 1 2 3 4 5 6 7 8 9 A B C D E F
Cod binar 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Cod Gray 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000
În multe aplicaţii se lucrează însă cu numere întregi cu semn (numere algebrice), deci este necesară reprezentarea unui astfel de număr, folosind bitul de semn. Numerele algebrice pozitive se reprezintă întotdeauna prin valoare (mărime), având bitul de semn egal cu 0. Numerele negative se pot reprezenta în calculator utilizând diferite coduri. Dintre aceste coduri de reprezentare fac parte: a) codul direct Numerele întregi se reprezintă prin mărime (valoare absolută) şi semn. Pentru numerele negative, bitul cel mai semnificativ (de semn) este 1, iar celalţi n-1 biţi servesc pentru reprezentarea valorii absolute a numărului. Ex.:
N = -5 pe 8 biţi => 10000101
b) codul invers (complement faţă de 1) Pentru numerele negative, bitul de semn este 1, ceilalţi n-1 biţi servind pentru reprezentarea valorii absolute negate a numărului. Negarea se realizează la nivel de bit: biţii 0 devin 1 şi biţii 1 devin 0. Ex.:
N = -5 pe 8 biţi => 11111010
c) codul complementar (complement faţă de 2) Pentru reprezentarea numerelor negative se aplică următoarea regulă de complementare: se reprezintă numărul în valoare absolută, apoi se inversează bit cu bit, inclusiv bitul de semn (care devine 1) şi se adună 1 la rezultatul obţinut. Deci, complementul faţă de 2 se obţine din complementul faţă de 1, la care se adaugă 1.
Ex.:
N = -5 pe 8 biţi se reprezintă astfel: |N| = 5, adică 00000101 prin inversare devine
11111010+ 1 11111011
d) cod în exces Această codificare constă în adunarea unei valori constante la fiecare număr întreg (pozitiv sau negativ) care se reprezintă. Valoarea constantă notată E care se adună, este de regulă 2n-1, cu n numărul de biţi ai reprezentării. Matematic, un număr întreg N se reprezintă în cod exces E prin: E + N. Ex.: Numerele N1 = 5 şi N2 = -5 se reprezintă pe n = 8 biţi, în exces 2 7 = 128, prin:
128 + 5 = 133 respectiv
E N
10000000 00000101 10000101
128 + (-5) = 123
10000000 11111011 01111011
Fie D domeniul de numere întregi ce se pot reprezenta pe n biţi: D = [-2n-1, 2n-1-1]. Utilizând codul exces 2n-1, domeniul D se transformă în domeniul de valori pozitive D’ = [0, 2n-1]. Deci, codul în exces poate transforma un domeniu de numere algebrice într-un domeniu de numere aritmetice. Avantajul este că operaţiile cu numere aritmetice se implementează mai simplu (în hardware sau în software) decât operaţiile cu numere algebrice.
3. Operaţii cu numere reprezentate în virgulă fixă 3.1. Adunarea şi scăderea în complement faţă de doi Operaţiile de adunare şi scădere se reduc la operaţia de adunare a numerelor reprezentate în cod complementar. Se adună cei doi operanzi bit cu bit, inclusiv biţii de semn, iar eventualul transport care rezultă de la bitul de semn se va neglija. Rezultatul este obţinut în cod complementar.
Exemple: a) x = 9, y = 5 00001001+ 00000101 00001110
9 + 5 = 14
b) x = 9, y = -5 Mai întâi vom reprezenta -5 în complement faţă de doi: -5 => 11111011 După care realizăm adunarea: 00001001+ 11111011 00000100
9-5=4
c) x = 5, y = -9 y = -9 în complement faţă de 2 va fi:
-9 => 11110111
5 – 9 = -4
00000101+ 11110111 11111100
Rezultatul obţinut este negativ (bitul de semn are valoarea 1), reprezentat în complement faţă de 2. Pentru a afla valoarea absolută a rezultatului va trebui să îl complementăm din nou faţă de 2. Prin inversare se obţine:
00000011+ 1 00000100
=4
3.2. Înmulţirea numerelor fără semn Regulile de înmulţire binară sunt prezentate mai jos: Deînmulţit 0 0 1 1
Înmulţitor 0 1 0 1
Produs 0 0 0 1
Prezentăm mai jos înmulţirea a două numere binare de câte 4 biţi: deînmulţitul înmulţitorul
produs
1011 1101 1011 0000 1011 1011 10001111
11 13
143
Rezultatul se obţine pe lungime dublă, realizându-se trunchierea acestuia la lungimea simplă, dacă este necesar. Pentru operaţia de înmulţire pot fi stabilite următoarele reguli: 1) dacă bitul LSB al înmulţitorului este 1, se scrie dedesubt deînmulţitul deplasat cu o poziţie la stânga; 2) dacă LSB este 0 se scrie dedesubt un număr de zerouri egal cu numărul de cifre al deînmulţitului şi apoi se face deplasarea cu o poziţie la stânga; 3) pentru fiecare bit al înmulţitorului se repetă paşii 1) sau 2) după caz; 4) se adună toate produsele parţiale pentru a forma rezultatul final.
3.3. Împărţirea numerelor fără semn Operaţia de împărţire poate fi privită ca o scădere repetată a împărţitorului din deîmpărţit. Numărul care arată de câte ori se poate aplica scăderea formează câtul, iar reziduul rămas după ultima scădere formează restul. 1101 10 10 10 01 00 01
10 110
13:2 => cât 6, rest 1
3.4. Înmulţirea numerelor în complement faţă de 2. Metoda lui Booth Înmulţirea a două numere binare cu semn utilizând deplasarea şi adunarea produselor parţiale ridică unele probleme complicate privind testarea semnelor şi execuţia corecţiilor necesare. O metodă alternativă ar consta în salvarea semnelorcelor două numere, conversia numerelor negative în numere pozitive şi apoi realizarea operaţiei de înmulţire conform algoritmului descris mai sus. Dacă semnele operanzilor sunt diferite, rezultatul este negativ şi produsul se va converti înapoi în complement faţă de 2. Complicaţiile metodelor descrise anterior pot fi înlăturate folosind metoda lui Booth unde, deasemenea, procedura nu ţine cont de semnul înmulţitorului. În această metodă cifrele înmulţitorului sunt examinate în perechi, începând cu cea mai puţin semnificativă pereche; deînmulţitul este adunat sau scăzut din produsul parţial acumulat, în funcţie de informaţia obţinută în urma comparaţiei biţilor înmulţitorului. Algoritmul pentru această metodă poate fi enunţat astfel: 1)
dacă cifrele comparate sunt 00 sau 11 nu se efectuează nimic şi se deplasează înmulţitorul şi produsul parţial cu o poziţie spre dreapta;
2)
dacă cifrele comparate sunt 10, se scade deînmulţitul (adică se adună complementul său faţă de doi) din produsul parţial acumulat şi se deplasează cu o poziţie la dreapta:
3)
dacă cifrele comparate sunt 01, se adună deînmulţitul la produsul parţial acumulat şi se deplasează cu o poziţie la dreapta.
Obs.: La deplasarea la dreapta a unui număr, se repetă bitul de semn în partea stângă.
Pentru prima comparaţie se plasează un 0 după bitul LSB, prima comparaţie făcându-se între acest bit şi bitul LSB.
Ex.:
D = +12 = 0,1100 │ bitul de semn │ -14 este scris în complement faţă de doi
I = -14 = 1,0010 deînmulţitul înmulţitorul
0,1100 1,0010[0] 0,000000000 0,000000000 1,0100 1,010000000 1,101000000 0,1100 0,011000000 0,001100000 0,000110000 1,0100 1,010110000 1,101011000
00 => depl. dreapta 10 => scădere depl. dreapta 01 => adunare ignoră carry depl. dreapta 00 => depl.dreapta 10 => scădere depl. dreapta
+12 -14 primul produs parţial al doilea produs partial al treilea produs partial al patrulea prod. partial rezultatul înmulţirii
Rezultatul este negativ => complementare faţă de doi:
0,010100111 1 0,010101000
inversare rezultat adună 1 = 168
Deci, 12*(-14) = -168. Obs.: Înainte de începerea înmulţirii, numerele negative se complementează faţă de doi.
3.5. Împărţirea numerelor în complement faţă de doi. Algoritmul cu restaurare. Iniţial se examinează semnul deîmpărţitului şi al împărţitorului, pentru a determina semnele câtului şi restului. Deîmpărţit >0 >0 0 restaurare deîmpărţit preia 0 pentru cât depl. dreapta împărţitor şi scade rezultat pozitiv => preia 1 pentru cât depl. dreapta împărţitor şi scade rezultat pozitiv => preia 1 pentru cât depl. dreapta împărţitor şi scade rezultat pozitiv => preia 1 pentru cât depl. dreapta împărţitor şi scade rezultat negaitv =>restaurare deîmpărţit preia 0 pentru cât deîmpărţit restaurat
Deci, câtul = 0,1110 = 14 restul = 0,00001011 = 11
4. Reprezentarea cifrelor zecimale
Numerele zecimale, alcătuite din cifrele 0-9, se reprezintă în diferite coduri. Aceste coduri sunt utilizate mai ales de sisteme sau de dispozitive pe 4 biţi. Cel mai utilizat cod este codul zecimal codificat binar, BCD (Binary Coded Decimal). Cifrele de la 0 la 9 sunt reprezentate prin valori binare echivalente, pe câte 4 biţi, conform tabelului următor:
Cifra 0 1 2 3 4 5 6 7 8 9
Cod BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Avantajul acestei codificări este corespondenţa directă între cifra zecimală şi valoarea sa. O altă modalitate de reprezentare a cifrelor zecimale este codul BCD în exces 3. Cifrele zecimale sunt reprezentate pe câte 4 biţi, prin valorile cuprinse între 3 (0011) şi 12 (1100). Pentru sistemele cu dispozitive care utilizează numere în cod BCD, este necesară o operaţie de conversie din binar în BCD şi invers.
4.1. Conversia din binar în BCD Regula de conversie este următoarea: se deplasează numărul binar spre stânga, începând cu bitul cel mai semnificativ. Înainte de deplasare se adună 3 la decadele care conţin un număr mai mare decât 4. Fie N2 = 10101101 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
NBCD 0000 0000 0000 0000 0000 0001 0010 0100 1000 0011 1011 0111
N2 0000 0001 0010 0101 0011 1000 0000 0001 0011 0110 0011 1001 0011
← ← ← +
10101101 0101101 101101 01101
← ← ← ← +
01101 1101 101 01 1
←
1
Rezultatul este NBCD = 173
4.2. Conversia din BCD în binar Regula de conversie este următoarea: se deplasează numărul BCD spre dreapta, cu câte o poziţie, începând cu bitul cel mai puţin semnificativ. După deplasare se scade 3 din acele decade care conţin un număr mai mare sau egal cu 8.
Fie NBCD = 173 1
NBCD 0111 1011 0011 1000 100 10 1
N2 0011 1001 0011 0110 0011 0001 0000 1000 0011 0101 010 01 0
→ -
1
→ → → → -
1 01 101 1101 01101
→ → → →
01101 101101 0101101 10101101 010101101
Rezultatul este N2 = 101011012 = 17310
5. Reprezentarea numerelor reale Numerele care intervin în calcule sunt numere nu neapărat întregi, unele sunt foarte mari, altele foarte mici, şi eventual cu multe cifre semnificative. De aceea este necesară o reprezentare a lor în care să se facă distincţie între ordinul de mărime şi precizie (numărul de cifre semnificative). În notaţia ştiinţifică, un număr este reprezentat astfel:
N = M * 10 E, unde E este
exponentul, un număr întreg pozitiv sau negativ, ce determină ordinul de mărime al numărului, iar M este mantisa, un număr fracţionar, ce determină precizia numărului. Echivalentul în calculator al acestei notaţii este formatul cu virgulă mobilă, folosit pentru reprezentarea numerelor reale din matematică.
Nu există o corespondenţă biunivocă între numerele reale şi numerele în virgulă mobilă. Astfel, numerele 0,998*10 9 şi 0,999*109 sunt consecutive în formatul în virgulă mobilă, dar în realitate între ele există o infinitate de numere reale. Cele mai importante diferenţe între numerele reale din matematică şi numerele reprezentate în virgulă mobilă sunt domeniul finit şi mulţimea discretă de valori. Domeniul finit şi discret este determinat de capacitatea fizică limitată a memoriei calculatorului. Numerele se reprezintă în formatul cu virgulă mobilă prin bitul de semn al numărului, exponent şi mantisă: n-1 S
0 Exponent e biţi
Mantisă m biţi
În continuare vom folosi următoarele notaţii: b – baza de reprezentare a numărului; bm – baza de reprezentare a mantisei; e – numărul de biţi pe care se reprezintă exponentul; m – numărul de cifre ale mantisei; p – numărul de cifre ale părţii fracţionare a mantisei. De remarcat faptul că informaţia care nu se modifică nu se reprezintă. Astfel avem baza de numeraţie şi virgula, a cărei poziţie a fost stabilită prin convenţie (de exemplu, în stânga bitului cel mai semnificativ al mantisei, adică m = p). Mantisa se reprezintă, de regulă, în valoare absolută (prin mărime), baza de reprezentare bm fiind 2, 4, 8 sau 16. Corespunzător, mantisa este o succesiune de cifre în baza 2, 4, 8 sau 16, fiecare cifră fiind reprezentată în memoria calculatorului pe 1, 2, 3 şi respectiv 4 biţi. Condiţia de normalizare, care asigură unicitatea reprezentării numărului real în calculator, stabileşte numărul de cifre ale părţii fracţionare a mantisei. Considerând mantisa subunitară, având prima cifră după virgulă semnificativă, vom avea următoarea condiţie de normalizare: 0,1bm