P. 1
Elemente de arhitectură a sistemelor de calcul şi operare

Elemente de arhitectură a sistemelor de calcul şi operare

5.0

|Views: 5,117|Likes:
Published by Cătălin

More info:

Published by: Cătălin on Apr 10, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/11/2014

pdf

text

original

memor

Stocarea Little Endian vs. Big Endian

Modalitatea de aranjare a datelor (reprezentate pe mai mulţi octeţi)
în memoria calculatorului nu este aceeaşi pentru toate tipurile de
microprocesoare. De fapt, cei doi „titani” ai producţiei de cipuri
microprocesoare, Intel şi Motorola, au stabilit convenţii diferite de
reprezentare a datelor.

Iniţial, Intel a stabilit o convenţie de reprezentare a datelor de
dimensiune de 16 biţi (2 octeţi) prin împărţirea în doi octeţi şi stocarea în
ie întâi a octetului cel mai puţin semnificativ (denumit şi

161

Memoria şi magistralele de sistem

CMPSO – cel mai puţin semnificativ octet) şi apoi a octetului CMSO – cel
mai semnificativ octet
. Această convenţie a luat numele de Little-Endian.
Mai târziu, Motorola a dorit să schimbe această modalitate de
stocare a datelor pe 16 biţi, raţionând în mod invers: se stochează mai întâi
octetul cel mai semnificativ şi după aceea octetul mai puţin semnificativ.
Această nouă convenţie a fost denumită Big-Endian. Această convenţie are
avantajul că reprezentarea datelor în memorie este identică, de fapt, cu aceea
a scrierii obişnuite a numerelor, numită şi ordinea de tipărire („print
order”
).

Fig. 4.10 Reprezentarea Little-Endian la Intel Pentium

Cele două convenţii diferite de stocare a datelor sunt prezentate în
figurile 4.10 şi 4.11. Figura 4.10 prezintă conţinutul memoriei (aşa cum
apare

cazul unui procesor Intel

Pentium

={1,2,3,4,5,6,7,8,9,10,100,101,

102,1

înfăţişat de un program depanator) în
. Porţiunea de memorie vizualizată conţine trei vectori de întregi cu
date de tip byte (reprezentate pe un singur octet), word (reprezentate pe doi
octeţi) şi int (reprezentate pe patru octeţi). Declaraţiile în C corespunzătoare
celor trei vectori sunt următoarele:

unsigned char r1[]

03,255}

unsigned short r2[]={1,2,3,4,5,100,65533,65534,65535}

unsigned int r3[]={1,2,3,100,255,4096,12500000}

162

Elemente de arhitectură a sistemelor de calcul şi operare

În figura 4.11 este prezentat conţinutul memoriei pentru aceeaşi trei
vectori de întregi de data aceasta în cazul unui microprocesor Motorola
68030. În cele două figuri, fiecare octet apare în reprezentare hexazecimală
(ca o pereche de două cifre hexa, având în vedere că o cifră hexa se
reprezintă pe 4 biţi). Drept urmare, valoarea 02 este în binar 0000 0010 iar
AF este, în binar, 1010 1111.

Fig. 4.11 Reprezentarea Big-Endian la Motorola 68030

Din analiza celor două tabele observăm că întregii reprezentaţi pe un
octet (tipul char) au aceeaşi reprezentare în ambele cazuri (Intel şi
Motorola). Întregii pe 16 biţi (2 octeţi – tipul short) au cei doi octe
inversa

tor UNIX poate apărea problema inter-

s

intitulat dd
care poate face conversia între formatele Little-Endian şi Big-Endian. De
e
S

la (Big-

E

Endian).

ţi
ţi, la fel ca şi în cazul întregilor pe 32 de biţi (4 octeţi – tipul int). În
concluzie, observăm că dacă toţi vectorii ar fi de tipul unsigned char (pe un
singur octet), nu ar fi apărut nici o diferenţă sau problemă de ordonare.
Citirea unui fişier stocat prin folosirea convenţiei Little-Endian pe un
calculator ce utilizează Big-Endian va fi însă imposibilă.
De asemenea, atunci când se transferă fişiere ce conţin date
numerice de pe un PC pe un calcula
chimbării octeţilor; în acest sens, pe UNIX există un program

xemplu, pentru a transfera fişiere de pe un calculator PC pe un calculator
un, ele trebuiesc convertite. Sun utilizează convenţia de la Motoro
ndian) în timp ce Microsoft foloseşte convenţia Intel (Little-

163

Memoria şi magistralele de sistem

O altă diferenţă apare, de regulă, la transferul unui fişier text de pe
un calculator UNIX pe un PC sau invers. Acest lucru se întâmplă datorită
caracterului utilizat pentru marcarea sfârşitului de linie. Aplicaţiile de pe
calculatoarele PC folosesc caracterul ^M (CR – Carriage Return – Retur de
car) în timp ce aplicaţiile de pe UNIX utilizează caracterul ^J (LF – Line
Feed – Linie nouă).

În figura 4.12 este prezentat un alt exemplu pe 64 de biţi (8 octeţi).
Dacă la Motorola reprezentarea în memorie este reprezentarea „print order”
(cazul a), la Intel cei 8 octeţi sunt scrişi în memorie în ordine inversă decât
la Motorola (cazul b).

Fig. 4.12 Reprezentări Big-Endian şi Little Endian pe 64 de biţi

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->