Sunteți pe pagina 1din 10

Reprezentarea internă a datelor

1. Baze de numeraţie.
2. Operaţii aritmetice şi logice în diferite baze de numeraţie.
3. Reprezentarea numerelor întregi. Complement faţă de 2.
4. Formatul BCD.
5. Reprezentarea numerelor reale.
6. Reprezentarea caracterelor.
7. Tipuri de date fundamentale şi memorarea lor.

Una dintre problemele cele mai importante întâmpinate de un novice în momentul în care
începe să înveţe limbajul de asamblare este legată de utilizarea sistemelor de numeraţie binar şi
hexazecimal. Deşi nu poate fi tăgăduit faptul că dificultăţile de învăţare sunt semnificative,
avantajele câştigate în urma acestui proces sunt însemnate în domenii ca algebra booleană,
reprezentarea numerelor cu semn sau codarea caracterelor.

1. Baze de numeraţie.

Cea mai cunoscută bază de numeraţie, cel mai des utilizată în viaţa de zi cu zi, este baza
10, care foloseşte pentru reprezentarea numerelor cifrele de la 0 la 9. Este binecunoscut faptul că
fiecare cifră aflată în stânga virgulei reprezintă o valoare între 0 şi 9 înmulţită cu o putere
pozitivă a lui 10, în timp ce la dreapta virgulei valorile se înmulţesc cu o putere negativă a lui 10.
Puterile cresc, respectiv scad din unu în unu pornind de la virgulă spre stânga, respectiv spre
dreapta. De exemplu, reprezentarea numărului 123,456 este

1 * 102 + 2 * 101 + 3 * 100 + 4 * 10-1 + 5 * 10-2 + 6 * 10-3.

În lumea calculatoarelor întâietate au bazele 2 şi 16. Baza 2 are “dicţionarul” format din
cifrele 0 şi 1. Reprezentarea unui număr se face la fel ca şi în cazul bazei 10, cu deosebirea că, de
această dată, valorile se înmulţesc cu puteri ale lui 2. Ca urmare, este uşor de realizat conversia
unui număr din baza 2 în baza 10:

110010102
=
1 * 27 + 1 * 26 + 0 * 25 + 0 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 0 * 20
=
128 + 64 + 8 + 2
=
20210.

Operaţia inversă, conversia din baza 10 în baza 2, este mai laborioasă, numărul zecimal
fiind împărţit succesiv la 2, atâta timp cât câtul este mai mare decât 1. Reprezentarea binară este
dată de câtul ultimei împărţiri urmat de resturile împărţirilor anterioare în ordine inversă:

1
673 : 2 = 336
672
336 : 2 = 168
//1 336
168 : 2 = 84
//0 168
84 : 2 = 42
//0 84
42 : 2 = 21
/0 42
21 : 2 = 10
/0 20
10 : 2 = 5
/1 10
5:2=2
/0 4
2:2=1
1 2

Rezultatul final este

67310 = 10101000012.

Marea problemă a sistemului binar este numărul mare de cifre folosite pentru
reprezentarea unei valori. După cum se poate vedea şi din exemplele de mai sus pentru a
reprezenta un număr de trei cifre în baza 10 avem nevoie de 8 cifre în baza 2. Pe de altă parte,
calculatoarele lucrează în logică binară, două nivele de tensiune (de obicei 0 şi 5 V) fiind
asociate celor două valori ale sistemului de numeraţie binar.
Toate aceste probleme sunt rezolvate de către baza 16, al cărei set de valori cuprinde
cifrele de la 0 la 9 şi literele de la A la F. Principalele avantaje ale acestei abordări sunt faptul că
reprezentarea numerelor este foarte compactă şi uşurinţa cu care acestea pot fi convertite în baza
2 şi invers:

100011111010 - baza 2

8 F A - baza 16

3 A E - baza 16

001111010111 - baza 2

Conversia se face pe baza regulilor prezentate în Tabelul 1, adică fiecare grup de 4 cifre
binare corespunde unei cifre hexazecimală, respectiv pentru fiecare cifră hexazecimală avem 4
cifre în baza 2.
Pentru a converti un număr hexazecimal într-unul zecimal, urmăm aceleaşi reguli ca şi în
cazul bazei 2, cu menţiunea că de această dată folosim puteri ale lui 16:

2
1234h
=
1 * 163 + 2 * 162 + 3 * 161 + 4 * 160
=
4096 + 512 + 48 + 4
=
466010.

Conversia din baza 10 în baza 16 poate fi făcută în două moduri. Primul dintre ele este
asemănător cu procedura urmată în cazul bazei 2, adică se fac împărţiri succesive la 16, până
când câtul devine mai mic decât 16, numărul în hexa fiind dat de ultimul cât şi de resturile luate
în ordine inversă, operaţie care necesită multă atenţie din cauza cifrelor hexa de la A la F.
Varianta mai simplă este conversia numărului zecimal în binar, urmată de conversia din binar în
hexazecimal.

Tabelul 1. Reprezentarea numerelor


în diferite baze de numeraţie.

Binar Octal Zecimal Hexazecimal

0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A
1011 13 11 B
1100 14 12 C
1101 15 13 D
1110 16 14 E
1111 17 15 F

O altă bază de numeraţie, mai puţin folosită în sistemele de calcul, este baza 8, care
foloseşte pentru reprezentarea unui număr cifrele de la 0 la 7. Sistemele care o utilizau foloseau
pentru reprezentarea informaţiei registre de 12 biţi.

2. Operaţii aritmetice şi logice în diferite baze de numeraţie.

Operaţiile aritmetice clasice din baza 10, adunarea, scăderea, înmulţirea şi împărţirea, pot
fi efectuate şi în bazele 2 şi 16. Deşi în ziua de azi există calculatoarele de buzunar care rezovă
fără probleme astfel de situaţii, o bună înţelegere a lor îmbunătăţeşte performanţele unui

3
programator. Ca urmare ne mărginim să semnalăm aici doar două din erorile cele mai frecvente
care apar în practică. Astfel,

9h + 1h = 0Ah şi nu 9h + 1h = 10h,

iar

10h – 1h = 0Fh şi nu 10h – 1h = 9h.

Deşi în cazul adunării suntem tentaţi, ca urmare a obişnuinţei noastre de a lucra în baza
10, să răspundem 10h, acest lucru nu este corect. Într-adevăr, 9 adunat cu 1 dă 10, numai că 10 în
baza 16 este 0Ah şi nu 10h, care este de fapt, 16. Acelaşi lucru este valabil şi pentru scădere, noi
scăzând de fapt 1 din 16 şi nu din 10. Este evident deci că răspunsul corect este 15, adică 0Fh.
Operaţiile logice pe biţi care pot fi făcute în bazele 2 şi 16 sunt în număr de patru: AND,
OR, XOR (sau – exclusiv) şi NOT, iar tabelele de adevăr corespunzătoare sunt date mai jos:

Tabelul 2. Tabelul de adevăr al funcţiei AND.

Tabelul 3. Tabelul de adevăr al funcţiei OR.

Tabelul 4. Tabelul de adevăr al funcţiei XOR.

Tabelul 5. Tabelul de adevăr al funcţiei NOT.

4
După cum se poate vedea şi din tabelele de adevăr, rezultatul funcţiei AND (ŞI), este 1
dacă ambii operanzi sunt 1 şi 0 în rest, în timp ce în cazul lui OR (SAU), avem 1 dacă cel puţin
un operand este 1 şi 0 dacă ambii operanzi sunt nuli. XOR (SAU-EXCLUSIV) are ca rezultat
valoarea 1 dacă operanzii sunt diferiţi şi 0 dacă sunt identici, iar NOT neagă operandul.
Operaţiile logice pe biţi sunt deosebit de utile dacă vrem să modificăm anumite valori
dintr-un grup de biţi fără a afecta restul biţilor. Aceste operaţii sunt cunoscute sub numele de
mascări şi pot fi făcute folosind oricare din operaţiile logice de mai sus.

3. Reprezentarea numerelor întregi. Complement faţă de 2.

Există mai multe sisteme de reprezentare a numerelor întregi, cel mai răspândit fiind cel
în complement faţă de 2. În acest sistem bitul cel mai semnificativ (MSB) precizează semnul
numărului, motiv pentru care este numit şi bit de semn. Astfel, dacă bitul de semn este 0,
numărul reprezentat este pozitiv, iar dacă bitul de semn este 1, numărul reprezentat este negativ.
Având la dispoziţie n biţi se pot reprezenta numerele cuprinse între -2n-1 şi 2n-1-1. În cazul
valorilor pozitive, pentru a obţine valoarea în complement faţă de 2, numărul se reprezintă binar
pe n-1 biţi şi se completează cu 0 pe poziţia MSB. Transformarea inversă, din complement faţă
de 2 în zecimal, este de fapt conversia numărului din binar în zecimal. Pentru valorile negative,
numărul se reprezintă fără semn pe n-1 biţi, se complementeaza toţi biţii (0 devine 1 şi reciproc),
apoi se aduna 1 cu transport şi se completează cu 1 pe poziţia MSB, obţinându-se valoarea în
complement faţă de 2. Invers, se realizează complementarea tuturor biţilor, se adună 1 cu
transport, după care se face transformarea din baza 2 în baza 10.
În Tabelul 6 este prezentat un exemplu de reprezentare în complement faţă de 2 în cazul
în care avem la dispoziţie 4 biţi. Conform celor enunţate mai sus, valorile se întind între -8 şi 7.

Tabelul 6. Reprezentarea numerelor cu semn pe 4 biţi.

Valoare Complement
faţă de 2
7 0111
6 0110
5 0101
4 0100
3 0011
2 0010
1 0001
0 0000
-1 1111
-2 1110
-3 1101
-4 1100
-5 1011
-6 1010
-7 1001
-8 1000

De remarcat faptul că dacă numerele de mai sus sunt reprezentate pe mai mult de 4 biţi se
face extensia bitului de semn, adică are loc completarea biţilor suplimentari cu bitul de semn.
Astfel, 7 reprezentat pe 4 biţi este 7h, iar pe 8 biţi este 07h, în timp ce -7 reprezentat pe 4 biţi este
9h, iar pe 8 biţi, F9h.
5
4. Formatul BCD.

În diverse sisteme de afişare a datelor numerice, în care este folosită numai baza 10, se
utilizează codificarea de tip BCD (Binary Coded Decimal). În acest sistem, fiecare cifră zecimală
poate fi reprezentată pe 4 biţi în formatul BCD împachetat şi pe 8 biţi în formatul BCD
despachetat. Un exemplu de conversie din baza 10 în format BCD împachetat şi invers este
prezentat mai jos:

4 3 9 7 - baza 10 0 1 0 1 0 1 1 0 0 0 1 0 1 0 0 0 - BCD

0 1 0 0 0 0 1 1 1 0 0 1 0 1 1 1 - BCD 5 6 2 8 - baza 10

Calculatoarele dispun, de obicei, de instrucţiuni speciale pentru calcule în format BCD.


Sunt unele probleme care trebuie avute în vedere, şi anume, operaţiile de corecţie care trebuie
făcute după (sau înaintea) operaţiilor în BCD, deoarece doar 10 din cele 16 combinaţii binare
posibile sunt cifre BCD corecte.

5. Reprezentarea numerelor reale.

Numerele reale (fracţionare) se pot reprezenta în două moduri distincte, care sunt numite
reprezentare în virgulă fixă şi reprezentare în virgulă mobilă.

5.1. Reprezentarea în virgulă fixă.

Reprezentarea numerelor reale în virgulă fixă presupune un număr finit de cifre


semnificative, atât pentru partea întreagă cât şi pentru cea fracţionară. Considerând baza de
numeraţie b, n cifre pentru partea întreagă şi m cifre pentru partea fracţionară, un număr real x se
va reprezenta prin expresia:

x = in*bn + … + i1*b1 + i0*b0 + f1*b-1 + … + fm*b-m,

în care cifrele in, …, i0 reprezintă partea întreagă, iar cifrele f1,…, fm reprezintă partea fracţionară
a lui x. Cifrele sunt considerate în baza b, iar o altă formă de a scrie numărul x este

x(b) = in…i1i0 . f1…fm

Numărul de cifre din dreapta şi din stânga virgulei (în tehnica de calcul virgula este
reprezentată de punct) stabilesc precizia de reprezentare.

5.2. Reprezentarea în virgulă mobilă.

În această reprezentare, numerele sunt considerate de forma:

(-1)S * M * BE

unde:

6
- S este numit bit de semn şi este 1 pentru numerele negative şi 0 pentru cele pozitive;
- M este numit mantisă (sau fracţie) şi este un număr pozitiv subunitar reprezentat în baza
B;
- B este numită baza (uzual este 2 sau 16);
- E este numit exponent şi este un număr întreg cu semn.

Mantisa M se numeşte normalizată dacă prima cifră după virgulă este semnificativă (diferită
de 0). Exponentul se reprezintă de obicei deplasat, în sensul că se memorează un număr de forma
E + K, unde K este o constantă astfel aleasă încât E + K să fie întodeauna pozitiv, rezolvându-se
problema memorării semnului exponentului.
Precizia reprezentării este dată de numărul de biţi pe care se reprezintă mantisa şi numărul de
biţi alocat exponentului. În standarde se prevede reprezentarea în simplă precizie (M = 24 biţi, E
= 8 biţi) şi precizie extinsă (M = 64 biţi şi E = 15 biţi).

6. Reprezentarea caracterelor.

Pe lângă datele numerice, în memoria calculatorului trebuie reprezentate şi alte tipuri de


date cum ar fi:

- caractere alfabetice (litere);


- semne de punctuaţie;
- caractere de control (folosite pentru comanda diverselor echipamente periferice).

Pe majoritatea calculatoarelor actuale se foloseşte codul standard ASCII prezentat în


tabelul următor

Tabelul 7. Codul ISO de 7 biti (CCITT nr. 5, ASCII).

bit 7 0 0 0 0 1 1 1 1
bit 6 0 0 1 1 0 0 1 1
bit 5 0 1 0 1 0 1 0 1
bit 4 bit 3 bit 2 bit 1 0 1 2 3 4 5 6 7
0 0 0 0 0 NUL DLE SP 0 @ P ’ p
0 0 0 1 1 SOH DC1 ! 1 A Q a q
0 0 1 0 2 STX DC2 ” 2 B R b r
0 0 1 1 3 ETX DC3 L(#) 3 C S c s
0 1 0 0 4 EOT DC4 $(X) 4 D T d t
0 1 0 1 5 ENQ NAK % 5 E U e u
0 1 1 0 6 ACK SYN & 6 F V f v
0 1 1 1 7 BEL ETB , 7 G W g w
1 0 0 0 8 BS CAN ( 8 H X h x
1 0 0 1 9 HT EM ) 9 I Y i y
1 0 1 0 10 LF SUB * : J Z j z
1 0 1 1 11 VT ESC + ; K [ k {
1 1 0 0 12 FF FS , < L \ l |
1 1 0 1 13 CR GS - = M ] m }
1 1 1 0 14 SO RS . > N ^ n -
1 1 1 1 15 SI US / ? O - o DEL

7
Caractere speciale:
SP - Space
CR - Carriage Return
LF - Line Feed
EOT - End Of Trasmission
ESC - Escape
DEL - Delete

Codul ASCII standard este un cod pe 7 biţi, deci cuprinde 128 de caractere distincte,
fiecare caracter fiind reprezentat pe un octet, în care bitul cel mai semnificativ este zero. De notat
că mai există şi codul ASCII extins, în care sunt folosiţi toţi cei 8 biţi pentru reprezentarea unui
caracter.
Dintre cele 128 de caractere ale codului ASCII standard (având valori între 0 şi 127 în
zecimal şi între 0 şi 7Fh în hexazecimal), 32 sunt caractere de control şi nu sunt afişabile. Câteva
exemple sunt date în cele ce urmează:

b7 b6 b5 b4 b3 b2 b1
‘a’ - 0 1 1 0 | 0 0 0 1 binar sau 61h (hexa)
‘Z’ - 0 1 0 1 | 1 0 1 0 binar sau 5Ah (hexa)
‘1’ - 0 0 1 1 | 0 0 0 1 binar sau 31h (hexa)
‘9’ - 0 0 1 1 | 1 0 0 1 binar sau 39h (hexa)
‘ESC’ - 0 0 0 1 | 1 0 1 1 binar sau 1Bh (hexa)

7. Tipuri de date fundamentale şi memorarea lor.

Unitatea de bază a informaţiei memorate în calculator este bitul. Un bit reprezintă o cifră
binară, iar modelul hardware corespunzător este un bistabil care are două stări stabile, codificate
cu ‘0’ şi ‘1’, capabil să memoreze un bit de informaţie.
Un grup de bistabili formează un registru. De exemplu 8 bistabili formează un registru
de 8 biţi iar valorile pe care le poate memora sunt între 00000000 şi 11111111 având denumirea
de octet sau byte. Octetul reprezintă tipul fundamental de date petru familia de calculatoare
80x86. Memoria calculatorului este văzută ca o succesiune de octeţi, iar fiecare octet are asociată
o adresă de memorie formată dintr-un număr de biţi care dă dimensiunea memoriei.
Multiplii folosiţi în tehnica de calcul sunt:

1 kilo = 210 octeti = 1.024 octeti = 1Koctet (n = 10)


1 mega = 220 octeti = 1.048.576 octeti = 1Moctet (n = 20)
1 giga = 230 octeti = 1.073.741.824 octeti = 1Goctet (n = 30),

n fiind numărul de biţi necesari pentru adresare sau numărul de biţi ai adresei.
Tipurile de date de bază cu care operează limbajul de asamblare sunt (Figura 1):

• BYTE

Ocupă un octet şi poate reprezenta:

un întreg pe 8 biţi cu sau fără semn;


un caracter ASCII

• WORD

8
Figura 1. Tipurile de date utilizate în limbajul de asamblare.

Ocupă doi octeţi şi poate reprezenta:

un întreg pe 16 biţi cu sau fără semn;


o secvenţă de două caractere ASCII
o adresă de memorie de 16 biţi

• DOUBLE-WORD

Ocupă patru octeţi şi poate reprezenta:

un întreg pe 32 de biţi cu sau fără semn;


un număr real în simplă precizie
o adresă de memorie de 32 de biţi

• QUAD-WORD

Ocupă opt octeţi şi poate reprezenta:

un întreg pe 64 de biţi cu sau fără semn;


un număr real în dublă precizie

După cum se vede şi din figura 1 fiecare dintre aceste tipuri de date, exceptând octetul,
are o parte high şi o parte low. Fiecare tip de date este definit cu ajutorul unei directive specifice,
iar formatele de reprezentare a datelor se regăsesc şi în limbajele de nivel înalt.
Ajunşi în acest punct cu studiul se poate spune că am dobândit uneltele necesare pentru a
putea porni în învăţarea limbajului de asamblare, aşa că înainte de a pleca mai departe să luăm o
pauză activă în care să rezolvăm întrebările şi temele de mai jos.

9
Întrebări şi teme

1. Convertiţi următoarele valori zecimale în binar:

a) 128 b) 4096 c) 256 d) 65536 e) 254


f) 9 g) 1024 h) 15 i) 344 j) 998
k) 255 l) 512 m) 1023 n) 2048 o) 4095
p) 8192 q) 16,384 r) 32,768 s) 6,334 t) 12,334
u) 23,465 v) 5,643 w) 464 x) 67 y) 888

2. Convertiţi următoarele valori binare în zecimal:

a) 1001 1001 b) 1001 1101 c) 1100 0011 d) 0000 1001 e)1111 1111
f) 0000 1111 g) 0111 1111 h) 1010 0101 i) 0100 0101 j) 0101 1010
k) 1111 0000 l) 1011 1101 m) 1100 0010 n) 0111 1110 o) 1110 1111
p) 0001 1000 q) 1001 111 1 r) 0100 0010 s) 1101 1100 t) 1111 0001
u) 0110 1001 v) 0101 1011 w) 1011 1001 x) 1110 0110 y) 1001 0111

3. Convertiţi valorile binare de la exerciţiul 2 în hexazecimal.

4. Convertiţi următoarele valori hexazecimale în binar:

a) 0ABCD b) 1024 c) 0DEAD d) 0ADD e) 0BEEF


f) 8 g) 05AAF h) 0FFFF i) 0ACDB j) 0CDBA
k) 0FEBA l) 35 m) 0BA n) 0ABA o) 0BAD
p) 0DAB q) 4321 r) 334 s) 45 t) 0E65
u) 0BEAD v) 0ABE w) 0DEAF x) 0DAD y) 9876

5. Calculaţi în hexazecimal:

a) 1234 +9876 b) 0FFF - 0F34 c) 100 – 1 d) 0FFE - 1

6. Pornind de la premisa că valorile binare de la problema 4 sunt reprezentări în


complement faţă de 2 pe 16 biţi să se determine valorile zecimale întregi.

7. Câte cifre hexazecimale sunt într-un:

a)byte ? b)word ? c)double word ?

Bibliografie:

1. Gheorghe Muscă, Programare în limbaj de asamblare, Ed. Teora, 1998.


2. Randall Hyde, The Art of Assembly Language.
3. Paul A. Carter, PC Assembly Language, 2000.
4. www.intel.com, The IA-32 Intel Architecture Software Developer’s Manual.

10

S-ar putea să vă placă și