introducere în organizarea calculatoarelor și limbaje de...
TRANSCRIPT
Curs3–Reprezentareadatelor 1
Introducereînorganizareacalculatoarelorșilimbajedeasamblare(IOCLA)
Reprezentareadatelorînsistemeledecalcul
Modificat:Oct-9-18
Curs3–Reprezentareadatelor 2
Cuprins
• Datenumerice(întregi)• Reprezentareanumerelorînbaza2• Operaţiicunumereînbaza2• Reprezentareanumerelorînbaza16• Reprezentareanumerelorcusemn• Reprezentareatipurilordedatedenivelînalt
Curs3–Reprezentareadatelor 3
Suport
• IntroductiontoAssemblyLanguageProgramming* AnexaA,fără4.1-A4.3
Curs3–Reprezentareadatelor 4
DATENUMERICE(ÎNTREGI)
Curs3–Reprezentareadatelor 5
Cereprezentămcu“date”?
• instrucţiuni-princodurideinstrucţiuni• date* logice:Adevarat/Fals,Închis/Deschis,Pornit/Oprit* numerice:întregi,fracţionare,pozitive/negative* alfanumerice:caractere,text* multimedia:sunet,imagine(audio/video)
• structuridedate
Curs3–Reprezentareadatelor 6
Datenumerice
• Tipuriledebază* Caractere,întregi,unelenumerefracţionare(floatingpoint)* Toatecelelaltetipuriexistentesuntderivatedintipurilede
bază
• Tipurileîntregi* Numerecusemnsaufărăsemn
» Celecusemnsuntconsideratepozitive
* Aureprezentarepeunnumărdebiţi(8,16,32,64debiţi)
• Tipurilefracţionare* Virgulăfixăsauvirgulămobilă(floatingpoint)* Uzualreprezentareînvirgulămobilă* Vorfidetaliateîncapitolul9
6
Curs3–Reprezentareadatelor 7
Lungimetipuridedateîntregi
• signed/unsignedchar* lungime1octet(8biti)(arh.pe32și64debiţi)
• signed/unsignedshortint* 2octeţi(16biţi)(arh.pe32și64debiţi)
• signed/unsignedint* lungime4octeţi(32biţi)(arh.pe32și64debiţi)
• signed/unsignedlongint* lungime4octeţi(32biţi)(arh.pe32debiţi)* Lungime8octeţi64debiţi)(arh.pe64debiţi)
• signed/unsignedlonglongint* lungime8octeţi(64biţi)(arh.pe32și64debiţi)
Curs3–Reprezentareadatelor 8
Numereîntregifărăsemn
• Reprezentareprinsimboluri* Modeluldescriereromanăanumerelor
IL=59XXXXXIX=59
* Dezavantaj:nuneapăratoreprezentareunică,spaţiumareocupat
• Reprezentarepoziţională* Reprezentareunică* Alegereauneibazedenumeratie
» Înfuncţiedecriteriisubiectivesauobiective» Ex:înprezentbaza10,fenicieniiaveaubaza60,calculatoareleutilizeazăbaza2
Curs3–Reprezentareadatelor 9
Bazedenumeraţie
•
Curs3–Reprezentareadatelor 10
Reprezentareanumerelorînbaza10
• 2891=2*10^3+8*10^2+9*10^1+1• Preferatăpentruspecificuluman(număratpe
degete)
Curs3–Reprezentareadatelor 11
REPREZENTAREANUMERELORÎNBAZA2
Curs3–Reprezentareadatelor 12
Reprezentareanumerelorînbaza2
• Reprezentarebinară• Ușordeimplementatpecalculator• Douăniveluri:închis/deschis,sus/jos* circuitedigitale(vezicursdeelectronică)* bit=0->bitulnuestesubtensiune* bit=1->estesubtensiune
• Bit=BinaryDigit
Curs3–Reprezentareadatelor 13
Formatebinaredereprezentare
• Bit* binarydigit* unitateaelementarădeinformaţie* stareaunuibistabil,sauauneiceluleelementarede
memorie
• Octet(byte)* grupde8biţi* unitateaelementaradeadresarelacelemaimulte
calculatoareactuale(inclusivIntelx86)* poatereprezentaovaloarenumerică,uncaracter(ASCII)
Curs3–Reprezentareadatelor 14
Conversiidinbaza2înbaza10
• 10111010:1*2^7+0*2^6+1*2^5+1*2^4+1*2^3+0*2^2+1*2^1+0*2^0=186
• Rapide:* 10000000:?* 00100000:?* 00011111:?* 00001111:?* 00001110:?
Curs3–Reprezentareadatelor 15
Conversiidinbaza10inbaza2
• Clasic:seîmparteladoi,sereţinebitulderest;apoiseiacâtul,seîmpartela2,etc.
• Maiingineresc:seadunăsuccesivputerialelui2* 200=128+64+8=11001000* 163=128+32+2+1=10100011
• Rapid:* 32:?* 65:?* 15:?* 14:?
Curs3–Reprezentareadatelor 16
OPERAŢIICUNUMEREÎNBAZA2
Curs3–Reprezentareadatelor 17
Operaţiiaritmeticeînbaza2
• Adunare,scădere,împărţire,înmulţire• Aceleașiprincipiicalabaza10• Făcutedecalculator• Improbabilsăfienevoiedefăcutdenoi* Dacăestecazul,facemconversiaînainteșiînapoiîn/din
baza10
Curs3–Reprezentareadatelor 18
Operatiipebiţi
• Bitwiseoperations• BitwiseORvs.LogicalOR• AND• NOT• XOR(ExclusiveOR)
Curs3–Reprezentareadatelor 19
Deplasări(shift)
• Shiftright(SHR)• Shiftleft(SHL)• shiftlogicvs.shiftaritmetic* clarificămlanumerecusemn
• CeînseamnăSHRN,2(shiftladreaptacu2)?• CeînseamnăSHLN,2(shiftladreaptacu2)?
Curs3–Reprezentareadatelor 20
Măștidebiţi
• Valoripredefinite• Folositepentruverificare• Fiemasca11110000* CeînseamnăN&masca?(bitwiseAND)* CeînseamnăN|masca?(bitwiseOR)
• CeînseamnăN|0,N&0,N&MAX,N|MAX?• CeînseamnăN^N?(eXclusiveOR)• CeînseamnăN^0,N^MAX?
Curs3–Reprezentareadatelor 21
Exemplepracticedeoperatiipebiţi
• Reţelistică(mascădesubreţea,adresadesubreţea)• Hărţidebiţi(bitmaps):pentruspaţiuocupatpuţin:
gestiuneaspaţiuluiliberpedisc• Opţiuniactivesaunu:permisiuniUnixpefișiere
Curs3–Reprezentareadatelor 22
REPREZENTAREANUMERELORÎNBAZA16
Curs3–Reprezentareadatelor 23
Reprezentareanumerelorînbaza16
• Numităreprezentareînhexazecimal* Informal:“înhexa”
• Deceesteutilă?* Formăcompactăareprezentăriibinare* 4biţiformeazăocifrăhexa(nibble)
• 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F• Reprezentareîningineriacalculatoarelor* 0x89AB* 89ABh
Curs3–Reprezentareadatelor 24
Scenariideutilizarereprezentarehexa
• Dumphexapentrudatebinare* Utilitareprecumxxd,hexdump,od
• Vizualizareadresedememorie* Dezasamblare* Debugging* Hardware
• Generaredatebinare* Demoecho,python,perl(peLinux)
Curs3–Reprezentareadatelor 25
Conversiibaza2<->baza16
• 2->16* Seiaucâte4biţișisetransformăînnibble* 1101:B,1110:E,11000101:C5
• 16->2* Setransformăfiecarenibbleînșirde4biţi* A:1010,C:1100,87:10000111
• Exerciţiirapide* 11000000 10101000:?* 10010011 00111110:?* ABCD:?* 9876:?
Curs3–Reprezentareadatelor 26
Conversiibaza10<->baza16
• Deobiceiaresenspentrunumerepânăîn256
• 10->16* Seîmpartela16șisefolosesccâtulșirestul* 190->16*11+14->16*B+E->0xBE* 95->16*5+15->16*5+F->0x5F
• 16->10* Înmulţirecu16aprimeicifreșiadunareaultimeia* AA->16*A+A->160+10->170* CC->16*C+C->192+12->204
Curs3–Reprezentareadatelor 27
• Demoîngdb* set$i=26* p/d$i*2* p/x$i* p/t$i* p/d0x22* helpx* set$j=-11* p/d($j&0xff)* Însasm:addpebyte11+245
Curs3–Reprezentareadatelor 28
Împachetareadatelor(endianess)
• LSB:LeastSignificantByte• MSB:MostSignificantByte• Littleendian:LSBlaadresadememorieceamai
mică• Bigendian:MSBlaadresadememorieceamaimică• Importantlatransferuldedateîntresisteme
diferite;dealesunformatcomun
• x86:littleendian• Internet:bigendian
Curs3–Reprezentareadatelor 29
ReprezentareLittleEndian
* Octeti:3AH,33H,12H
* Cuvinte:1234H,56ABH,FFFFH
* Dublu-cuvinte:01234567H,89ABCDEFH
3A 33 12 Adresă: x x+1 x+2 x+3 x+4
34 12 AB Adresă: x x+1 x+2 x+3 x+4 x+5 x+6 x+7
FF 56 FF
67 45 23 Adresă: x x+1 x+2 x+3 x+4 x+5 x+6 x+7 x+8 x+9
CD 01 EF AB 89
Curs3–Reprezentareadatelor 30
• DemoînSASM* v1db1,2,3,4,0xa,0xb,0xc,0xd* v2dw0x0102,0x0304,0x0a0b,0x0c0d* v3dd0x01020304,0xabcd6789* Examinarecux/20xb&v1,x/20xh&v1,x/20xw&v1,etc
Curs3–Reprezentareadatelor 31
REPREZENTAREANUMERELORCUSEMN
Curs3–Reprezentareadatelor 32
Câtînseamnă0xFF?
• Depinde* F*16+F=255,pentrunumărfărăsemn* -1pentrureprezentarecusemn
• Într-oreprezentarecusemntoţibiţiisuntparteanumărului(fiecarebitareoponderevalorică)
Curs3–Reprezentareadatelor 33
Ideeadereprezentareanumerelorcusemn
• Sealocăprimulbitpentrusemn* 0:numărpozitiv* -1:numărnegativ
• Restulbiţilordauvaloarea
Curs3–Reprezentareadatelor 34
Intuiţiareprezentăriinumerelorcusemn
0
valoareaefectivă
echivalentreprezentarefărăsemn
MAX_SIGNED
MIN_SIGNED
-1
Curs3–Reprezentareadatelor 35
Exempledereprezentarecusemn
• 8biţi* 00000000(0x00):0* 01111111(0x7F):127(SCHAR_MAX)* 10000000(0x80):-128(SCHAR_MIN)* 11111111(0xFF):-1
• 16biţi* 00000000 00000000 (0x0000):0* 01111111 11111111 (0x7FFF):32767(SHRT_MAX)* 10000000 00000000 (0x8000):-32768(SHRT_MIN)* 11111111 11111111 (0xFFFF):-1
Curs3–Reprezentareadatelor 36
Complementfaţăde2
• Sistemuluzualdereprezentareanumerelorcusemn
• ÎlvomnumiC2• Numerelepozitiverămânneschimbate• Numerelenegative* Aucaprimbit1(bituldesemn)* Algoritm
» 1.Seneagătotșiruldebiţireprezentândnumărulînmodul» 2.Seadună1lavaloarearespectivă,calaadunărileîntrenumereîntregifărăsemn
» 3.Setrunchiazășiruldebiţiladimensiuneainiţială
Curs3–Reprezentareadatelor 37
CaracteristiciC2
• PentruoreprezentarepeNbiţi,acoperăplaja
* Pentru8biţi:[-128,127]* Pentru16biţi:[-32768,32767]
• DacăseincrementeazăfărăsemnMAX(reprezentareamaximă)seajungeînMIN(reprezentareaminimă)* Demo
• Reprezentarealui-1eechivalentulceluimaimarenumărdacăarfireprezentareafărăsemn(numaibiţide1)
Curs3–Reprezentareadatelor 38
ExempledereprezentaredenumereînC2
• Pe8biţi• -20(not20+1)* 20:00010100* not20:11101011* -20înC2(not20+1):11101011+1:11101100
• Cereprezinta11010101(0xD5),dacăștimcănumărulecusemn?* Primulbit:1,negativ* R-1:11010101–1=11010100* -N=not(R-1)=00101011=43* N=-43
Curs3–Reprezentareadatelor 39
IncrementăriinteresanteînC2
• SCHAR_MAX+1=SCHAR_MIN* 01111111+1=10000000* signed_value(10000000)=-(NOT1000000+1)=-(01111111
+1)=-10000000=-0x80=-128(SCHAR_MIN)
• -1+1=0(Duh!)* 11111111+1=00000000
Curs3–Reprezentareadatelor 40
OperaţiiaritmeticeînC2
• SCHAR_MIN+SCHAR_MAX* 10000000+01111111=11111111(-1)
• -1+10* 11111111+00001010=00001001
• 100+100(ambelenumerecusemn)* 01100100+01100100=11010000->-56* seschimbăbituldesemndeladoioperanzidesemnopus
» seactivează“overflowflag”» informaţiecărezultatuleste“incorect”
Curs3–Reprezentareadatelor 41
Ceînseamnă?
• 0xFE• (unsignedchar)-1• (int)0xff• charc=0xff;intd=c;
Curs3–Reprezentareadatelor 42
Curiozate:INT_MIN%-1
• DemoînSASM:* add,subpebyte* activareCF,OF
Curs3–Reprezentareadatelor 43
REPREZENTAREATIPURILORDEDATEDENIVELÎNALT
Curs3–Reprezentareadatelor 44
Structuri
• Datecontigue• Datedediferitetipuri(dimensiuni,cusemn/fără
semn)• Odatăestelaunanumitdeplasament(offset)faţă
deadresadeînceputastructurii
Curs3–Reprezentareadatelor 45
Vectori(arrays)
• Oînșiruire(deobiceicompactă)dedate• Vectordeîntregi(32debiţi)* Lafiecare4octeţiavemonouăvaloareîntreagă* A,A+1,A+2,A+3(littlesaubigendian)
• sizeof(a):dimensiuneaocupatădetoateelementelevectorului
Curs3–Reprezentareadatelor 46
Șiruri
• Vectordecaractere• UltimulcaracteresteNUL-terminatorul(‘\0’,
valoarea0x0)• chars[]=“ana”;/*4bytes;NUL-terminated*/• chars[]={‘a’,‘n’,‘a’};/*3bytes*/• chars[]=“\xb0\xcd\xd5”;/*string(nonASCII)*/
Curs3–Reprezentareadatelor 47
Cuvintecheie
• Dateîntregi• Bazedenumeraţie• Baza10• Baza2• Baza16• Conversii• Numerecusemn• Numerefărăsemn
• Endianess• Bit,octet• Operaţiilogice(pebiţi)• Mascădebiţi• Deplasare(shift)• Nibble• Complementfaţăde2• Structuri,vectori,șiruri