Se observa ca pentru a realiza operatia de adunare in cod direct a unor numere reprezentate in virgula fixa este necesar un dispozitiv de comparare a modulelor celor doua numere. Operatia de adunare consta in: daca semnele celor doi operanzi sunt identice atunci se aduna modulele celor doua numere si se stabileste semnul comun; daca semnele celor doi operanzi sunt diferite atunci se compara modulele celor doua numere si in functie de relatia dintre ele se scade cel mai mic din cel mai mare si se da semnul numarului cel mai mare in valoare absoluta.
Dispozitivul de adunare trebuie sa dipuna si de o unitate aritmetica logica, care sa poata efectua atat operatia de adunare cat si de scadere. Din punctul de vedere al implementarii fizice un astfel de dispozitiv este destul de complex.
4.1.1.1.1 Scaderea in cod direct
Operatia de scadere in cod direct se reduce la adunare, dupa ce in prealabil s a negat bitul de semn al scazatorului. Operatia propriu-zisa efectuata de dispozitivul aritmetic este functie de semnul celor doi operanzi si de operatia ceruta.
Astfel, daca xs , ys sunt semnele celor doi operanzi, iar
so semnul operatiei dorite (0 adunare, 1 scadere) si
sof semnul operatiei efectuate fizice
atunci sof = xs ? ys ? so
Schema bloc de principiu a unui dispozitiv care efectueaza operatii de adunare si scadere in cod direct este prezentata in Fig. 4.1.
Figura 4.1
4.1.1.2 Adunarea si scaderea in cod invers
4.1.1.2.1 Adunarea in cod invers
Fie :
x = xsx 1x 2...x n
y = ysy 1y 2...y n cu conditia ca
x
+
y
< 1
doua numere in virgula fixa , subunitare, reprezentate in cod invers.
Operatia de adunare se efectueaza astfel:
- se aduna cei doi operanzi bit cu bit incepand cu rangul cel mai putin semnificativ, inclusiv bitul de semn.
- eventualul transport din bitul de semn se aduna la cifra cea mai putin semnificativa a rezultatului.
Justificare:
1. in cazul in care x>0, y>0 si
x
+
y
<1
[x]i + [y]i =
x
+
y
= [
x
+
y
]i
2. in cazul in care x>0, y<0
cazul 1:
x
>
y
[x]i + [y]i =
x
+2
y
2 n =2 + (
x
y
) 2 n
Deoarece
x
y
>0 atunci 2+(
x
y
) genereaza un transport din bitul de semn, care conform regulii enuntate se aduna la pozitia cea mai putin semnificativa a rezultatului, adica transportul devine 2 n.
in acest caz [x]i + [y]i = (
x
y
) = [(
x
y
)]i
cazul 2:
x
<
y
[x]i + [y]i =
x
+2
y
2 n =2 (
y
x
) 2 n
deoarece
y
x
>0,
atunci 2 (
y
x
) nu genereaza un transport din bitul de semn.
in acest caz [x]i + [y]i =2 (
y
x
) 2 n = [ (
y
x
)]i
3. in cazul in care x<0, y<0 si
x
+
y
<1
[x]i + [y]i = 2
x
2 n + 2
y
2 n =
= 2 + 2 (
x
+
y
) 2 n 2 n =
= 2 (
x
+
y
) 2 n = [ (
x
+
y
)]i
deoarece (
x
+
y
)>0,
atunci 2 (
x
+
y
) nu genereaza un transport din bitul de semn.
in schimb 2 + 2 (
x
+
y
) genereaza un transport care prin adunare la pozitia cea mai putin semnificativa devine 2 n.
in acest caz [x]i + [y]i = [ (
x
+
y
)]i
4.1.1.2.2 Scaderea in cod invers
Operatia de scadere in cod invers se reduce la adunare dupa ce in prealabil s a inversat (complementat fata de 1) scazatorul.
Schema bloc de principiu a unui dispozitiv de adunare si scadere in cod invers este prezentata in Fig. 4.2. Se observa ca este mult mai simplu decat cel pentru reprezentarea prin marime si semn. in plus bitul de semn participa la fel ca ceilalti biti care specifica marimea.
Acest dispozitiv are un dezavantaj ca necesita adunarea eventualului transport din bitul de semn ceea ce conduce la un timp de propagare mare. in cazuri extreme unitatea de adunare, scadere in cod invers poate fi lenta datorita propagarii transportului.