660 likes | 884 Views
INTRODUCERE IN INFORMATICA 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
E N D
INTRODUCERE IN INFORMATICA 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 47
Bibliografie F. Iacob – Introducere in informatica, Editura Printech, 2004. A. Tanenbaum – Organizarea structurata a calculatoarelor, Ed. Agora, 1999.
Modul de notare: Laborator: 40 puncte Lucrare verificare 1: 40 puncte Lucrare verificare 2: 20 puncte
1.1 Structura si functionarea unui calculator electronic John von Neumann, iunie 1945, “Prima schita de raport asupra EDVAC”:
1.2 Istoric 500 i.H., China antica: abacul; 1617, John Napier: dispozitiv ~ rigla de calcul; 1642, fizicianul francez Blaise Pascal: masina de adunat; 1671, Gottfried Wilhelm von Leibniz: prima masina mecanica pentru operatia de inmultire; 1823, profesorul Charles Babbage, Universitatea din Cambridge: masina diferentiala (tabelele de logaritmi) - cartele perforate
Calculatoare electronice. 1943, guvernul britanic: primul calculator electronic Colossus (decodificarea mesajelor germane); 7 august 1944, Howard Aiken (Universitatea Harvard)+ IBM (International Business Machines) + Bell Telephone: Mark I (calculator electro-mecanic pentru calculul traiectoriilor balistice).
Dezvoltarea tehnicii de calcul in Romania. 1957 dr.ing. Victor Toma, CIFA 1 (Calculator al Institutului de Fizica Atomica), cu tuburi electronice. 1961 MECIPT 1 (Masina Electronica de Calcul Institutul Politehnic Timisoara) cu tuburi electronice MECIPT 2 si 3, cu tranzistoare. 1966 DACICC 1 (Cluj).
Bazele industrie de calculatoare: 1970 Fabrica de Calculatoare Bucuresti Felix C256 (licenta franceza).
-FELIX M18, M18B, M118, cu microprocesor Intel 8080 la 2 MHz, 64 Kocteti de memorie interna, display grafic de 512x256 pixeli (numai la M118), unitati de disc flexibil de 8”, sistem de operare CP/M si SFDX-18;
-FELIX M216, sistem biprocesor cu 8086 si 8080, memorie RAM de 128 Kocteti, extensibila pana la 1 Moctet, display grafic color de 512x512 pixeli;
-FELIX PC, realizat cu microprocesor Intel 8086 (8088), coprocesor matematic 8087, memorie RAM de 256 Kocteti, extensibila la 640 Kocteti pe placa de baza, unitati de disc flexibil de 5¼”, sistem de operare MS-DOS;
-HC-85, destinat utilizarii acasa sau in scoli, cu microprocesor Zilog Z80, 64 Kocteti de RAM, interfata cu unitate de caseta magnetica audio (casetofon audio), afisare pe televizor si interpretor BASIC;
2.1 Sisteme de numeratie Sistem de numeratie: totalitatea regulilor de reprezentare a numerelor cu ajutorul unor simboluri numite cifre. Cifra: simbol care reprezinta o cantitate intreaga. Baza (radacina) sistemului de numeratie: numarul de simboluri permise pentru reprezentarea cifrei. => bazele 2, 8, 10 si 16
Schimbarea bazei de numeratie separat pentru partea intreaga si separat pentru partea subunitara! Nnumar intreg fara semn in baza x noua baza y.
Reprezentarea N in baza y: anan-1 ... a1a0 N = anyn + an-1yn-1 + ... + a1y + a0 => impartiri succesive la noua baza y, retinand la fiecare operatie restul! N / y = anyn-1 + an-1yn-2 + ... + a1 + a0/y => a0(cifra cea mai putin semnificativa a rezultatului) N1 / y = anyn-2 + an-1yn-3 + ... + a2 + a1/y ………………. Nk / y = anyn-k-1 + an-1yn-k-2 + ... + ak+1 + ak/y Conversia se incheie cand se obtine catul 0.
Exemplu.N = 41(10) noua baza 2. 41 : 2 => cat =20 si rest = 1 => a0 = 1 20 : 2 => cat =10 si rest = 0 => a1 = 0 10 : 2 => cat = 5 si rest = 0 => a2 = 0 5 : 2 => cat = 2 si rest = 1 => a3 = 1 2 : 2 => cat = 1 si rest = 0 => a4 = 0 1 : 2 => cat = 0 si rest = 1 => a5 = 1 => N = 101001(2). Verificare: N = 1·25 + 0·24 + 1·23 + 0·22 + 0·21 + 1·20 = 41 corect!
Aplicatie. algoritm in pseudocod pentru conversia unui numar intreg din zecimal in binar. citeste nr i = 0 cat timp nr ≥ 2iexecuta │ 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 ≥ 2iatunci │ │ a[i] = 1 └ └ nr = nr – 2i scrie (a[i], i = n,0)
N numar subunitar, fara semnin baza x noua baza y. Reprezentarea N in baza y: 0. a-1a-2... a-m N = a-1y-1 + a-2y-2 + ... + a-my-m => inmultiri succesive cu noua baza y, retinand de fiecare data partea intreaga a rezultatului! N·y = a-1 + a-2y-1 + a-3y-2 + ... + a-my-m+1 => a-1 (cea mai semnificativa) N1·y = a-2 + a-3y-1 + a-4y-2 + ... + a-my-m+2 ………………… Nk·y = a-k-1 + a-k-2y-1 + a-k-3y-2 + ... + a-my-m+k+1
Conversia se incheie: -partea subunitara a rezultatului inmultirii egala cu zero ; -s-a calculat numarul propus de cifre (s-a atins precizia dorita). Obs. conversia numerelor intregi: exact; conversia numerelor subunitare: aproximativ.
Exemplu.N = 0.37(10) baza 2 (rezultatul pe 7 biti). • 0.37 x 2 = 0.74 => a-1 = 0 • 0.74 x 2 = 1.48 => a-2 = 1 • 0.48 x 2 = 0.96 => a-3 = 0 • 0.96 x 2 = 1.92 => a-4 = 1 • 0.92 x 2 = 1.84 => a-5 = 1 • 0.84 x 2 = 1.68 => a-6 = 1 • 0.68 x 2 = 1.36 => a-7 = 1 • 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-iatunci │ │ a[i] = 1 └ └ nr = nr – 2-i scrie (a[i], i = 1,m)
Cazuri particulare • x = yn=> fiecare cifra in baza x~ grup de n cifre in baza y. • Exemplu.N = 3CF.4AE(16) baza 2 • 16 = 24=>n = 4 • 3 C F . 4 A E • ↓ ↓ ↓ ↓ ↓ ↓ • 0011 1100 1111 . 0100 1010 1110 • => N = 1111001111.01001010111(2). • Conversia s-a facut exact !
2) xn = y. -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. Rezultatul este exact! Exemplu.N = 11001111.1101011(2) in baza 8. 23 = 8 => n = 3. 011 001 111 . 110 101 100 ↓ ↓ ↓ ↓ ↓ ↓ 3 1 7 . 6 5 4 => N = 317.654(8)
2.2 Reprezentarea numerelor in virgula fixa Numerele: in virgula fixa (numere intregi sau numere subunitare) si in virgula mobila (numere reale). Valoarea in zecimal:
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. Exemplu.x-y=z, unde x = 11, y = -14, pe 6 biti. [x] = 001011 [y] = 101110 => zs=xs=0 |x|+ 01011+ |y| 01110 ─── => ───── |z| 11001 deci, s-a obtinut [z] = 011001 (z = 25).
2) opfin = 1 => se scade modulul mai mic din modulul mai mare, iar semnul rezultatului este dat de semnul operandului mai mare in modul. Exceptie: op = 1 (scadere) si |y|>|x| Exemplu.x+y=z, unde x = -29, y = 17. [x] = 111101 [y] = 010001 |x|>|y| =>zs=xs=1 |x|- 11101- |y| 10001 ─── => ───── |z| 01100 => [z]= 101100 (z = -12).
2.4 Inmultirea in virgula fixa x• y = z Etape: 1) Determinarea semnului rezultatului:
2) Calcularea modulului rezultatului: a) Numere intregi. |x|2k~ |x| deplasat spre stanga k pozitii.
b) Numere subunitare. |x|2-k~ |x| deplasat spre dreapta k pozitii. 3) Trunchierea si rotunjirea rezultatului.
Exemplu:x • y = z in virgula fixa, x =20/32 si y = -19/32. [x] = 0.10100 [y] = 1.10011 Etape: 1) Semnul rezultatului:
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] = 1.0101111100 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 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 = n–1), 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 = xsys │ 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
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)| 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 ──────── .01111
=> [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).
2.6 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