microprocesoare
DESCRIPTION
MicroprocesoareTRANSCRIPT
CUPRINS
Sisteme de numeraie Laborator 1
Lucrarea de laborator nr. 1Conversii i operaii n diferite baze de numeraieScopul lucrrii
Se urmarete realizarea conversiei a unui numr ntreg sau zecimal dintr-o baz n alta. Ne axam pe conversiile din bazele 2, 8, 10, 16, precum i a operaiilor simple n diferite baze de numeraie.
I Consideraii teoreticeTotalitatea regulilor de reprezentare a numerelor cu ajutorul anumitor simboluri denumite cifre, determin un sistem de numeraie.
Baza sistemului de numeraie este dat de numrul semnelor distincte pentru cifrele sistemului.
n acest sens:
pentru baza 2 (binar), semnele sunt 0 i 1;Avem numrul 110 n baza 2. Se poate scrie sub forma:
1*22 +1*21 +0*20 = 1*4 + 1*2 + 0*1 = 4 + 2 + 0 = 6
cifra0000110
poziia6543210
baza poziie26252423222120
valoare=baza poziie6432168421
cifra*valoare00001*41*20*1
pentru baza 8 (octal), semnele sunt: 0, 1, 2, 3, 4, 5, 6, 7;
pentru baza 10 (zecimal), semnele sunt: 0, 1, 2, 3, 4, 5, 6, 7. 8, 9;Avem numrul 189 n baza 10. Se poate scrie sub forma:
1*102 + 8*101 + 9*100 = 100 + 8*10 + 9*1 = 100 + 80 + 9 = 189
cifra0000189
poziia6543210
baza poziie106105104103102101100
valoare=baza poziie1000000100000100001000100101
cifra*valoare00001*1008*109*1
pentru baza 16 (hexazecimal), semnele sunt: 0, 1, 2, 3, 4, 5, 6, 7. 8, 9,A,B,C,D,E,F.
A in baza 16 este egal cu 10 in baza 10. B in baza 16 este egal cu 11 in baza 10.
C in baza 16 este egal cu 12 in baza 10. D in baza 16 este egal cu 13 in baza 10.
E in baza 16 este egal cu 14 in baza 10. F in baza 16 este egal cu 15 in baza 10.Avem numrul 1A3 n baza 16. Se poate scrie sub forma:
1*162 + A*161 + 3*160 = 1*256 + A*16 + 3*1 = 256 + 160 + 3 = 419
cifra00001A3
poziia6543210
baza poziie166165164163162161160
valoare=baza poziie167772161048576655364096256161
cifra*valoare00001*25610*163*1
Sistemul de numeraie obinuit este cel zecimal.
n viaa real utilizm sistemul zecimal, ns n cazul circuitelor numerice, sistemul utilizat este cel binar. Acest sistem, ofer posibilitatea de a realiza calcule logoice i aritmetice. Deci cu secvenele de 0 i 1, se caracterizeaz, din punct de vedere electric, comportarea sistemelor digitale (numerice).
n acest sens:
cifra 0 este asociat nendeplinirii anumitor condiii electrice
cifra 1 este asociat ndeplinirii condiiilor electrice - reprezint starea 1 logic sau starea de adevr.
1.1 Conversia numerelor din baza 10 ntr-o baz oarecare
La conversia unui numr care conine att parte ntreag ct i parte zecimal se convertete separat partea ntreag i separat cea zecimal.
1.1.1 Conversia prii ntrgi
Cel mai simplu algoritm, pentru conversia prii ntregi, se realizeaz prin mprirea succesiv a numrului scris n baza 10 la baza n care se dorete conversia. Numrul n baza cerut, se obine, din resturile rezultate, scrise n ordine invers.
Exemplu: Conversia lui 7 din baza 10 n baza 2:
717 mprit la 2 d restul 1 i ctul 3
313 mprit la 2 d restul 1 i ctul 1
111 mprit la 2 d restul 1 i ctul 0
0Se oprete
Citim de jos n sus: 111(2) Conversia 24 din baza 10 n baza 2:
24024 mprit la 2 d restul 0 i ctul 12
12012 mprit la 2 d restul 0 i ctul 6
606 mprit la 2 d restul 0 i ctul 3
313 mprit la 2 d restul 1 i ctul 1
111 mprit la 2 d restul 1 i ctul 0
0Se oprete
24(10) = 11000(2) S se converteasc numrul ntreg 2653 din baza 10 n baza 16
(2653)10 = (A5D)16 S se converteasc numrul ntreg 256 din baza 10 n baza 8
(256)10 = (400)8 S se converteasc numrul ntreg 24 din baza 10 n baza 2
(24)10 = (11000)2 S se converteasc numrul ntreg 418 din baza 10 n baza 16, 2 i 8.
Conversia din baza 10 n baza 16 se mparte repetat numrul la 16.
418 16
32 26 16
98 16 1 16
96 10 0 0
2 1 (adic A)
Lund resturile n ordine invers obinem: 1A2 (16).
S se converteasc numrul ntreg 999 din baza 10 n baza 2.
999/2 = 499 rest = 1LSB- cifra binar-de semnificaie minim
499/2 = 249rest = 1
249/2 = 124rest = 1
124/2 = 62rest = 0
62/2 = 31rest = 0
31/2 = 15rest = 1
15/2 = 7rest = 1
7/2 = 3rest = 1
3/2 = 1rest = 1
1/2 = 0rest = 1MSB- bitul de semnificaie maxim
se obine: 99910 = 11111001112.
Trecem numarul 7 din baza 10 n baza 2.
71 7 mprit la 2 d restul 1 i catul 3
313 mprit la 2 d restul 1 i catul 1
111 mprit la 2 d restul 1 i catul 0
0Ne oprim cand catul este 0
Citim de jos in sus lista de caturi si obtinem 101 in baza 2.
O cifr n hexazecimal se poate reprezenta prin 4 cifre binare, iar o cifr n octal se reprezint pe trei caractere binare. Acest lucru rezult din urmtorul tabel:Valoarea n zecimalValoarea n hexazecimalNumrul binar coresp. cifrei hexaNumrul binar coresp. cifrei octal
000000000
110001001
220010010
330011011
440100100
550101101
660110110
770111111
881000
991001
10A1010
11B1011
12C1100
13D1101
14E1110
15F1111
Baza 2Baza 10Baza 16
1 00001610
1 00011711
1 00101812
1 00111913
1 01002014
1 01012115
1 01102216
1 01112317
1 10002418
1 10012519
1 1010261A
1 1011271B
1 1100281C
1 1101291D
1 1110301E
1 1111311F
Se grupeaz cifrele din binar astfel:
la numerele ntregi de la dreapta la stnga (prin completare cu zerouri la stnga numrului dac este cazul, deci n partea care nu-i afecteaz valoarea),
iar la numerele zecimale gruparea se face de dup virgul de la stnga la dreapta, prin adugare de zerouri la dreapta numrului.
Deci:
418(10) = 1A1 (16) = 1 1010 0001 (2) = 641 (8)
1.1.2 Conversia prii zecimale
Se realizeaz prin nmuliri succesive ale prilor fracionare pn cnd se ajunge la parte fracionar nul, sau se ajunge la perioad sau se depete capacitatea de reprezentare. Se nmulete doar ceea ce este n dreapta virgulei.
Exemplu:
S se converteasc numrul 0,35(10) n binar, octal i hexazecimal:
0, 35*2
0 70
1 40
0 80
1 60
1 20
0 40
0 80
1 60
1 20
0 40
0 80
1 60
0 ...
0,35(10) = 0,0101 1001 1001 1001(2) = 0,5999(16) = 0,26331(8)Dac numrul conine att parte ntreag ct i parte zecinal se convertete partea ntreag i apoi partea zecimal.
Exemplu:
S se reprezinte n baza 2 si 16 numrul real 24,25
24(10) = 11000(2) = 18(16)0,25(10) = 0,001(2) = 1(16)Deci: 24,25(10) = 11000,001(2) = 18,1(16)1.2 Conversia unui numr dintr-o baz oarecare n baza 10
n baza 10, poate fi transformat un numr scris ntr-o baz oarecare, dup urmtoarea regul:
Nr(b) = Cn Cn-1 Cn-2 C2C1 C0 , D1D2D2D3
atunci valoarea sa n baza 10 va fi:
Nr(10) = Cn * bn + C n-1 * bn-1 + + C 2 * b2 + C 1 * b1+ C 0 * b0 + D1 * b-1 + D2 * b 2 + D3 * b 3 +
Exemple:
Se d numrul fracionar 0,144 scris n baza 8 i se cere valoarea sa n zecimal
N = 1*8 1 + 4*8 2 +4*8 3 = 1/8 +4/64 + 4/512 = 0.19531(10) Se d numrul n binar 111,01(2) i se cere valoarea sa n hexazecimal i n zecimal:
N = 111,01(2) = 7,4(16) = 6,75(D)
0111(2) = 7(16)
0100(2) = 4(16)
111,01(2) =1*22+1*21+1*20+0*2-1+1*2-2 = 7,25(10) Se d numrul ntreg n hexazecimal 2B3(16) i se cere valoarea sa n zecimal:
N = 2*162 + 11*16 1 + 3 = 2*256 + 176 + 3 = 691(10) Se d numrul n binar 101011,1012 i se cere valoarea sa n zecimal:
101011,1012 = 1(25 + 0(24 + 1(23 + 0(22 + 1(21 + 1(20 + 1(2-1 + 0(2-2 + 1(2-3 =
= 32 + 8 + 2+1 + 0,5 + 0,125 =
= 43,625(10) Convertirea numrului 011 din baza 2 n baza 10
0*22 + 1*21 +1*20 = 0*4 + 1*2 + 1*1 = 2+1=3
cifra0000011
poziia6543210
baza poziie26252423222120
valoare=baza poziie6432168421
cifra*valoare00000*41*21*1
Convertirea numrului 1E din baza 16 n baza 10
1*161 +E*160 = 1*16 + E*1 = 16+14=30
cifra000001E
poziia6543210
baza poziie166165164163162161160
valoare=baza poziie167772161048576655364096256161
cifra*valoare000001*1614*1
1.3 Trecerea din baza 2 in baza 16
1) Impartim numarul binar in grupuri de cate 4 cifre binare, incepand din dreapta
2) Transforma fiecare grup de 4 cifre binare in cifra echivalenta din baza 16.Exemple:
1110101(2) 111 0101(2) 75(16) 117(10)10110111(2) 1011 0111(2) B7(16) 183(10)101101(2) 10 1101(2) 2D(16) 45(10)1.4 Operaii simple cu numere scrise n diferite baze
1.4.1 Adunarea
La adunare se aplic aceli reguli ca n zecimal. n cazul n care, la adunarea a dou cifre de rang i, rezult o valoare mai mare dect baza, va apare acel transport spre cifra de rang urmtor i+1, iar pe poziia de rang i va rmne restul mpririi rezultatului adunrii cifrelor de rang i la baz. Transportul spre cifra de rang i+1 va deveni o nou unitate la suma cifrelor de rang i+1, adic se va mai aduna acel transport 1.
Regulile pentru operatiile de adunare:
aba+bT
0000
0110
1010
1101
Unde: a, b cele dou valori care se adun
T cmpul transport
Exemple:
1 11 11 11
10010010(2)+
2362(8)+ 6D7B23(16)+
10110101(2)
3721(8)
44F3C8(16)
101000111(2)
6303(8)
B26EEB(16)01001011+11010110 75+214
0 1 0 0 1 0 1 1 +
1 1 0 1 0 1 1 0
------------------
1 0 0 1 0 0 0 0 1
Operaia de adunare n binar ajut la reprezentarea numerelor n complement fa de 2 cnd se alege varianta adunrii valorii 1 la reprezentarea din complement fa de 1.
1.4.2 Scderea
La scdere sunt valabile regulile de la scderea din zecimal i anume: dac nu se pot scdea dou cifre re rang i (adic cifra desczutului este mai mic dect a scztorului) se face mprumut o unitate din cifra de rang urmtor (i+1). n cazul n care cifra din care se dorete realizarea mprumutului este 0, se face mprumutul mai departe la cifra de rang urmtor.
Exemple:
.
. .
01011001(2)
A3D4(16)
01000100(2)
751B(16)
00010101(2)
2EB9(16)11010110 01001011 214-75
1 1 0 1 0 1 1 0 -
1 1 0 1 0 1 1 0 +
0 1 0 0 1 0 1 1
1 0 1 1 0 1 0 1
-----------------
-----------------
1 0 0 0 1 0 1 1 1 1 0 0 0 1 0 1 1Scderea este folosit atunci cnd se reprezint numerelor n complement fa de 2 i se efectueaz scderea din 2nr_biti_reprez + 1 a numrului reprezentat n modul.1.4.3 nmulirea
Regulile pentru operatiile de nmulire:
aba*b
000
010
100
111
Se observ c nmultirea cu 2 a unui numar reprezentat n binar echivaleaza cu deplasarea la stnga a cifrelor constituente cu o pozitie.
Exemplu:
0100101111010110 75214
0 1 0 0 1 0 1 1
1 1 0 1 0 1 1 0
------------------
0 0 0 0 0 0 0 0
0 1 0 0 1 0 1 1
0 1 0 0 1 0 1 1
0 1 0 0 1 0 1 1
0 1 0 0 1 0 1 1
0 1 0 0 1 0 1 1
------------------------------------
1 1 1 1 1 0 1 0 1 1 0 0 1 01.4.4 mprirea
mprirea prin 2 corespunde deplasrii cu o poziie spre dreapta a cifrelor binare ale numrului.
Exemplu:
11010110 : 01001011 214:75
1 1 0 1 0 1 1 0 : 1 0 0 1 0 1 1 = 1 0
1 0 0 1 0 1 1
---------------
1 0 0 0 0 0 0II Desfurarea lucrrii
Se vor realiza conversiile din exemplele prezentate:
conversia numerelor din baza 10 n baza 2,8 i 16
conversia unui numr ntre bazele 2,8 i 16
conversii din bazele 2,8 i 16 n baza 10
conversia numerelor zecimale din baza 10 n baza 2 i 16
operaii de adunare i scdere numere n bazele 2 i 16Aplicaii
1.6.1 a) Sa se converteasc n binar numarul zecimal 35,82.b) Sa se converteasc numarul de mai sus n hexazecimal.
1.6.2 a) Sa se converteasc n baza 10 numarul binar 11010,1011.
b) Sa se converteasc n zecimal numarul hexazecimal B2,E.
1.6.3 a) Sa se converteasc n baza 10 numarul binar 01111,0011.
b) Sa se converteasc n zecimal numarul hexazecimal C5,B.
1.6.4 Sa se efectueze urmtoarele operaii n binar: 188 + 57; E6(16) + DC(16); C(16) 5; -17B(16) + 18C(16); 134 * 6D(16)
ANEX
1.
// 10 in 2 - nerecursiv
#include
#include
int b10_b2(int, int);
int main(void)
{
int b10 = 1022, b2 = 2;
printf("\n Numarul de impartiri: %i", b10_b2(b10, b2) );
getch();
}
int b10_b2(int b10, int b2)
{
int pas = 0;
int d, cat, rest;
if(b10 < b2) b10 = b2; // pentru a putea face impartire corecta,// deimpartitul este mai mare decat impartitorul.
cat = b10; // primul deimpartit.
do
{
d = cat;
cat = d/b2; // catul impartirii a doi intregi.
rest = d % b2; // restul impartirii a doi intregi.
printf("\n rest: %i", rest);
pas++;
} while(cat != 0);
return pas; // numarul de executii ale ciclului.
}
2.
// baza 10 n baza 16
#include
#include
#define SAU ||
typedef enum depasire9 {A=10, B, C, D, E, F} Baza16;
int baza10_16(int); // prototipul functiei de calcul.
int _baza10_16(int, int*); // prototipul functiei de calcul.
// parametrul al doilea este pentru resturile calculate,
// adica bitii numarului.
int main(void)
{
int nr10 = 508;
int i, l; // i pentru ciclul for(), iar l pentru lungimea vectorului.
int rest[8]; // retine resturile calculate in pasii de apel recursiv.
// scriu 0 in vector, astfel incat sa am valoare neutra in situatia
// scrierii lui 1. La scrierea unui 0 nu se intampla nimic.
l = sizeof(rest)/sizeof(int);
printf("\n Lungimea vectorului rest: %i", l);
for(i=0; i=0; i--)
printf("\n pozitia %i, restul: %i", i, rest[i]);
getch();
}
int baza10_16(int nr10)
{
static int nrApel=0;
// printf("\n Nr apel %i, restul: %i", nrApel, rest[nrApel]);
printf("\n Nr apel %i, restul: %i", nrApel, nr10 % 16);
if(nr10 < 16) return nr10;
// ultimul cat este considerat primul bit util.
// La un nou apel, nr10 are rol de cat.
else {
nrApel++;
baza10_16(nr10/16);
}
}
int _baza10_16(int nr10, int *rest)
{ // al doilea parametru tine resturile
static int nrApel1=0;
Baza16 var16;
// Verific daca resturile depasesc numarul 9, pentru a codifica corect in
// baza 16.
var16 = nr10 % 16;
switch (var16)
{
case A: {
rest[nrApel1] = var16;
break;
}
case B: {
rest[nrApel1] = var16;
break;
}
case C: {
rest[nrApel1] = var16;
break;
}
case D: {
rest[nrApel1] = var16;
break;
}
case E: {
rest[nrApel1] = var16;
break;
}
case F: {
rest[nrApel1] = var16;
break;
}
}
rest[nrApel1] = nr10 % 16;
if(nr10 < 16) return nr10;
// ultimul ct este considerat primul bit util.
// La un nou apel, nr10 are rol de ct.
else {
nrApel1++;
_baza10_16(nr10/16, rest);
}
}Gottfried Wilhelm Leibniz (1646-1716) a inventat sistemul binar
Gottfried Leibniz sa nascut n Leipzig, Germania. El a studiat dreptul la Universitatea din oraul su natal i n 1675 a pus bazele calculului diferenial i integral.
In 1676 a publicat "Noua metod de maxim i minim", o expoziie de calcul diferenial. El a avut preocupri n filozofie, matematic i logistic. In 1670 Leibniz mbuntete maina inventat de Blaise Pascal, prin adugarea de capabiliti nmulire, mprire i de rdcin ptratic.
n 1979 creeaz i prezint modul de lucru n aritmetica binar, bazat pe "zero" i "unu", care secole mai trziu, va servi pentru a standardiza simbolurile utilizate pentru a procesa informaiile n computerele moderne.