Vous êtes sur la page 1sur 13

ASC

Aritmetica numerelor intregi


Coninut
1.

ARITMETICA NUMERELOR INTREGI .......................................................................... 1


1.1.
Aritmetica numerelor intregi, pozitive (fara semn) .................................................. 4
1.2.
Aritmetica numerelor intregi, cu semn .................................................................... 4
1.3.
Reprezentarea numerelor n virgul flotant .......................................................... 9
1.4.
Coduri zecimale ....................................................................................................10
1.4.1.
Reprezentarea numerelor n BCD mpachetat i despachetat .......................11
1.4.1.1. Operaii n BCD despachetat .....................................................................11
1.4.1.2. Operaii n BCD mpachetat .......................................................................12
2. Coduri alfanumerice ....................................................................................................13
3. Aplicatii ........................................................................................................................13

1. ARITMETICA NUMERELOR INTREGI


Un sistem de calcul cu microprocesor trebuie sa aiba anumite capacitati de calcul, putand sa
implementeze cele patru operatii aritmetice fundamentale, de adunare, scadere, inmultire si
impartire. Daca fiinta omeneasca efectueaza aceste operatii in sistemul zecimal de
numarare, un microprocesor este prin structura sa o masina binara, toate informatiile sunt
memorate in cod binar, iar operatiile ce se desfasoara in ea se efectueaza deasemenea in
sistemul binar de numarare. n sistemul binar regulile de efectuare a operaiilor aritmetice
sunt mult mai puine dect n oricare alt sistem de numeraie, ceea ce simplific structura
unitii aritmetice. Dac n sistemul zecimal sunt 100 de reguli pentru adunarea cifrelor, n
sistemul binar sunt numai 4.
n binar
+
0 1
0
0 1
1
1 0
Sub o forma generala, reamintim ca un numar reprezentat in baza b de numarare, avand n
cifre supraunitare ( a n1 , a n 2 , ...., a 0 ), si m cifre subunitare ( a1 , a 2 , ...., am ), va avea
valoarea in baza 10 data de relatia

N10 = an1 b n1 + an 2 b n 2 + .... + a1 b1 + a0 b 0 + a1 b 1 + ... + am b m


Conversia unui numr dintr-o baz de numeraie n alta se face separat pentru partea
ntreag i pentru partea fracionar. Partea ntreag se divide succesiv cu noua baz i se
rein resturile pariale n ordinea invers a generrii lor. Partea fracionar se nmulete
succesiv cu baza i se reine de fiecare dat partea ntreag a rezultatului.
Exemple pentru conversia numrului unui numri zecimal => binar:

B10 B2:

Aritmetica numerelor intregi

13 2 1
6 2 0
3
1

1101

2 1

Pentru conversia numrului 30.4810 n binar se fac urmtoarele operaii:


30
15
7
3
1
0

3010 = 111102
0
1
1
1
1

0,48
0,96
1,83
1,66
1,32
.....

0,4810=0,0111...2
0
1
1
1

Se observ c n cazul conversiei prii fracionare de cele mai multe ori nu se obine un
rezultat exact. Procesul de conversie se ncheie atunci cnd se obine o precizie rezonabil
de exprimare a valorii fracionare. De exemplu n multe aplicaii inginereti o precizie de 2
cifre zecimale dup virgul se consider o precizie acceptabil. ntrebarea este cte cifre
binare sunt necesare pentru o precizie similar? La exprimarea n baza zece, prin dou cifre
dup punctul zecimal se obine o eroare maxim de 1/100. n baza 2 pentru o precizie
similar trebuie s se utilizeze 7 cifre binare pentru a obine o eroare maxim de 1/128,
adic 1/27. Pentru o precizie mai mare de 1/1000 (3 cifre zecimale dup punct) sunt
necesare 10 cifre binare (1/1024 = 1/210).
Poziia punctului zecimal nu se reprezint n calculator. Prin convenie se consider ntr-o
poziie predefinit. De exemplu pentru reprezentarea numerelor strict ntregi poziia punctului
zecimal se consider n dreapta reprezentrii (dup cifra cea mai puin semnificativ). Din
aceast cauz aceast codificare poart numele de "reprezentare n virgul fixa".
Pentru operaiile de adunare i scdere poziia punctului zecimal nu influeneaz rezultatul
generat. Situaia este diferit pentru operaiile de nmulire i mprire, unde poziia punctului
n rezultat se schimb.
Pentru a face trecerea de la sistemul zecimal la cel binar i invers adesea se utilizeaz un
sistem de numeraie intermediar, care se apropie de ambele sisteme. De exemplu sistemul
hexazecimal este utilizat n acest scop deoarece, pe de-o parte permite exprimarea unor
valori printr-un numr rezonabil de cifre, iar pe de alt parte se poate converti relativ simplu
n sistemul binar. n cazul n care se vizualizeaz coninutul unei zone de memorie sau a
unor registre informaia este prezentat n format hexazecimal, chiar dac n calculator
informaia este n binar. De asemenea programatorii n limbaj de asamblare prefer forma
hexazecimal n locul celei zecimale pentru c se apropie mai mult de forma de reprezentare
din calculator.
Sistemele hexazecimal si (uneori) octal, sunt utilizate la listarea programelor, astfel incat
inginerul ce doreste proiectarea si/sau utilizarea unei asemenea masini trebuie sa fie
familiarizat cu o varietate de sisteme de numarare. Totodata, interfatarea cu utilizatorul uman
presupune adeseori preluarea de date in format zecimal, (tastaturi, console) si, dupa
prelucrare, prezentarea rezultatelor deasemenea zecimal (afisaje, listinguri, etc.). Astfel, sunt
necesare uneori operatii in cod BCD in interiorul microprocesorului, si deci sunt necesare
tehnici de conversie binar-BCD si reciproc.
Conversia binar -> octal se efectueaza prin gruparea a cate trei cifre binare, incepand din
dreapta numarului, si inlocuire cu echivalentul octal corespunzator.

2/13

Aritmetica numerelor intregi

Reciproc, pentru conversia octal -> binar, se procedeaza in mod similar: Se inlocuieste
fiecare cifra octala cu cei trei biti din codul binar corespunzator.
Octal
0
1
2
3
4
5
6
7

Binar
000
001
010
011
100
101
110
111

Figura 3. 1. Conversia octal - binar


Binar
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

Hexazecimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

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

Figura 3. 2. Conversia binar-hexazecimal-zecimal


Exemple: conversie binar hexazecimal i invers:

11012 = 1 23 + 1 2 2 + 0 21 + 1 2 0 = 1310 = D16

AB16 = A 161 + B 16 0 = 10 16 + 11 1 = 17110


11 0111 1000 1001 2 = 378916
378516 = 0011 0111 1000 01012
ABCD16 = 1010 1011 1100 11012
1FD16 = 1 1111 11012
1011 0011 . 1100 1100 2 = B3.CC16
101 . 1111 0110 2 = 5.F616
33.316 = 11 0011 . 00112
In interiorul masinilor numerice, numerele sunt reprezentate prin grupe de cifre binare.
Aceste grupe de cifre binare sunt numite cuvinte. Lungimea cuvintelor pe care le poate
prelucra un microprocesor constituie o caracteristica importanta a acestuia, reprezentand,
dupa cum s-a mai precizat, un indiciu pretios in aprecierea capacitatii de calcul a sistemului.
Sunt tipice cuvinte cu o lungime de 4, 8, 16 sau 32 de biti. Un cuvant de 8 biti se mai
numeste si octet sau, in terminologia tehnica consacrata, byte. Cuvintele

3/13

Aritmetica numerelor intregi

microprocesoarelor sunt memorate in registre. Un registru poate fi implementat cu un sir de


circuite bistabile, fiecare dintre acestea putand fi considerat ca un bit de memorie. Din punct
de vedere functional, o masina numerica poate fi privita ca un sistem format din registre, iar
datele sunt transferate dintr-un registru in altul in cursul efectuarii operatiilor aritmetice si
logice. Acesta este evident un mod simplificat de a prezenta lucrurile, dar poate da o imagine
de baza asupra a ceea ce se intampla. In ceea ce priveste operatiile aritmetice de baza,
acestea se bazeaza pe regulile specifice, caracteristice operatiilor respective. Regulile
depind de tipul numerelor: intregi fara semn; intregi cu semn; numere in reprezentare BCD;
numere fractionare.

1.1.

Aritmetica numerelor intregi, pozitive (fara semn)

In cazul adunarii (sau scaderii, echivalenta in cazul reprezentarii numerelor in complement


fata de 2), trebuie remarcata problema aparitiei depasirilor (overflow), sau a imprumuturilor
(borrow), daca suma sau diferenta nu este reprezentabila intr-un cuvant de date (de
exemplu, suma a doua numere reprezentate pe 8 biti, care adunate dau un rezultat peste
256, va necesita 9 biti pentru reprezentare corecta). Data fiind lungimea finita a cuvintelor de
date in microprocesor, operatia de adunare sau de scadere va trebui sa semnalizeze
suplimentar efectuarii calculului, aparitia acestui bit de depasire; altfel, daca rezultatul este
considerat pe 8 biti, se pierde chiar bitul cel mai semnificativ, alterandu-se rezultatele si
obtinandu-se cu totul alte valori decat cele corecte.
Exemplu, o asemenea situatie de depasire, apare in cazul urmator:

27

26

25

24

23

22

21

20

0
0

1
0

0
1

0
0

0
0

1
0

1
0

0
1

depasire

Figura 3. 3. Aparitia unei depasiri in urma efectuarii unei operatii aritmetice


O situatie similara poate aparea in cazul scaderii, daca descazutul este mai mare decat
scazatorul (apare un bit de imprumut). In ceea ce priveste inmultirea, trebuie remarcat ca
rezultatul inmultirii a doua numer reprezentate pe cate un cuvant de date se va reprezenta
pe doua cuvinte de date. In general, inmultirea unui numar reprezentat pe m biti cu un numar
reprezentat pe n biti (intregi, fara bit de semn), conduce la obtinerea unui rezultat reprezentat
pe (m+n) biti. O situatie aparte va aparea la impartirea a doua numere, cand trebuie sesizata
si semnalizata incercarea de impartire la zero, al carei rezultat nedeterminat poate conduce
la efecte imprevizibile asupra comportarii sistemului.
Trebuie remarcat ca practic toate microprocesoarele au implementate in setul de instructiuni
operatiile de adunare si de scadere. Doar unele microprocesoare au in setul de instructiuni
operatiile de inmultire (si eventual, de impartire). In cazul absentei acestora din setul de
instructiuni al microprocesorului respectiv, implementarea lor se face prin program, pe baza
operatiilor elementare de adunare si a celor logice.

1.2.

Aritmetica numerelor intregi, cu semn

Reprezentarea numerelor ntregi n semn si valoare absoluta (MS) n Complement fa


de 1 (C1)i de 2 (C2)

4/13

Aritmetica numerelor intregi

O posibilitate de distingere a numerelor pozitive de cele negative intr-un calculator, este de a


folosi un bit suplimentar, pentru codificarea semnului. Prin conventie, bitul cel mai
semnificativ, este asociat semnului numarului: daca acest bit este 0, numarul este considerat
pozitiv; daca este 1, numarul este negativ. Bitul cel mai puin semnificativ al unei date (bitul
B0) se afl n poziia cea mai din dreapta a datei, iar bitul cel mai semnificativ n poziia
stng.

B7

B6 B5

B4

B3 B2

B1 B0

octet
B15 B14 B13 B12

B11 B10

B9 B
B7
D
cuvnt

B6 B5

B4

B3 B2

B1 B0

Pentru cuvinte de date cu lungime data, plaja de valori numerice ce pot fi reprezentate difera
de cazul numerelor intregi fara bit de semn. Astfel, intr-un octet se vor putea reprezenta
numere intregi intre -128 si +127.

Cuvinte de date de n biti,


unde n este:
8
fara semn
8
cu semn
16
fara semn
16
cu semn

Domeniu de valori
[0255]
[-128127]
[065535]
[-3276832767]

+
128

127

32768

32767

Figura 3. 4. Plaja de valori numerice pentru reprezentarea pe octet, respectiv cuvant a


numerelor intregi cu semn
Cea mai simpla posibilitate de reprezentare a numerelor cu semn, care este insa practic
nefolosita, deoarece ingreuneaza implementarea operatiilor de calcul aritmetice, este cea
care utilizeaza bitul de semn si modulul numarului (MS).
Exemple in aceasta reprezentare:
010 -> 0 00000002
1610 -> 0 00100002

5/13

Aritmetica numerelor intregi

2310 = 1 00101112

iar + 2310 = 0 00101112

13010 -> valoarea absolut nu se poate reprezenta pe 7 bii => reprezentarea se poate face numai
pe un numr mai mare de bii
13010 -> 0 0000000100000102
-13010 -> 1 0000000100000102
Aceast form de reprezentare este simpl, dar nu este avantajoasa pentru implementarea
operaiilor aritmetice. Unitatea aritmetic trebuie s in cont de semnul operanzilor.
Practic in totalitatea cazurilor se utilizeaza reprezentarea numerelor cu semn in forma
complementara, ceea ce favorizeaza in mod decisiv implementarea hardware a operatiilor
aritmetice cu aceste numere. Exista doua tipuri de reprezentare:

(1) complement fata de 1 (1's complement) ;


(2) complement fata de 2 (2's complement).
Reprezentarea n complement fa de 1 (C1) - numerele pozitive se reprezint astfel: n-1 bii
pentru valoare i 1 bit, egal cu 0 pentru semn. n cazul numerelor negative se
complementeaz fiecare poziie binar a reprezentrii valorii absolute a numrului, inclusiv
bitul de semn.
Exemple:
|-2310| -> 00010111
-2310 -> 11101000

1310 -> 00001101


00001101

|-12710| -> 01111111


-12710 -> 10000000

Deoarece reprezentarea in complement fata de 1 ridica anumite probleme, procesarile cu


numere cu semn se fac cu numere reprezentate in complement fata de 2 (C2). Calculul
complementului fata de doi, pentru un anumit numar X, reprezentat pe n biti, va fi:

[ X ]2 = 2 n X
Astfel, prin reprezentarea complementului fata de doi al unui numar, se obtine reprezentarea
binara a opusului acestui numar (deci [X]2 = - X).
Observatie: In cazul acestei reprezentari numarul x adunat cu x trebuie sa dea totdeauna 0.
Exemplu, fie X = 610 = 01102, n=4.
Calculand complementul fata de doi al acestui numar, se obtine reprezentarea pentru
-X = -610, data de

[X ]2 = 24 0110 = 10000 = 0110 = 1010


Practic, se utilizeaza urmatoarele metode, pentru obtinerea complementului fata de 2
al unui numar:
(a) se inverseaza toti bitii numarului, si se aduna 1 la cel mai putin semnificativ bit.

6/13

Aritmetica numerelor intregi

X = 0110
1001

X inversat va fi :
se aduna 1:

[X ]2 =

Re zultat :

1010

(b) se lasa neschimbate cifrele din numar pana la primul 1, inclusiv (de la dreapta la stanga),
inversandu-se celelalte cifre.

[ X ]2 = 1 0 1 0

X =0 1 1 0

___________ _______________
se inverseaza

raman nemodificate

Exemple:
|-2210| -> 00010110
-2210 -> 11101001+ C1
1
-2210 -> 11101010 C2

1410 -> 00001110


00001110 C1
00001110 C2

|-11210| -> 01110000


-11210 -> 10001111+ C1
1
-11210 -> 10010000 C2

In aceste conditii, un numar reprezentat pe un cuvant de lungime data in complement fata de


2, va avea implicit 1 bit de semn (bitul cel mai semnificativ - bitul din stanga), si
reprezentarea propriu-zisa pe ceilalti biti. Astfel,

De remarcat ca plaja valorilor astfel reprezentabile (pe un octet de la -128 la +127) este
nesimetrica.
Reprezentarea n complement fa de 2 este avantajoas deoarece simplific modul de
calcul al operaiilor aritmetice. La operaiile de adunare i scdere unitatea aritmetic nu
trebuie s in cont de semnul operanzilor, rezultatul generat fiind corect indiferent de semn.
Mai mult rezultatul este corect i n cazul n care se consider c reprezentrile sunt numere
strict pozitive. Pe baza acestei observaii se poate utiliza aceeai unitate de adunare/scdere
att pentru numere pozitive ct i pentru numere cu semn.
Exemplu:
Numere cu semn
-64+
16
-48

11000000+
00010000
11010000 ->208
00110000 -> 48

Numere fr semn
192+
16
208

La reprezentarea n complement fa de 2, dac se trece de la o reprezentare pe 8 bii la


una pe 16 bii sau mai mare atunci este necesar extinderea semnului, n aa fel nct n

7/13

Aritmetica numerelor intregi

noua reprezentare valoarea i semnul numrului s se pstreze. Regula const In copierea


valorii bitului de sem n fiecare poziie binar a poriunii extinse.
Exemple:
Valoare Reprezentare C2 pe 8 bii
-5
1 111 1011
0
0 000 0000
5
0 000 0101

Reprezentare C2 pe 16 bii
1111 1111 1111 1011
0000 0000 0000 0000
0000 0000 0000 0101

1. n tabelele urmatore sunt reprezentate, pentru metoda Compl. fa de 2 (C2), numere


ntregi cu semn pe 3 si respectiv 16 bii:
Valoare
zecimala

Reprez. pe 3 biti

011

010

001

000

-1

111

-2

Valoare zecimal

Reprezentare pe 16 biti

32767

0111111 = 7FFF16

32766

0111110 = 7FFE16

0000001 = 000116

0000000 = 000016

-1

1111111 = FFFF16

110

-3

101

-32766

1000010 = 800216

-4

100

-32767
-32768=-2

1000001 = 800116
16

1000000 = 800016

2. Considerm o reprezentare pe 16 biti. Reprezentrile pentru x = -72 prin cele trei metode se
obin dup cum urmeaz: 7210 = 10010002 =10010002
1) Semn i valoare absolut

b15
1

b0
0 0 0
1

0 0 0 0
0

0 1 0 0
4

1 0 0
8

1048H

FFB7H

FFB8H

2) Complement fa de 1

b15
1

b0
1
F

1 1 1

1
F

1 1 1

0 1 1 0 1 1
B
7

3) Complement fa de 2

b15
1

b0
1
F

1 1 1

1
F

1 1 1

0 1 1 1 0 0
B
8

8/13

Aritmetica numerelor intregi

(deoarece 11111111101101112 + 1 = 11111111101110002)

1.3.

Reprezentarea numerelor n virgul flotant

Aceast form de codificare se utilizeaz pentru reprezentarea unor valori foarte mari, foarte
mici sau dac numerele au o parte fracionar. n aceast reprezentare se folosesc 3
cmpuri:

un bit de semn indic semnul numrului

un cmp pentru exponent (caracteristic) indic magnitudinea numrului

un cmp pentru mantis indic un set de cifre semnificative ale numrului

n practic se utilizeaz 3 formate de reprezentare n virgul flotant:

simpl precizie 32 bii 1 semn + 8 caracteristic + 23 mantis

dubl precizie 64 bii 1 semn + 11 caracteristic + 52 mantis

format extins 80 bii 1 semn + 24 caracteristic + 56 mantis

Pentru reprezentarea n virgul flotant numrul este adus la o form normalizat (standard)
n care exist o parte strict subunitar (mantisa) care se nmulete cu o putere a lui 2
(exponentul). La mantis prima cifr de dup virgul este strict diferit de 0. Pentru a evita
operarea cu exponeni pozitivi i negativi se adaug la exponent jumtate din valoarea
maxim ce se poate exprima pe numrul de bii alocai pentru exponent. Astfel se obine
caracteristica, un numr strict pozitiv. De exemplu dac se aloc 8 bii pentru exponent
atunci la valoarea exponentului, care poate fi n intervalul (-128, +127), se va aduga
valoarea 128.
S

Caracteristica

Mantisa

Bitul de semn S

Caracteristica C (pe 8, 11, respectiv 15 bii, la formatul scurt, lung,


temporar)

Mantisa M (pe 23, 52, respectiv 64 bii)


Pentru fiecare reprezentare:

0 daca numarul este pozitiv


S =
1 daca numarul este negativ
Caracteristica = Exponent + 7Fh (respectiv 3FFh la IEEE lung i 3FFFh la formatul
temporar)
Pentru gsirea mantisei mai nti se normalizeaz numrul scris n baza 2, adic se scrie
numrul sub forma:

NR = 1. <cifre binare> * 2exponent


La reprezentarea n format IEEE scurt i lung, mantisa este format din cifrele
de dup virgul, deci primul 1 dinaintea virgulei nu se mai reprezint n mantis, iar
la formatul temporar se reprezint toate cifrele din numr.
Exemplu: S se reprezinte n format IEEE scurt numrul 17,6D.

9/13

Aritmetica numerelor intregi

Se va converti separat partea ntreag i cea zecimal:


Partea ntreag: 17D = 11H = 0001 0001B
Partea zecimal: 0,6D = 0,(1001)B
17,6D = 10001,(1001)B
Se normalizeaz numrul:
17,6D = 10001,(1001)B = 1,0001(1001) * 24 (n loc de 24 se mai scrie 10100(B) pentru c
notarea era in baza 2).
Se poate deduce mantisa (ceea ce este dup virgul, deci fr acel 1 dinaintea virgulei
care prin convenie nu se mai reprezint) i anume:
M = 0001(1001)(B).
Se calculeaz caracteristica:
C = exponent + 7FH = 4+7FH = 83H = 1000 0011B
Prin scriea bitului semn 0 se poate trece la scrierea reprezentrii:
0
semn

1000
0011
caract.

00011001100110011001
100
mantis

Pentru a scrie reprezentarea n hexa se vor grupa cte 4 cifre binare.


Observatie: Gruparea a cte 4 cifre nu va corespunde caracteristicii, datorit bitului de semn
care decaleaz o poziie. Deci cifrele hexa ale caracteristicii nu se vor regsi n
reprezentarea notat in hexa.

Rezultatul final al reprezentrii este: 41 8C CC CCH.


n cazul practica, n memoria calculatorului, datorit unei rotunjiri care se face la
ultimul bit al reprezentrii, se poate observa c n mantis ar mai urma un 1 dup cei 23 de
bii, iar calculatorul va face rotunjire superioar, de aceea pe ultimul bit (cel mai puin
semnificativ) va apare 1, iar reprezentarea va fi :

41 8C CC CDH.
1.4.

Coduri zecimale

Pentru anumite aplicaii este important ca datele numerice s se pstreze n form zecimal.
n acest fel pot fi evitate conversiile repetate din zecimal n binar i invers. O posibilitate este
utilizarea a 4 bii pentru a reprezenta cele 10 cifre zecimale (0, 1, ... 9). Reprezentarea
poart numele de codul BCD Binary Coded Decimal. Acest cod este asemntor cu
reprezentarea hexazecimal cu diferena c se utilizeaz numai primele 10 combinaii de bii:
010 -> 00002, 110 -> 00012, 210 -> 00102, ..... 910 -> 10012 ; celelalte combinaii sunt
nepermise (ex. 1010, ... 1111)
Daca se utilizeaza frecvent numerele in reprezentare zecimala - si corespunzator BCD, la
citirea/scrierea numerelor dinspre / spre exteriorul sistemului, implementarea operatiilor
aritmetice cu numere in reprezentare BCD nu este usor de realizat. Complicatiile pe care le
presupune implementarea acestor operatii conduc de obicei la preferarea urmatoarei
scheme de lucru: reprezentare BCD => reprezentare binara propriu-zisa => calcule
=>conversie in reprezentarea BCD a rezultatului.
Procesoarele Intel au instruciuni n limbaj de asamblare care suport operaii aritmetice n
reprezentarea BCD. Codurile cifrelor zecimale se pstreaz fie individual pe cte un octet
(forma despachetat), fie cte 2 cifre pe un octet (forma mpachetat).

10/13

Aritmetica numerelor intregi

1.4.1. Reprezentarea numerelor n BCD mpachetat i despachetat


n reprezentarea BCD mpachetat se reprezint cte o cifr zecimal pe 4 bii, deci cte 2
cifre zecimale pe octet.
n reprezentarea BCD despachetat se reprezint cte o cifr zecimal pe octet (deci pe
primii patru bii se pune 0).
Aceste moduri de reprezentare se folosesc i pentru o mai bun lizibilitate a numerelor din
punct de vedere al programatorului, chiar dac aceasta se face prin pierderea unei bune
poriuni din spaiul de reprezentare (la BCD despachetat nu se mai folosesc codurile pe patru
bii care trec ca valoare de 9, iar la BCD despachetat se mai pierde nc jumtate de octet n
plus.
Pentru a putea realiza operaii cu numere reprezentate n BCD exist instruciuni
suplimentare de corecie a rezultatului dup adunare, nmulire care se vor studia n lucrarea
cu instruciuni pentru operaii aritmetice.

Exemplu:
Numrul 3912D se va reprezenta n BCD
mpachetat: 39 12H deci pe 2 octei;
despachetat 03 09 01 02H deci pe 4 octei.
1.4.1.1.

Operaii n BCD despachetat

Setul de instruciuni cuprinde 4 instruciuni de corecie zecimal:

AAA - corecie zecimal dup adunare,

AAS - corecie zecimal dup scdere,

AAM - corecie zecimal dup nmulire,

AAD - corecie zecimal nainte de mprire,

care permit efectuarea operaiilor aritmetice n BCD despachetat.


n acest scop se folosesc instruciunile aritmetice clasice, urmate (precedate) de cte o
instruciune de corecie a rezultatului. Operaiile aritmetice trebuie efectuate la nivel de octet
astfel nct rezultatul s se gseasc ntotdeauna n registrul AL, asupra cruia acioneaz
instruciunile de corecie. Dac o operaie asupra a doi operanzi pe un digit produce un
rezultat reprezentabil pe 2 digii, instruciunea de corecie va plasa digitul cel mai puin
semnificativ n al iar pe cel mai semnificativ n ah, distrugnd coninutul acestui registru.
Dac digitul din al genereaz transport spre ah sau necesit un mprumut de la ah se
poziioneaz indicatorii CF i AF.

Exemplu:
; Adunare n BCD despachetat
MOV AX,8
; ncrcare ax
MOV BX,5
; ncrcare bx
ADD AL, BL
; adunare
AAA
; corecie zecimal
; la adunare
; se poziioneaz AF i CF
; Scdere n BCD despachetat
MOV AX, 0103H
; ncrcare ax
MOV BX, 4
; ncrcare bx

11/13

0008H
0005H
000dH
AX=0103H

0103H
0004H

Aritmetica numerelor intregi

SUB AL, BL
AAS

; scdere
; corecie zecimal
; la scdere
; se poziioneaz AF i CF
; nmulire n BCD despachetat
MOV AX, 0903H
; ncrcare ax
MUL AH
; nmulire fr semn
AAM
; corecie zecimal dup nmulire
; mprire n BCD despachetat
MOV AX, 0209H
; ncrcare n ax
MOV BL, 2
; ncrcare bl
AAD
; corecie zecimal nainte
; de mprire
DIV BL
; mprire fr semn
; ctul n al
; restul n ah
AAM
; corecie zecimal dup
; mprire a ctului
; restul s-a pierdut

01feH
AX=0009H

0903H
001bH
AX=0207H
0209H
02H
AX=0019H
010cH
0cH
01H
AX=0102H

Se observ pierderea restului. Dac avem nevoie de el, restul trebuie salvat n alt
registru nainte de a efectua corecia ctului. Este posibil i corecia restului. Pentru aceasta
el trebuie transferat n AL.

1.4.1.2.

Operaii n BCD mpachetat

Setul de instruciuni cuprinde dou instruciuni de corecie zecimal:

DAA - corecie zecimal dup adunare,

DAS - corecie zecimal dup scdere,

care permit efectuarea operaiilor de adunare i scdere n BCD mpachetat.


Operaiile aritmetice trebuie efectuate la nivel de octet astfel nct rezultatul s se
gseasc n AL. Instruciunile de corecie zecimal pentru operaii n BCD mpachetat nu
afecteaz niciodat registrul AH. Indicatorul AF se poziioneaz n cazul unui transport sau
mprumut de la digitul cel mai puin semnificativ la digitul cel mai semnificativ. Indicatorul CF
se poziioneaz n cazul unui transport sau mprumut spre exterior.

Exemplu:
; Adunarea n BCD mpachetat
MOV AX, 9933H
; ncrcare ax
ADD AL, AH
; adunare la al
DAA
; corecie zecimal
; dup adunare
; se poziioneaz CF
; Scderea n BCD mpachetat
MOV AX, 3883H
; ncrcare ax
SUB AL, AH
; scdere
DAS
; corecie zecimal
; dup scdere
; indicatorul CF este 0

12/13

9933H
AL=ccH
AL=32H

3883H
AL=4bH
AL=45H

Aritmetica numerelor intregi

2. Coduri alfanumerice
Multimea informatiilor primare, in cazul cazul acestor coduri, este formata din cifre, litere,
semne ortogafice, comenzi speciale, denumite in general caractere.
Codificarea este datelor alfanumerice este necesara pentru vehicularea diferitelor mesaje.
Trebuie codificate minim 88 caractere distincte (2x6 litere, 10 ciftrem 26 de caractere
speciale), deci sunt necesari minimum 7 biti.
Cel mai raspandit cod alfanumeric este codul ASCII (American Standard Code for
Information Interchange). Codul ASCII codifica 128 de caracere (cele 52 de liere, majuscule
si minuscule, ale alfabetului englez, cele 10 cifre zecimale, caractere speciale si caractere de
comanda). Datorita succesiunii caracterelor majuscule si minuscule, poate fi utilizat pentru
ordonari alfabetice.

Exemplu:
Caracterul ? in ASCII are codul 3F.

3. Aplicatii
1. S se converteasc urmtoarele din baza 2 n baza 10 i 16:
1111.0000.1111, 101.111011,

110011.11

2. S se reprezinte pe 4 octei urmtoarele numere: 157, 169, -157, -169.


3. Se vor reprezenta numere pozitive i negative n complement fa de 1 (C1) i
complement fa de 2 (C2); se vor comenta avantajele i dezavantajele celor 2
variante de reprezentare. S se reprezinte urmtoarele numere pe 8 bii:
0, 13, -100, -44, -1, -130
4. S se reprezinte n format IEEE scurt numrul 23,5D.
5. Se d reprezentarea 43 04 33 33H i se cere valoarea zecimal a numrului

real reprezentat.
6. S se citeasca dou numere ntregi a,b de la tastatura. S se adune numerele a+b i
s se afieze rezultatul n variabila c. Se vor afia cele trei numere.
Se va rula programul in modul de lucru pas cu pas, se vor vizualiza varabilele
programului i registrele CPU, (modul de lucru pas cu pas este necesar in vederea
depanarii pogramului).
Observatie: In meniul principal al mediului de programare Borland C:
-

Window I Register vizualizarea registrilor CPU si indicatorilor de conditie

Debug

I Watches I Add watches urmarirea variabilelor programului


I Toggles breakpoint

7. S se citeasca dou numere intregi a,b de la tastatura. S se adune numerele a+b.


Dac rezultatul este mai mic decat -32768 se va limita la valoarea -32768, iar dac
rezultatul este mai mare decat +32767 se va limita la valoarea +32767. S se afieze
rezultatul n variabila c. Se vor afia cele trei numere.

13/13

Vous aimerez peut-être aussi