Documente Academic
Documente Profesional
Documente Cultură
iacob@cs.pub.ro
EF 202
Continut
1 Generalitati despre calculatoarele electronice
1.1 Structura si functionarea unui calculator electronic
1.2 Istoric
2 Bazele aritmetice ale calculatoarelor electronice
2.1 Sisteme de numeratie
2.2 Reprezentarea numerelor in virgula fixa
2.3 Adunarea si scaderea in virgula fixa
2.4 Inmultirea in virgula fixa
2.5 Impartirea in virgula fixa
2.6 Reprezentarea numerelor in virgula mobila
2.7 Metode eficiente de impartire
2.8 Alte coduri numerice
3 Bazele logice ale calculatoarelor
3.1 Algebra de comutatie
3.2 Circuite logice combinationale
3.3 Circuite logice secventiale
4 Unitatile functionale ale unui calculator
4.1 Modelul functional al calculatorului
4.2 Unitatea aritmetica – logica
4.3 Memoria
4.4 Unitatea de comanda
4.5 Subsistemul de intrare / iesire
5 Organizarea unui PC
Bibliografie
Laborator: 40 puncte
Lucrare verificare 1: 40 puncte
Lucrare verificare 2: 20 puncte
1 GENERALITATI DESPRE
CALCULATOARELE
ELECTRONICE
1.1 Structura si functionarea unui calculator electronic
=> bazele 2, 8, 10 si 16
b=10 b=2 b=8 b=16
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
17 10001 21 11
18 10010 22 12
19 10011 23 13
20 10100 24 14
21 10101 25 15
... ... ... ...
Schimbarea bazei de numeratie
citeste nr
i = 0
cat timp nr ≥ 2i executa
│ a[i] = 0
└ i = i + 1
i = i - 1; n = i; a[n] = 1; nr = nr – 2i
cat timp nr ≠ 0 executa
│ i = i – 1
│ daca nr ≥ 2i atunci
│ │ a[i] = 1
└ └ nr = nr – 2i
scrie (a[i], i = n,0)
N numar subunitar, fara semn in baza x noua baza y.
Obs.
conversia numerelor intregi: exact;
conversia numerelor subunitare: aproximativ.
Exemplu. N = 0.37(10) baza 2 (rezultatul pe 7 biti).
N ≈ .0101111(2) . Verificare:
N ≈ 0·2-1+1·2-2+0·2-3+1·2-4+1·2-5+1·2-6+1·2-7 =
= (0·26+1·25+0·24+1·23+1·22+1·21+1·20)/27 =
= 47 / 128 = 0.367
Exemplu. N = 41.37(10) baza 2 (partea subunitara pe 7).
=> N ≈ 101001.0101111(2).
Aplicatie. algoritm pentru conversia unui numar subunitar din zecimal in
binar, cu precizia pe m biti.
citeste nr, m
pentru i=1,m executa
└ a[i] = 0
i = 0
cat timp (nr ≠ 0)si(i < m) executa
│ i = i + 1
│ daca nr ≥ 2-i atunci
│ │ a[i] = 1
└ └ nr = nr – 2-i
scrie (a[i], i = 1,m)
Cazuri particulare
16 = 24 => n = 4
3 C F . 4 A E
↓ ↓ ↓ ↓ ↓ ↓
0011 1100 1111 . 0100 1010 1110
=> N = 1111001111.01001010111(2).
-in vechea baza x => grupuri de cate n cifre de la punctul zecimal spre
stanga pentru partea intreaga si de la punctul zecimal spre dreapta pentru
partea subunitara (daca este necesar se vor completa grupurile extreme cu
zerouri);
-fiecare grup cifra in noua baza y.
23 = 8 => n = 3.
Valoarea in zecimal:
n2
k
k
x 2 pentru numar intreg
x nk20
x 2 k n 1 pentru numar subunitar
k
k 0
Exemple. Sa se reprezinte numerele x = 21 si y = -20 pe 6 biti.
[x] = 010101
[y] = 110100
2.3 Adunarea si scaderea in virgula fixa
Adunarea si scaderea
operatia x op y = z
(op operatia de realizat, 0 pentru adunare si 1 pentru scadere).
Operatia finala:
Doua cazuri:
1) opfin = 0 => aduna modulele celor doi operanzi, iar semnul
rezultatului este dat de semnul primului operand.
[x] = 001011
[y] = 101110
=> zs=xs=0
|x|+ 01011+
|y| 01110
─── => ─────
|z| 11001
[x] = 111101
[y] = 010001
|x|- 11101-
|y| 10001
─── => ─────
|z| 01100
x• y = z
Etape:
z s xs y s
2) Calcularea modulului rezultatului:
a) Numere intregi.
n2 n2
x y x yk 2 k x yk 2 k
k 0 k 0
k 0 daca yk 0
x yk 2 k
x 2 daca yk 1
k 0 daca yk 0
x y k 2 k
x 2 daca yk 1
[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+ |x|•y-5•2-5=|x|•2-5
.0000101000 |x|•y-4•2-4=|x|•2-4
.0000000000 |x|•y-3•2-3=0
.0000000000 |x|•y-2•2-2=0
.0101000000 |x|•y-1•2-1=|x|•2-1
───────────
.0101111100
Rezultat exact!
z = - (0•2-1+1•2-2+0•2-3+1•2-4+1•2-5+1•2-6+1•2-7+1•2-8+0•2-9+0•2-10 ) =
= - (0•29+1•28+0•27+1•26+1•25+1•24+1•23+1•22+0•21+0•20)/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).
2.5 Impartirea in virgula fixa
Metoda comparatiei
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
1 daca 2 r ( k 1)
y
q k
0 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-m•q-m•|y|+2-m•2•(2•...•(2•|x|-q-1•|y|)...-q-m+1•|y|)=
=2-m•2m•|x|-|y|•(q-1•2-1+q-2•2-2+...+q-m•2-m)=
=|x|-|y|•|q|
=>
|x| = |y|•|q| + 2-m•|r(m)|
[x] = 0.10100
[y] = 0.11001
Exponentul:
caracteristica = exponent + 2numar de biti exponent – 1
Exemplu. 7 biti pentru exponent =>128 valori distincte cu semn:
f ( xi )
xi 1 xi
f ( xi )
Daca se alege functia:
1
f ( x) w
x
cu radacina 1/w,
1
f ( x ) 2
x
iar relatia de recurenta devine:
1 / xi w
xi 1 xi 2
xi (2 w xi )
1 / xi
relatie utilizata pentru a calcula pe 1/w => A:B A•(1/B) (aflarea lui 1/B prin
metoda iterativa de mai sus).
-resurse rapide pentru operatiile de inmultire si scadere;
-exemplu de circuit: Advanced Micro Devices AM29C325.
Metoda factorilor succesivi
D D f 0 f1 f 2 f 3 ....
Q
I I f 0 f1 f 2 f 3 ....
astfel incat numitorul fractiei 1 => rezultatul impartirii = numaratorul fractiei.
f0 = 1 + x = 1 + ( 1 – I ) = 2 – I
I • f0 = ( 1 – x) • ( 1 + x ) = 1 – x2
f1 = 1 + x2 = 1 + ( 1 – I • f0 ) = 2 – I • f0
I • f0 • f1 = ( 1 – x2) • ( 1 + x2 ) = 1 – x4
care este mai aproape de 1 decat I • f0, iar f1 este complementul fata de 2 al
lui I • f0....
Codul BCD
cifra BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
In continuare va fi discutata pe scurt conversia din binar in BCD. Algoritmul de
conversie rezulta din echivalenta dintre o deplasare la stanga a unei valori
binare si inmultirea cu 2. Astfel, se considera doua grupuri de biti,
corespunzatoare la doua registre in cazul unei implementari hardware: grupul
binar si grupul BCD (impartit in decade de cate 4 biti corespunzatoare cifrelor
zecimale). Se initializeaza grupul binar cu valoarea binara de convertit, iar
grupul BCD cu 0. Se executa deplasari succesive cu cate o pozitie spre stanga
atat in grupul binar cat si in grupul BCD, cu trecerea cate unui bit din grupul
binar in grupul BCD, incepand cu bitul c.m.s. Inainte de fiecare deplasare se
executa corectii in acele decade din grupul BCD care au o valoare > 4 (prin
deplasare stanga, echivalent cu o inmultire cu 2, se obtine o valoare > 9, deci
care nu este cifra BCD). Corectia consta din adunarea valorii 3 in fiecare
decada cu valoare > 4 inainte de deplasare. Conversia se incheie in momentul
in care toti bitii din grupul binar au fost transferati in grupul BCD.
Exemplu. Se considera numarul in binar N(2) = 111110010. Sa se converteasca in BCD prin metoda
deplasarilor succesive prezentata mai sus.
Grup BCD Grup binar
0000 0000 0000 111110010
0000 0000 0001 11110010
0000 0000 0011 1110010
0000 0000 0111+ 110010
11
────
0000 0000 1010 110010
0000 0001 0101+ 10010
11
────
0000 0001 1000 10010
0000 0011 0001 0010
0000 0110+0010 010
11
────
0000 1001+0010 010
0001 0010 0100 10
0010 0100 1001+ 0
11
────
0010 0100 1100 0
0100 1001 1000