AC4
AC4
N CALCULATOARELE
NUMERICE
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:
|z|
=>
01011+
01110
11001
|z|
=>
1110110001
01100
xs
OP1
ys
OP2
COMPARATOR
0 OP1<=OP2
1 OP1> OP2
1 0
MUX
SLC
0
s
1
MUX
So
[z]i
011001+
110110
1<-001111+
1
010000
[z]i
=>
[y]i = 100010
000101+
100010
100111
[z]i
110100+
101100
1<-100000+
1
100001
OP1
OP2
0
MUX
ADD
C out
C in
SO
[z]c
Deci, [z]c = 000100 (z = 4).
=>
[y]c = 101110
010110+
101110
1<-000100
[z]c
=>
[y]c = 100100
010100+
100100
111000
[z]c
=>
=>
[x]c = 111100
[y]c = 110011
111100+
110011
1<-101111
OP1
OP2
0
MUX
1
s
SO
ADD
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.
z s xs y s
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
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
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
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
Vy - y s y i * 2 -i
i 1
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
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
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.
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
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;
citeste x,y
daca |x| |y| atunci
scrie Eroare!
altfel
qs = xs ys
rs = xs
altfel
|r| = |r|
|r| = |r|2-m //rest final
scrie q, r
q k
daca 2 r
( k 1)
y
altfel
[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
OP1
OP2
MD
0 1
AC
n
MQ
ADD
NB
Unitate de comanda
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| +
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
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| +
Mantisa:
1/baza m < 1 (baza 2 => m < 1 ~ primul bit, c.m.s. este 1).
Exponentul:
caracteristica = exponent + 2numar de biti exponent 1
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.
mC
.11100+
.00111
1.00011
eC = 11000
mC = 1.00011
eC = 11001
mC = 1.00011
------>
mC = .10001
00111+
10100
1101110000
01011
=>
eC = 01011
.10001
.10011
.0000010001+
.0000100010
.0000000000
.0000000000
.0100010000
.0101000011
mC = .0101000011
10010111011
01010
eA+
deplas
(deplas+eA)eB
eC
Se impart mantisele celor doi operanzi (in acest exemplu se prezinta o metoda directa
de impartire, asemanatoare cu cea din zecimal):
==>
01010+
1
01011
mC:
1.10100
----->
.11010
C : 1 01011 .11010