0% au considerat acest document util (0 voturi)
98 vizualizări104 pagini

AC4

Documentul descrie operațiile aritmetice în calculatoarele numerice, în special adunarea, scăderea, înmulțirea și împărțirea în virgulă fixă și mobilă. Sunt prezentate mai multe metode pentru fiecare operație, cum ar fi adunarea și scăderea în cod direct, invers și complementar. Pentru înmulțire se descriu metoda directă, metoda Booth și înmulțirea în complement față de 2. Pentru împărțire sunt prezentate metoda comparației și metodele cu și fără refacerea restului parțial.

Încărcat de

Constantin Laura
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PPT, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
98 vizualizări104 pagini

AC4

Documentul descrie operațiile aritmetice în calculatoarele numerice, în special adunarea, scăderea, înmulțirea și împărțirea în virgulă fixă și mobilă. Sunt prezentate mai multe metode pentru fiecare operație, cum ar fi adunarea și scăderea în cod direct, invers și complementar. Pentru înmulțire se descriu metoda directă, metoda Booth și înmulțirea în complement față de 2. Pentru împărțire sunt prezentate metoda comparației și metodele cu și fără refacerea restului parțial.

Încărcat de

Constantin Laura
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PPT, PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 104

OPERAII ARITMETICE

N CALCULATOARELE
NUMERICE

4. OPERAII ARITMETICE N CALCULATOARELE NUMERICE


4.1 Operaii aritmetice n virgul fix
4.1.1 Adunarea i scderea n virgul fix
Adunarea i scderea n cod direct
Adunarea i scderea n cod invers
Adunarea i scderea n cod complementar
4.1.2 nmulirea n virgul fix
nmulirea direct
nmulirea prin metoda BOOTH
nmulirea n complement fa de 2
4.1.3 mprirea n virgul fix
mprirea n virgul fix prin metoda comparaiei
Metoda de mprire cu refacerea restului parial
Metoda de mprire fr refacerea restului parial
4.2 Operaii aritmetice n virgul mobil
4.2.1 Adunarea i scderea n virgul mobil
4.2.2 nmulirea n virgul mobil
4.2.3 mprirea n virgul mobil

4.1 Operaii aritmetice n virgul fix


4.1.1 Adunarea i scderea n virgul fix
Adunarea i scderea n cod direct
In cazul operatiilor in cod direct se trateaza separat semnele si separat
modulele operanzilor. Se considera operatia x op y = z, unde se codifica cu
op operatia de realizat, 0 pentru adunare si 1 pentru scadere. Operatia
finala de efectuat intre modulele celor doi operanzi este data de relatia :

unde xs si ys sunt bitii de semn ai celor doi operanzi. Aceasta relatie poate fi
obtinuta daca se studiaza toate cele opt combinatii posibile la adunarea /
scaderea a doua numere pozitive / negative. Se disting doua cazuri:

1) opfin = 0. In acest caz se aduna modulele celor doi operanzi,


iar semnul rezultatului este dat de semnul primului operand. Este necesar
sa se verifice ca la adunarea modulelor nu rezulta un transport de la
rangul cel mai semnificativ (c.m.s.), o astfel de situatie insemnand
depasire, deci rezultatul obtinut nu este corect (rezultatul este prea mare
in modul pentru a se putea reprezenta pe lungimea respectiva de biti).

Exemplu. Sa se efectueze operatia x-y=z, unde x = 11, y = -14, pe 6


biti (in continuarea exemplele vor fi de asemenea cu numere reprezentate in
virgula fixa, pe 6 biti si nu se va mai preciza acest lucru).
[x]d = 001011
[y]d = 101110
Se calculeaza
(s-a considerat op=1, pentru scadere). Semnul rezultatului este zs=xs=0, iar
modulul se calculeaza:
|x|+
|y|

|z|

=>

01011+
01110

11001

deci, s-a obtinut [z]d = 011001 (z = 25).

2) opfin = 1. In acest caz se scade modulul operandului mai mic din


modulul operandului mai mare, iar semnul rezultatului este dat de
semnul operandului mai mare in modul. Exceptie: in cazul op = 1
(scadere) si |y|>|x|, semnul rezultatului este

Exemplu. Sa se efectueze operatia x+y=z, unde x = -29, y = 17.


[x]d = 111101
[y]d = 010001
Se calculeaza

(s-a considerat op=0, pentru adunare). Deoarece |x|>|y|, semnul rezultatului


este zs=xs=1, iar modulul se calculeaza:
|x||y|

|z|

=>

1110110001

01100

deci, s-a obtinut [z]c = 101100 (z = -12 ).

xs

OP1

ys

OP2

COMPARATOR
0 OP1<=OP2
1 OP1> OP2

1 0
MUX

SLC

0
s

1
MUX

0/1 Suma / Scadere


SUMATOR/SCAZATOR

So

Unitate aritmetic pentru adunare/scadere n cod direct

Adunarea si scaderea in cod invers


Adunarea si scaderea in cod invers se reduc la operatia de
adunare (in cazul operatiei de scadere, se aduna la descazut opusul
scazatorului). Operanzii se prelucreaza impreuna cu semnele lor. Astfel, se
aduna cei doi operanzi bit cu bit, inclusiv bitii de semn, iar eventualul
transport care rezulta de la rangul de semn se aduna in rangul c.m.p.s
(reprezinta o corectie) si se obtine rezultatul corect in cod invers. Se disting
urmatoarele cazuri:

1) x>0, y>0, x+y<2n-1 (pentru a nu avea depasire). Operatia de


adunare este asemanatoare cu cea din cod direct, dar in plus se aduna si
bitii de semn (0+0).
[x]i+[y]i = |x|+|y| = (pentru ca operanzii au acelasi semn)
= |x+y| = [x+y]i

2) x>0, y<0, |x|>|y|. La adunare apare un transport de la rangul de


semn, care se aduna in rangul c.m.p.s. (corectie).
[x]i+[y]i = |x|+2n -1- |y| = (2n si -1 se reduc, corectie)
= |x|-|y| = (semne diferite si |x|>|y|)
= |x+y| = [x+y]i
Exemplu. Sa se efectueze operatia x + y = z, unde x = 25, y = -9, in
cod invers.
[x]i = 011001
[y]d = 101001
=>
[y]i = 110110
[x]i+
[y]i

[z]i

Deci, [z]i = 010000 (z = 16).

011001+
110110

1<-001111+
1

010000

3) x>0, y<0, |x|<|y|. La adunare nu apare transport de la rangul de


semn.
[x]i+[y]i = |x|+2n -1- |y| = 2n -1-(|y|-|x|) = (semne diferite si |x|<|y|)
= 2n -1-|y+x| = (x+y este negativ)
= [x+y]i
Exemplu. Se efectueaza operatia x + y = z, unde x = 5, y = -29, in cod
invers.
[x]i = 000101
[y]d = 111101
[x]i+
[y]i

[z]i

=>

[y]i = 100010
000101+
100010

100111

Deci, [z]i = 100111, [z]d = 111000 (z = -24).

4) x<0, y<0, |x+y|<2n-1. La adunare apare un transport de la rangul de


semn, care se aduna in rangul c.m.p.s. (corectie).
[x]i+[y]i = 2n -1- |x|+2n -1- |y| = (2n si -1 se reduc, corectie)
=2n -1- |x| - |y| = (x si y au acelasi semn)
= 2n -1- |x+y| = (x + y este negativ)
= [x+y]i
Exemplu. Se efectueaza operatia x + y = z, unde x = -11, y = -19, in
cod invers.
[x]d = 101011
=>
[x]i = 110100
[y]d = 110011
=>
[y]i = 101100
[x]i+
[y]i

[z]i

110100+
101100

1<-100000+
1

100001

OP1

OP2

0
MUX

ADD
C out

C in

Unitatea aritmetic logic pentru


adunare/scdere n cod invers

SO

Adunarea si scaderea in cod complementar


Adunarea si scaderea in cod complementar se reduc la operatia
de adunare (in cazul operatiei de scadere, se aduna la descazut opusul
scazatorului). Operanzii se prelucreaza impreuna cu semnele lor. Se
aduna cei doi operanzi bit cu bit, inclusiv bitii de semn, iar eventualul
transport care rezulta de la rangul de semn se neglijeaza (reprezinta o
corectie) si se obtine rezultatul corect in cod complementar. Se observa
urmatoarele cazuri:

1) x>0, y>0, x+y<2n-1 (pentru a nu avea depasire). Operatia de


adunare este asemanatoare cu cea din cod direct, dar in plus se aduna
si bitii de semn (0+0).
[x]c+[y]c = |x|+|y| = (pentru ca operanzii au acelasi semn)
= |x+y| = [x+y]c

2) x>0, y<0, |x|>|y|. La adunare apare un transport de la rangul de


semn, care se neglijeaza (corectie).
[x]c+[y]c = |x|+2n - |y| = (2n se neglijeaza, corectie)
= |x|-|y| = (semne diferite si |x|>|y|)
= |x+y| = [x+y]c
Exemplu. Se efectueaza operatia x + y = z, unde x = 22, y = -18, in cod
complementar.
[x]c = 010110
[y]d = 110010
[x]c+
[y]c

[z]c
Deci, [z]c = 000100 (z = 4).

=>

[y]c = 101110

010110+
101110

1<-000100

3) x>0, y<0, |x|<|y|. La adunare nu apare transport de la rangul de


semn.
[x]c+[y]c = |x|+2n - |y| = 2n -(|y|-|x|) = (semne diferite si |x|<|y|)
= 2n -|y+x| = (x+y este negativ)
= [x+y]c
Exemplu. Se efectueaza operatia x + y = z, unde x = 20, y = -28, in cod
complementar.
[x]c = 010100
[y]d = 111100
[x]c+
[y]c

[z]c

=>

[y]c = 100100
010100+
100100

111000

Deci, [z]c = 111000, [z]d = 101000 (z = -8).

4) x<0, y<0, |x+y|<2n-1. La adunare apare un transport de la rangul de


semn, care se neglijeaza (corectie).
[x]c+[y]c = 2n - |x|+2n - |y| = (2n se neglijeaza, corectie)
=2n - |x| - |y| = (x si y au acelasi semn)
= 2n - |x+y| = (x + y este negativ)
= [x+y]c
Exemplu. Se efectueaza operatia x + y = z, unde x = -4, y = -13, in cod
complementar.
[x]d = 100100
[y]d = 101101
[x]c+
[y]c

[z]c

=>
=>

[x]c = 111100
[y]c = 110011

111100+
110011

1<-101111

Deci, [z] = 101111, [z] = 110001 (z = -17).

OP1

OP2

0
MUX

1
s

SO

ADD

Unitate aritmetic pentru adunare/scdere


n cod complementar

Indicatorii de condiii asociai unitii de adunare scdere cu numere


reprezentate n complement fa de doi:

S semn, reprezint valoarea bitului de semn al rezultatului.


Z zero, este poziionat n unu dac rezulatul este zero, i este poziionat n
zero cnd rezultatul este diferit de zero:

Z /REZULTAT
D depire, este poziionat n unu, cnd cele dou numere care se adun
sunt pozitive i exist transport spre bitul de semn, sau dac operanzii sunt
negativi i nu exist transport spre bitul de semn.
Considernd xs, ys semnele celor doi operanzi i ts transportul spre bitul de
semn, care atunci cnd apare modific pe zs, semnul rezultatului astfel c
D x s ys z s x s ys z s
valoarea lui D se stabilete cu ecuaia:
T transport, se poziioneaz pe 1 n cazul n care exist un transport din bitul
de semn spre stnga.
P paritate, se poziioneaz pe 1 n cazul n care rezulatul are un numr par de
uniti.

Pentru realizarea operaiei de nmulire cele mai utilizate metode se bazeaz


pe adunarea repetat. Exist o serie de algoritmi care au la baz adunarea
repetat dintre care cei mai cunoscui sunt:
nmulirea direct;
metoda von Newmann;
metodele lui Robertson;
metoda Booth;
nmulirea n complement fa de 2;
metoda nmulirii scurte;
nmulirea rapid cu salvarea transportului;

2.4 Inmultirea directa


x y = z
Etape:
1) Determinarea semnului rezultatului:

z s xs y s

2) Calcularea modulului rezultatului:


a) Numere intregi.
n2

n2

k 0

k 0

x y x yk 2 k

0
x yk 2
k
x

x yk 2 k

daca yk 0
daca yk 1

|x|2k ~ |x| deplasat spre stanga k pozitii.

b) Numere
subunitare.
n 1

x y x y k 2

k 1

x y k 2

k
x

n 1

x y k 2 k
k 1

daca yk 0
daca yk 1

|x|2-k ~ |x| deplasat spre dreapta k pozitii.

3) Trunchierea si rotunjirea rezultatului (numai pentru numere


subunitare).

Exemplu: x y = z in virgula fixa, x =20/32 si y = -19/32.


[x] = 0.10100
[y] = 1.10011
Etape:
1) Semnul rezultatului:

z s xs y s 0 1 1

2) Modulul rezultatului:
|z| = |x| |y|

.10100
.10011

.0000010100+
.0000101000
.0000000000
.0000000000
.0101000000

.0101111100

|x|y-52-5=|x|2-5
|x|y-42-4=|x|2-4
|x|y-32-3=0
|x|y-22-2=0
|x|y-12-1=|x|2-1

Rezultat exact!
=> [z] = 1.0101111100
z = - (02-1+12-2+02-3+12-4+12-5+12-6+12-7+12-8+02-9+02-10 ) =
= - (029+128+027+126+125+124+123+122+021+020)/210 =
= - (256+64+32+16+8+4)/1024 = - 380/1024
(corect !)

3) Trunchiere si rotunjire:
.01011 11100

.01011+
1

.01100
Rezultatul aproximativ [z] = 1.01100 => z = -12/32 (s-a obtinut rezultatul -0.375,
fata de cel exact 0.37109375).

OP1

OP2

MD

0 1

AC

ADD

NB

Unitate de comanda

MD registrul ce pstreaz
primul
operand
(OP1) n cod direct
Unitate
aritmetic
pentru nmulire
MQ registrul ce pstreaz al doilea operand (OP2)
AC registrul ACUMULATOR ce pstreaz produsul parial
NB registrul ce contorizeaz numrul de bii

n
MQ

Algoritmul de nmulire n cod direct este urmtorul:


1. se
se
se
se

citete denmulitul n registrul MD;


citete nmulitorul n registrul MQ;
iniializeaz registrul acumulator AC 0;
iniializeaz registrul contor de bii NB 0;

2. dac MD=0 sau MQ=0


atunci rezultat 0 , gata operaie;
3. att timp ct NB < n
dac MQn = 1 atunci AC AC + MD;
deplaseaz dreapta cu o poziie AC, MQ;
incrementeaz NB;
4. stabilire semn :ACs = MDs MQs ;

MD
= 5/16 denmulitul reprezentat n cod direct pe 5 bii
= 10101
MQNB

MD

AC

MQ

Observaii:

1
1
bitul de semn nu particip
= 6/16
nmulitorul
cod direct
pe 5 bii
000 0101
00000reprezentat
0110
0ndeplasare
AC,MQ
001

0101

00000
00101
00101

0011

1 adunare AC AC + MD
deplasare AC,MQ

010

0101

00010
00101
00111

1001

1 adunare AC AC + MD
deplasare AC,MQ

011

0101

00011

1100

0 deplasare AC,MQ

100

0101

00001

1110

00001

1110

stabilire semn AC0=MD0 MQ0


Rezultatul se obine n AC,MQ
AC,MQ = 000011110= 30/256

nmulirea prin metoda BOOTH


Pentru a realiza operaia de nmulire a unor numere reprezentate n
complement fa de 2, prin adunri repetate, este necesar s evalum
nmulitorul. Evaluarea nmulitorului reprezentat n complement fa de 2 se
realizeaz utiliznd formula lui Booth.
Dac
y = ysy1y2...yn este un numr n complement fa de 2 valoarea reprezentat
de acest numr este:
n

Vy - y s y i * 2 -i
i 1

formula lui Booth

dou numere n virgul fix, subunitare, reprezentate n cod complementar.


Pentru a realiza z = x * y este acelai lucru cu a realiza z = x * V y
Booth a propus ca cifrele de reprezentare ale nmulitorului, n cod complementar, s se
nlocuiasc cu diferena a dou cifre adiacente:
y j y j 1 y j 1 j n
unde yn1 se consider 0.

n acest caz:
z = x * ((y1ys)+(y2y1)*21+(y3y2)*22+...+(yn1yn)*2n)
z = x * (ys + y1*21 + y2*22 +...+yn*2n)
z=x*V

Astfel dac
y j

yj1

se deplaseaz produsul parial cu o poziie la dreapta;

se adun denmulitul la produsul parial i apoi se


deplaseaz rezultatul cu o poziie la dreapta;

se scade denmulitul din produsul parial i apoi se


deplaseaz rezultatul cu o poziie la dreapta;

se deplaseaz produsul parial cu o poziie la dreapta;

Dup ultima operaie, n care particip i bitul de semn, nu se mai efectueaz operaia de
deplasare.

OP1

OP2
n+1

n+1
0

MD

n
AC

0 1

n n+1
MQ

ADD

m
NB

Unitate de comanda

Unitate aritmetic pentru nmulire prin metoda Booth

MD registrul ce pstreaz primul operand (OP1)

MQ registrul ce pstreaz al doilea operand (OP2)


AC registrul ACUMULATOR ce pstreaz produsul parial
NB registrul ce contorizeaz numrul de bii

Algoritmul de nmulire prin metoda Booth este urmtorul:


1. se citete denmulitul n registrul MD;
se citete nmulitorul n registrul MQ;
se iniializeaz registrul acumulator AC 0;
se iniializeaz registrul contor de bii NB 0;
se iniializeaz bitul MQn+1 0 ;
2. dac MD=0 sau MQ=0
atunci rezultat 0 , gata operaie;
3. att timp ct NB < n + 1
dac MQn,MQn+1 = 01 atunci AC AC + MD;
dac MQn,MQn+1 = 10 atunci AC AC MD;
deplaseaz dreapta cu o poziie AC,MQ;
incrementeaz NB;
4. dup ultima operaie nu este necesar deplasarea

Exemplu:
S considerm operanzii :
MD = 5/16 reprezentat n cod complementar pe 5 bii 11011
MQ = 6/16 reprezentat n cod complementar pe 5 bii 11010

nmulirea n complement fa de 2
n cazul numerelor reprezentate n cod complementar utilizarea nmulirii directe necesit
cicli suplimentari pentru procesul de complementare.
Fie :
x = xsx1x2...xn
y = ysy1y2...yn
dou numere n virgul fix, subunitare, reprezentate n cod complementar.
Pentru realizarea nmulirii trebuie ca denmulitul s fie adunat cu el nsui de un numr
de ori dat de valoarea lui y. Practic trebuie calculat |y| i dup aceea trebuie adunat sau
sczut de |y| ori denmulitul cu el nsui n funcie de semnul lui y, dac este pozitiv sau
negativ.

direct, numai c n loc s complementm operanzii nainte de efectuarea operaiei, vom


complementa numai nmulitorul simultan cu examinarea biilor acestuia.
Realizarea complementului nmulitorului se face pe baza regulii: se parcurg de la dreapta la
stnga biii acestuia (de la bitul cmps la bitul cms), zerourile i prima unitate ntlnite rmn
neschimbate, restul biilor se neag.
Amintind c la operaia de nmulire n cod direct analiza biilor se fcea ncepnd cu bitul cmps,
i dac bitul era 1 se realiza adunarea denmulitului la produsul parial i deplasarea produsului
parial, iar dac bitul era egal cu 0 se realiza numai deplasarea produsului parial.
n cazul nmulirii n cod complementar se aplic aceeai regul ca la cod direct pn la ntlnirea
primei uniti, dup care se interpreteaz biii invers ca la metoda n cod direct. n acest fel se
realizeaz din "mers" complementarea nmulitorului.

Pentru realizarea unui dispozitiv aritmetic paralel care efectueaz nmulirea a doi operanzi
reprezentai n virgul fix, cod complementar prin metoda nmulirii n complement fa de 2 se
propune schema bloc din figura urmatoare:

OP1

OP2

MD

n
AC

0 1

n
MQ

ADD

NB

Unitate de comanda

Unitate aritmetic pentru nmulire n cod complementar


MD registrul ce pstreaz primul operand (OP1)
MQ registrul ce pstreaz al doilea operand (OP2)
AC registrul ACUMULATOR ce pstreaz produsul parial
NB registrul ce contorizeaz numrul de bii

Metode pricipale:
metoda comparaiei;
metoda refacerii restului parial (metoda regenerrii);
metoda n care nu se reface restul parial.
Metodele comparaiei i regenerrii se aplic numai numerelor reprezentate n cod direct iar
ultima metod se aplic oricrei forme de reprezentare necesitnd totui nite corecii.
n cazul mpririi apar dou probleme:
abandonarea efecturii operaiei de mprire dac mpritorul este egal cu 0, sau dac
dempritul este mai mare dect mpritorul, pentru reprezentare n virgul fix, numere
subunitare sau dac dempritul este mai mic dect mpritorul, pentru reprezentare n virgul
fix, numere ntregi;

mprirea n virgul fix prin metoda comparaiei


Numere subunitare !
Se trateaza separat semnele si separat modulele operanzilor.
Conditie: deimpartitul < impartitorul.
x : y => catul q si restul r.
(cei n-1 biti ai modulului fiecarui operand se noteaza cu indici negativi 1, 2, 3, ... m
(m = n1), pentru ai pune in corespondenta cu puterile negative ale bazei 2 reprezentand
ponderile).
Algoritmul:

citeste x,y
daca |x| |y| atunci

scrie Eroare!
altfel

qs = xs ys

rs = xs

|r| =|x| //initializare rest partial

pentru i=1,m executa

|r| = |r|2 //deplaseaza o pozitie stanga

daca |r| |y| atunci

q-i = 1 //bitul curent al catului

|r| = |r| - |y|

altfel

q-i = 0 //bitul curent al catului

|r| = |r|
|r| = |r|2-m //rest final
scrie q, r

Corectie: restul x 2-m. Justificare (r(k) restul partial la pasul k):


|r(0)| = |x|
|r(1)| = 2|r(0)| - q-1|y|
|r(2)| = 2|r(1)| - q-2|y|
........
|r(m)| = 2|r(m-1)| - q-m|y|
unde

q k

daca 2 r

( k 1)

y
altfel

In ultima relatie de mai sus se inmultesc ambii membri cu 2 -m, inlocuindu-se


succesiv fiecare r(k) din relatia precedenta in functie de r(k-1).
2-m|r(m)|=
=-2-mq-m|y|+2-m2(2...(2|x|-q-1|y|)...-q-m+1|y|)=
=2-m2m|x|-|y|(q-12-1+q-22-2+...+q-m2-m)=
=|x|-|y||q|
=>
|x| = |y||q| + 2-m|r(m)|
rest corect 2-m|r(m)|.

Exemplu. x : y, x = 20/32 si y = 25/32.

[x] = 0.10100
[y] = 0.11001
Impartirea se executa in cinci (n-1) pasi (1,2,...5):

Pas |y|
|r(k)|
q

0
.11001
.10100
|r(0)|<|y| => OK!

1
.11001
1.01000|r(1)||y| => q-1=1
.11001

.01111

2
.11001
.11110|r(2)||y| => q-2=1
.11001

.00101

3
.11001
.01010
|r(3)|<|y| => q-3=0

4
.11001
.10100
|r(4)|<|y| => q-4=0

5
.11001
1.01000|r(5)||y| => q-5=1
.11001

=>
[q] = 0.11001 (q = 25/32) si [r] = 0.0000001111 (r = 15/1024).
Verificare: x = q y + r (20/32 = 25/32 25/32 + 15/1024).

OP1

OP2

MD

0 1

AC

n
MQ

COMPARATOR

ADD

MD

NB

Unitate de comanda

Unitate aritmetic pentru mprire prin metoda comparaiei


registrul ce pstreaz mpritorul
MQ
registrul ce pstreaz ctul
AC
registrul ACUMULATOR ce pstreaz iniial dempritul i restul parial curent

Algoritmul de mprire prin metoda comparaiei este urmtorul:


1. se citete mpritorul n registrul MD;
se citete dempritul n registrul AC;
se ncarc eventual registrul MQ cu extensia dempritului dac acesta este pe lungime dubl;
se iniializeaz registrul contor de bii NB 0;
Bitul de semn al operanzilor nu particip dect la stabilirea semnului.
2. dac MD = 0
atunci mprire prin zero, gata operaie.
dac AC MD
atunci depire, gata operaie
dac AC = 0 i MQ MD
atunci rezultat zero, gata operaie.

3. deplaseaz AC,MQ la stnga cu o poziie cu introducere MQn 0


AC,MQ 2(AC,MQ),0
4. att timp ct NB < n
dac AC MD
atunci AC AC MD
AC,MQ 2(AC,MQ),1 deplaseaz cu introducere 1
altfel AC,MQ 2(AC,MQ),0 deplaseaz cu introducere 0
incrementeaz contorul de bii NB INC(NB)
5. stabilete semn rezultat MQs = ACs MDs
Se obine n registrul MQ ctul mpririi iar n registrul AC restul.

Metoda de mprire cu refacerea restului parial


Aceast metod poate fi considerat ca un caz special al metodei comparaiei. Compararea se
poate face prin scdere.
Dac diferena este pozitiv (echivalent cu faptul c restul parial este mai mare dect
mpritorul) se obine drept cifr a ctului 1 i procesul continu cu o deplasare la stnga cu o
poziie.
Dac diferena este negativ (echivalent cu faptul c restul parial este mai mic dect
mpritorul) se obine drept cifr a ctului 0. Deoarece n acest caz nu trebuia s scdem
mpritorul din restul parial, trebuie s procedm la refacerea restului parial prin adunarea
mpritorului la acesta.

OP1

OP2

MD

0 1

AC

n
MQ

ADD

NB

Unitate de comanda

MD registrul ce pstreaz mpritorul

Unitate aritmetic pentru mprire prin metoda refacerii

MQ registrul ce pstreaz ctul


AC registrul ACUMULATOR ce pstreaz iniial dempritul i restul parial curent
NB registrul ce contorizeaz numrul de bii

Algoritmul de mprire prin metoda refacerii restului parial este urmtorul:


1. se citete mpritorul n registrul MD;
se citete dempritul n registrul AC;
se ncarc eventual registrul MQ cu extensia dempritului dac acesta este pe lungime dubl;
se iniializeaz registrul contor de bii NB 0;
bitul de semn al operanzilor nu particip dect la stabilirea semnului
2. dac MD = 0
atunci mprire prin zero, gata operaie.
dac AC MD
atunci depire, gata operaie
dac AC = 0 i MQ MD
atunci rezultat zero, gata operaie.

3. deplaseaz AC,MQ la stnga cu o poziie cu introducere MQn 0


AC,MQ 2(AC,MQ),0
4. att timp ct NB < n
AC AC MD
dac rezultat pozitiv
atunci AC,MQ 2(AC,MQ),1 deplaseaz cu introducere 1
altfel AC AC + MD reface restul parial
AC,MQ 2(AC,MQ),0 deplaseaz cu introducere 0
incrementeaz contorul de bii NB INC(NB)
5. stabilete semn rezultat MQs = ACs MDs
Se obine n registrul MQ ctul mpririi iar n registrul AC restul.

S considerm:
AC
= 5/16 dempritul reprezentat n cod direct pe 5 bii

= 10101
MD
= 6/16 mpritorul reprezentat n cod direct pe 5 bii
= 10110

Verificare:
AC/MD = 01101 rest 00000010
Se observ c se respecta relaia fundamental a mpririi:
|x| = |y| * |q| +

0.0101 = 0.0110 * 0.1101 + 0.00000010


Metoda mpririi prin refacerea restului parial elimin comparatorul, n schimb necesit un timp
destul de lung datorit procesului de refacere a restului parial.

Metoda de mprire fr refacerea restului parial


Analiznd metoda refacerii restului parial se observ c fiecare operaie de refacere a restului
parial este urmat de o scdere a mpritorului n ciclul urmtor.
Ultimele dou operaii adunarea mpritorului ( operaia de refacere) i scderea (la ciclul
urmtor) mpritorului din restul parial deplasat la stnga cu o poziie, pot fi combinate ntr o
singur operaie de adunare a mpritorului la ciclul urmtor (n loc de scdere)
2*(ri + |y|) -|y| echivalent cu 2*ri + |y|
Metoda de mprire n care restul parial nu se reface const n a scdea sau aduna mpritorul
din restul parial curent n funcie de semnele mpritorului i restului parial.
Dac aceste semne sunt identice se efectueaz o scdere i se introduce drept cifr a ctului
valoarea 1, iar dac semnele sunt diferite se face o adunare i se ia ca cifr a ctului valoarea 0.

Algoritmul de mprire prin metoda fara refacerea restului parial este urmtorul:
1. se citete mpritorul n registrul MD;
se citete dempritul n registrul AC;
se ncarc eventual registrul MQ cu extensia dempritului dac acesta este pe lungime dubl;
se iniializeaz registrul contor de bii NB 0;
2. dac MD = 0
atunci mprire prin zero, gata operaie.
dac AC MD
atunci depire, gata operaie
dac AC = 0 i MQ MD
atunci rezultat zero, gata operaie.
3. deplaseaz AC,MQ la stnga cu o poziie cu introducere MQn 0
AC,MQ 2(AC,MQ),0

4. att timp ct NB < n


dac ACs MDs = 0
atunci AC AC MD
AC,MQ 2(AC,MQ),1 deplaseaz cu introducere 1
altfel AC AC + MD
AC,MQ 2(AC,MQ),0 deplaseaz cu introducere 0
incrementeaz contorul de bii NB INC(NB)
5. Dac operanzii sunt reprezentai n alt cod dect cod direct se face o corecie.
stabilete semn rezultat MQs = ACs MDs
Se obine n registrul MQ ctul mpririi iar n registrul AC restul.

Exemplu:
S considerm:
AC
= 5/16 dempritul reprezentat n cod complementar pe 5 bii

= 11011
MD
= 6/16 mpritorul reprezentat n cod complementar pe 5 bii
= 11010

Verificare:
AC/MD = 01101 rest 11111110
Se observ c se respect relaia fundamental a mpririi:
|x| = |y| * |q| +

1.1011 = 1.1010 * 0.1101 + 1.11111110


n exemplele artate sa considerat efectuarea efectiv a operaiei de scdere, adunare,
specificnd numai rezultatul.
n cazul n care biii reprezentrii particip direct la operaia de nmulire prin metoda fr
refacerea restului parial este necesar o corecie care const n a aduna 1 + 2 n.

4.2 Operaii aritmetice n virgul mobil


Reprezentarea numerelor in virgula mobila

-s bitul de semn al numarului (s=0 numar pozitiv si s=1 numar negativ);


-m mantisa numarului (cifrele semnificative);
-e exponentul (puterea la care trebuie ridicata o valoare numita baza si care
inmulteste cifrele semnificative ale numarului).
valoare = (-1)s m bazae
(baza: 2, 10 sau 16).

Mantisa:
1/baza m < 1 (baza 2 => m < 1 ~ primul bit, c.m.s. este 1).
Exponentul:
caracteristica = exponent + 2numar de biti exponent 1

Exemplu. 7 biti pentru exponent =>128 valori distincte cu semn:


-64 exponent +63
caracteristica = exponent + 27-1
caracteristica = exponent + 64 => 0 caracteristica 127

Exemplu. Standardul IEEE 754 (IEEE Institute of Electrical and


Electronics Engineers) pentru reprezentarea numerelor reale in virgula
mobila pe lungime (precizie) simpla (32 de biti):

daca 0 < e < 255 => valoarea = (-1)s 1.m 2e-127


daca e = 0 si m = 0 => valoarea = 0
daca e = 0, m 0 sau e = 255 => eroare

Reprezentarea pe lungime (precizie) dubla (64 de biti):

daca 0 < e < 2047 => valoarea = (-1)s 1.m 2e-1023


daca e = 0 si m = 0 => valoarea = 0
daca e = 0, m 0 sau e = 2047 => eroare

4.2.1 Adunarea i scderea n virgul mobil


Operatia de scadere este inlocuita printr-o operatie de adunare:
se aduna la descazut, scazatorul cu semn schimbat. In
continuare se va studia numai operatia de adunare in virgula
mobila. Se considera operatia:
A+ B=C
unde A, B si C sunt numere reprezentate in virgula mobila. Se
parcurg urmatoarele etape:

1) Aducerea celor doi operanzi la acelasi exponent. Se compara


exponentii celor doi operanzi si eventual, se deplaseaza succesiv
dreapta mantisa numarului mai mic in modul cu un numar de pozitii egal
cu diferenta exponentilor. Daca diferenta exponentilor este mai mare
decat numarul de biti utilizati pentru reprezentarea mantisei, atunci
rezultatul adunarii este egal cu numarul mai mare in modul (caci prin
deplasari se obtin numai biti zero pentru mantisa numarului mai mic in
modul).
2) Adunarea mantiselor. Se aduna mantisele celor doi operanzi,
conform regulilor de adunare in virgula fixa.

3) Ajustarea rezultatului.
3a) Daca la pasul precedent s-a realizat adunarea
efectiva a mantiselor este posibil sa apara un transport de la
rangul c.m.s. Acest transport va fi recuperat printr-o deplasare
dreapta a mantisei rezultatului cu o pozitie si incrementarea
exponentului, daca acesta nu este maxim. Daca exponentul
este maxim se pozitioneaza un indicator de depasire superioara
la exponent (eof = exponent overflow), rezultand eroare.

3b) Daca la pasul precedent s-a realizat scaderea


mantiselor, se testeaza:
- fie daca mantisa obtinuta este nula, caz in care se
face zero curat (zero pentru toti bitii rezultatului);
- fie, daca mantisa nu este normalizata (primul bit
c.m.s. al mantisei egal cu 0), caz in care se fac deplasari
succesive ale mantisei spre stanga si se decrementeaza
exponentul (daca acesta nu este minim; daca este minim, se
pozitioneaza un alt indicator, de depasire inferioara euf
exponent underflow, care insa nu este situatie de eroare,
rezultatul fiind aproximat prin zero).

Exemplu. Sa se efectueze operatia de adunare A + B = C, unde A =


(28/32)28 si B = (30/32) 26, numerele fiind reprezentate in virgula mobila pe
11 biti (un bit de semn, 5 biti pentru exponent si 5 biti pentru mantisa).
A = 0 11000 .11100
B = 0 10110 .11110
A fost reprezentat si punctul zecimal la mantisa, chiar daca in calculator nu
se reprezinta. Deoarece eA>eB se deplaseaza mantisa operandului B spre
dreapta cu eA-eB (=2) pozitii, egaland astfel exponentii. Noul B este:
B = 0 11000 .00111

Se aduna mantisele, iar exponentul rezultatului este exponentul comun:


mA+
mB

mC

.11100+
.00111

1.00011

eC = 11000

mC = 1.00011

S-a obtinut depasire la mantisa rezultatului, se deplaseaza mantisa o


pozitie dreapta si se incrementeaza exponentul:
eC = 11000+
1

eC = 11001

mC = 1.00011
------>
mC = .10001

Rezultatul final este:


C = 0 11001 .10001

Chiar daca s-au eliminat erorile de conversie din zecimal in


binar prin alegerea unor numere care se convertesc exact, pe
parcursul calculelor au aparut erori la anumite operatii:
- la aducerea operanzilor la acelasi exponent, prin
deplasarea spre dreapta a mantisei operandului B cu doua pozitii sau pierdut biti 1, deci valoarea lui B s-a modificat;
- la deplasarea spre dreapta a mantisei rezultatului s-a mai
pierdut un bit 1, deci valoarea lui C s-a modificat.
=> Concluzia: operatiile cu numere in virgula mobila
furnizeaza in general rezultate aproximative !

4.2.2 nmulirea n virgul mobil


Pentru inmultirea a doua numere (A B = C) reprezentate in
virgula mobila se parcurg urmatoarele etape:
1) Se verifica daca vreunul din cei doi operanzi este nul, caz in
care si rezultatul este nul, fara nici o operatie.
2) Se determina semnul rezultatului pe baza regulii semnelor de
la inmultirea din matematica (se calculeaza prin sau-exclusiv dintre
bitii de semn ai celor doi operanzi).

3) Se aduna exponentii. Se executa o corectie prin scaderea unui


deplasament (2numar biti exponent-1) din exponentul rezultatului, deoarece:
eA = exp(A) + deplasament
eB = exp(B) + deplasament
eA + eB = exp(A) + exp(B) + 2 deplasament
eC = exp(A) + exp(B) + deplasament
4) Se inmultesc mantisele operanzilor in virgula fixa. Este posibil
ca mantisa rezultatului sa nu fie normalizata (daca cele doua mantise
care s-au inmultit au avut valori apropiate de 1/2), caz in care se
deplaseaza mantisa rezultatului o pozitie spre stanga si exponentul se
decrementeaza.
In organigrama urmatoare sunt reprezentate operatiile
elementare executate pentru inmultirea a doua numere in virgula mobila.

Exemplu. Sa se efectueze inmultirea A B = C, unde A = (17/32)2-9 si


B = (19/32)24.
Caracteristica operandului A este: eA = -9 + 25-1 = -9 +16 = 7. Cei doi
operanzi se reprezinta in virgula mobila:
A = 0 00111 10001
B = 0 10100 10011
sC = 0 0 = 0
Se aduna exponentii (din suma se scade un deplasament) si se inmultesc
mantisele celor doi operanzi, numere subunitare in virgula fixa:

00111+
10100

1101110000

01011

=>

eC = 01011

.10001
.10011

.0000010001+
.0000100010
.0000000000
.0000000000
.0100010000

.0101000011
mC = .0101000011

Deoarece mantisa rezultatului nu este normalizata se executa


normalizarea printr-o operatie de deplasare spre stanga a mantisei
(mantisa se trunchiaza pentru a obtine rezultatul pe 5 biti) si
decrementarea exponentului
eC = 01011-1 = 01010; mC = .1010000110 => mC = .10100
C = 0 01010 .10100
S-a obtinut rezultatul C = (20/32)2-6.
=> Din nou rezultatul nu este exact (operatia de trunchiere a
mantisei produsului, se pierd biti semnificativi) !

4.2.3 mprirea n virgul mobil

Pentru impartirea a doua numere reale reprezentate in


virgula mobila A:B=C sunt necesare urmatoarele etape:
1) Verificarea operanzilor: se verifica daca impartitorul este
nul (eroare) sau daca deimpartitul este nul (rezultat zero).
2) Se scad cei doi exponenti, realizand si corectia prin
adunarea unui deplasament (2numar biti exponent 1 ).

3) Se determina semnul rezultatului pe baza regulii


semnelor de la impartirea din matematica (se calculeaza
prin sau-excusiv dintre bitii de semn ai celor doi operanzi).
4) Se impart mantisele celor doi operanzi.
Deoarece 1/2 mA, mB < 1 rezulta ca 1/2 < mC < 2.
Daca exista depasire la rezultat, se deplaseaza mantisa o
pozitie spre dreapta si se incrementeaza exponentul.
In organigrama urmatoare sunt prezentate operatiile
elementare pentru efectuarea impartirii a doua numere in
virgula mobila

Exemplu. Sa se efectueze operatia de impartire A : B = C, unde A =


(28/32)25 si B = (-17/32) 211.
Se reprezinta cei doi operanzi in virgula mobila pe 11 biti:
A = 0 10101 11100
B = 1 11011 10001
Se calculeaza exponentul rezultatului:
10101+
10000

10010111011

01010

eA+
deplas

(deplas+eA)eB

eC

Se calculeaza semnul rezultatului:

Se impart mantisele celor doi operanzi (in acest exemplu se prezinta o metoda directa
de impartire, asemanatoare cu cea din zecimal):

Se obtine urmatorul rezultat (este necesara o


deplasare
dreapta
a
mantisei
si
incrementarea
exponentului):
eC:

==>

01010+
1

01011

mC:

1.10100
----->
.11010

C : 1 01011 .11010

Valoarea rezultatului obtinut este aproximativ


0.8122-5, fata de valoarea corecta 0.8232-5.
=> calculele au fost afectate de erori
(rezultatul nu este exact);
=> aproximatia nu este foarte buna (cauza:
numar redus de biti utilizati pentru reprezentarea
numerelor).

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