1. Baze de numeraie. 2. Operaii aritmetice i logice n diferite baze de numeraie. 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 ntmpinate de un novice n momentul n care ncepe s nvee limbajul de asamblare este legat de utilizarea sistemelor de numeraie binar i hexazecimal. Dei nu poate fi tgduit faptul c dificultile de nvare sunt semnificative, avantajele ctigate n urma acestui proces sunt nsemnate n domenii ca algebra boolean, reprezentarea numerelor cu semn sau codarea caracterelor.
1. Baze de numeraie.
Cea mai cunoscut baz de numeraie, cel mai des utilizat n viaa de zi cu zi, este baza 10, care folosete pentru reprezentarea numerelor cifrele de la 0 la 9. Este binecunoscut faptul c fiecare cifr aflat n stnga virgulei reprezint o valoare ntre 0 i 9 nmulit cu o putere pozitiv a lui 10, n timp ce la dreapta virgulei valorile se nmulesc cu o putere negativ a lui 10. Puterile cresc, respectiv scad din unu n unu pornind de la virgul spre stnga, respectiv spre dreapta. De exemplu, reprezentarea numrului 123,456 este
n lumea calculatoarelor ntietate au bazele 2 i 16. Baza 2 are dicionarul format din cifrele 0 i 1. Reprezentarea unui numr se face la fel ca i n cazul bazei 10, cu deosebirea c, de aceast dat, valorile se nmulesc cu puteri ale lui 2. Ca urmare, este uor de realizat conversia unui numr din baza 2 n baza 10:
Operaia invers, conversia din baza 10 n baza 2, este mai laborioas, numrul zecimal fiind mprit succesiv la 2, atta timp ct ctul este mai mare dect 1. Reprezentarea binar este dat de ctul ultimei mpriri urmat de resturile mpririlor anterioare n ordine invers: 2
Marea problem a sistemului binar este numrul mare de cifre folosite pentru reprezentarea unei valori. Dup cum se poate vedea i din exemplele de mai sus pentru a reprezenta un numr 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 numeraie binar. Toate aceste probleme sunt rezolvate de ctre baza 16, al crei set de valori cuprinde cifrele de la 0 la 9 i literele de la A la F. Principalele avantaje ale acestei abordri sunt faptul c reprezentarea numerelor este foarte compact i uurina cu care acestea pot fi convertite n baza 2 i invers:
1 0 0 0 1 1 1 1 1 0 1 0 - baza 2
8 F A - baza 16
3 A E - baza 16
0 0 1 1 1 1 0 1 0 1 1 1 - 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 numr hexazecimal ntr-unul zecimal, urmm aceleai reguli ca i n cazul bazei 2, cu meniunea c de aceast dat folosim puteri ale lui 16:
Conversia din baza 10 n baza 16 poate fi fcut n dou moduri. Primul dintre ele este asemntor cu procedura urmat n cazul bazei 2, adic se fac mpriri succesive la 16, pn cnd ctul devine mai mic dect 16, numrul n hexa fiind dat de ultimul ct i de resturile luate n ordine invers, operaie care necesit mult atenie din cauza cifrelor hexa de la A la F. Varianta mai simpl este conversia numrului zecimal n binar, urmat de conversia din binar n hexazecimal.
Tabelul 1. Reprezentarea numerelor n diferite baze de numeraie.
O alt baz de numeraie, mai puin folosit n sistemele de calcul, este baza 8, care folosete pentru reprezentarea unui numr cifrele de la 0 la 7. Sistemele care o utilizau foloseau pentru reprezentarea informaiei registre de 12 bii.
2. Operaii aritmetice i logice n diferite baze de numeraie.
Operaiile aritmetice clasice din baza 10, adunarea, scderea, nmulirea i mprirea, pot fi efectuate i n bazele 2 i 16. Dei n ziua de azi exist calculatoarele de buzunar care rezov fr probleme astfel de situaii, o bun nelegere a lor mbuntete performanele unui 4 programator. Ca urmare ne mrginim s semnalm 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.
Dei n cazul adunrii suntem tentai, ca urmare a obinuinei noastre de a lucra n baza 10, s rspundem 10h, acest lucru nu este corect. ntr-adevr, 9 adunat cu 1 d 10, numai c 10 n baza 16 este 0Ah i nu 10h, care este de fapt, 16. Acelai lucru este valabil i pentru scdere, noi scznd de fapt 1 din 16 i nu din 10. Este evident deci c rspunsul corect este 15, adic 0Fh. Operaiile logice pe bii care pot fi fcute n bazele 2 i 16 sunt n numr de patru: AND, OR, XOR (sau exclusiv) i NOT, iar tabelele de adevr corespunztoare sunt date mai jos:
Tabelul 2. Tabelul de adevr al funciei AND.
Tabelul 3. Tabelul de adevr al funciei OR.
Tabelul 4. Tabelul de adevr al funciei XOR.
Tabelul 5. Tabelul de adevr al funciei NOT.
5 Dup cum se poate vedea i din tabelele de adevr, rezultatul funciei 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 puin un operand este 1 i 0 dac ambii operanzi sunt nuli. XOR (SAU-EXCLUSIV) are ca rezultat valoarea 1 dac operanzii sunt diferii i 0 dac sunt identici, iar NOT neag operandul. Operaiile logice pe bii sunt deosebit de utile dac vrem s modificm anumite valori dintr-un grup de bii fr a afecta restul biilor. Aceste operaii sunt cunoscute sub numele de mascri i pot fi fcute folosind oricare din operaiile logice de mai sus.
3. Reprezentarea numerelor ntregi. Complement fa de 2.
Exist mai multe sisteme de reprezentare a numerelor ntregi, cel mai rspndit fiind cel n complement fa de 2. n acest sistem bitul cel mai semnificativ (MSB) precizeaz semnul numrului, motiv pentru care este numit i bit de semn. Astfel, dac bitul de semn este 0, numrul reprezentat este pozitiv, iar dac bitul de semn este 1, numrul reprezentat este negativ. Avnd la dispoziie n bii se pot reprezenta numerele cuprinse ntre -2 n-1 i 2 n-1 -1. n cazul valorilor pozitive, pentru a obine valoarea n complement fa de 2, numrul se reprezint binar pe n-1 bii i se completeaz cu 0 pe poziia MSB. Transformarea invers, din complement fa de 2 n zecimal, este de fapt conversia numrului din binar n zecimal. Pentru valorile negative, numrul se reprezint fr semn pe n-1 bii, se complementeaza toi biii (0 devine 1 i reciproc), apoi se aduna 1 cu transport i se completeaz cu 1 pe poziia MSB, obinndu-se valoarea n complement fa de 2. Invers, se realizeaz complementarea tuturor biilor, 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 dispoziie 4 bii. Conform celor enunate mai sus, valorile se ntind ntre -8 i 7.
Tabelul 6. Reprezentarea numerelor cu semn pe 4 bii.
De remarcat faptul c dac numerele de mai sus sunt reprezentate pe mai mult de 4 bii se face extensia bitului de semn, adic are loc completarea biilor suplimentari cu bitul de semn. Astfel, 7 reprezentat pe 4 bii este 7h, iar pe 8 bii este 07h, n timp ce -7 reprezentat pe 4 bii este 9h, iar pe 8 bii, F9h. 6
4. Formatul BCD.
n diverse sisteme de afiare 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 bii n formatul BCD mpachetat i pe 8 bii n formatul BCD despachetat. Un exemplu de conversie din baza 10 n format BCD mpachetat i invers este prezentat mai jos:
Calculatoarele dispun, de obicei, de instruciuni speciale pentru calcule n format BCD. Sunt unele probleme care trebuie avute n vedere, i anume, operaiile de corecie care trebuie fcute dup (sau naintea) operaiilor n BCD, deoarece doar 10 din cele 16 combinaii binare posibile sunt cifre BCD corecte.
5. Reprezentarea numerelor reale.
Numerele reale (fracionare) 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 numr finit de cifre semnificative, att pentru partea ntreag ct i pentru cea fracionar. Considernd baza de numeraie b, n cifre pentru partea ntreag i m cifre pentru partea fracionar, un numr real x se va reprezenta prin expresia:
x = i n *b n + + i 1 *b 1 + i 0 *b 0 + f 1 *b -1 + + f m *b -m ,
n care cifrele i n , , i 0 reprezint partea ntreag, iar cifrele f 1, , f m reprezint partea fracionar a lui x. Cifrele sunt considerate n baza b, iar o alt form de a scrie numrul x este
x (b) = i n i 1 i 0 . f 1 f m
Numrul de cifre din dreapta i din stnga 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 * B E
unde: 7 - S este numit bit de semn i este 1 pentru numerele negative i 0 pentru cele pozitive; - M este numit mantis (sau fracie) i este un numr pozitiv subunitar reprezentat n baza B; - B este numit baza (uzual este 2 sau 16); - E este numit exponent i este un numr ntreg cu semn.
Mantisa M se numete normalizat dac prima cifr dup virgul este semnificativ (diferit de 0). Exponentul se reprezint de obicei deplasat, n sensul c se memoreaz un numr de forma E + K, unde K este o constant astfel aleas nct E + K s fie ntodeauna pozitiv, rezolvndu-se problema memorrii semnului exponentului. Precizia reprezentrii este dat de numrul de bii pe care se reprezint mantisa i numrul de bii alocat exponentului. n standarde se prevede reprezentarea n simpl precizie (M = 24 bii, E = 8 bii) i precizie extins (M = 64 bii i E = 15 bii).
6. Reprezentarea caracterelor.
Pe lng datele numerice, n memoria calculatorului trebuie reprezentate i alte tipuri de date cum ar fi:
- caractere alfabetice (litere); - semne de punctuaie; - caractere de control (folosite pentru comanda diverselor echipamente periferice).
Pe majoritatea calculatoarelor actuale se folosete codul standard ASCII prezentat n tabelul urmtor
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
8
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 bii, 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 folosii toi cei 8 bii pentru reprezentarea unui caracter. Dintre cele 128 de caractere ale codului ASCII standard (avnd valori ntre 0 i 127 n zecimal i ntre 0 i 7Fh n hexazecimal), 32 sunt caractere de control i nu sunt afiabile. Cteva exemple sunt date n cele ce urmeaz:
Unitatea de baz a informaiei memorate n calculator este bitul. Un bit reprezint o cifr binar, iar modelul hardware corespunztor este un bistabil care are dou stri stabile, codificate cu 0 i 1, capabil s memoreze un bit de informaie. Un grup de bistabili formeaz un registru. De exemplu 8 bistabili formeaz un registru de 8 bii iar valorile pe care le poate memora sunt ntre 00000000 i 11111111 avnd denumirea de octet sau byte. Octetul reprezint tipul fundamental de date petru familia de calculatoare 80x86. Memoria calculatorului este vzut ca o succesiune de octei, iar fiecare octet are asociat o adres de memorie format dintr-un numr de bii care d dimensiunea memoriei. Multiplii folosii n tehnica de calcul sunt:
n fiind numrul de bii necesari pentru adresare sau numrul de bii 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 bii cu sau fr semn; un caracter ASCII
WORD 9
Figura 1. Tipurile de date utilizate n limbajul de asamblare.
Ocup doi octei i poate reprezenta:
un ntreg pe 16 bii cu sau fr semn; o secven de dou caractere ASCII o adres de memorie de 16 bii
DOUBLE-WORD
Ocup patru octei i poate reprezenta:
un ntreg pe 32 de bii cu sau fr semn; un numr real n simpl precizie o adres de memorie de 32 de bii
QUAD-WORD
Ocup opt octei i poate reprezenta:
un ntreg pe 64 de bii cu sau fr semn; un numr real n dubl precizie
Dup cum se vede i din figura 1 fiecare dintre aceste tipuri de date, exceptnd 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 regsesc i n limbajele de nivel nalt. Ajuni n acest punct cu studiul se poate spune c am dobndit uneltele necesare pentru a putea porni n nvarea limbajului de asamblare, aa c nainte de a pleca mai departe s lum o pauz activ n care s rezolvm ntrebrile i temele de mai jos.
6. Pornind de la premisa c valorile binare de la problema 4 sunt reprezentri n complement fa de 2 pe 16 bii s se determine valorile zecimale ntregi.
7. Cte 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 Developers Manual.