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.