Upload
dboris
View
227
Download
7
Embed Size (px)
Citation preview
Arhitektura i funkcija računara
Boris Damjanović
Koncept predznak i dimenzije (sign and magnitude)
• Kada bi mi bili konstruktori nekog hipotetičkog uređaja, jednostavno rješenje koje bi možda mogli da iskoristimo, bilo bi da pokušamo uzeti jedan bit iz prostora za podatke. U tom bitu bi držali predznak broja – npr.
0 = pozitivan broj;
1 = negativan broj.1 = negativan broj.
• U preostalih 7 bita bi držali stvarne podatke, tako da bi pozitivan i negativan broj 1 mogli da predstavimo na slijedeći način:
+/- Vrijednost
+1 = 0 000 0001
-1 = 1 000 0001
Koncept predznak i dimenzije (sign and magnitude)
• Ovakav način označavanja cijelih brojeva naziva se koncept predznak-dimenzije (sign and magnitude ili signed magnitude). Kako smo vidjeli, njegova osnovna karakteristika jeste da se pokuša iskoristiti jedan bit (krajnji lijevi bit) iz postojećeg prostora za podatke da bi prikazali predznak. U tom slučaju, dimenzije podatka (magnituda) su samo 7 bita, pa prethodno spominjani bajt može da prikaže vrijednosti od -127(10) do +127(10).
Binarno Označen
podatak
0 1111111 127
… 6
0 0000010 2
0 0000001 1
0 0000000 +0
1 0000000 −0vrijednosti od -127(10) do +127(10).
• Slijedeća tabela ilustruje ovaj koncept:
• Za predstavljanje brojeva pomoću koncepta predznak-dimenzije, rang moramo umanjiti za 1, zbog postojanja dvije nule, kao u slijedećoj formuli:
•
1 0000001 −1
1 0000010 −2
… 6
1 1111111 −127
12 −=b
R
Prvi komplement
• Operacija komplementiranja je vrlo jednostavna
za izvođenje – potrebno je jednostavno pretvoriti
sve nule originalnog binarnog broja u jedinice, a
sve njegove jedinice u nule. Dakle:
!0 = 1
!1 = 0
• Gdje je ! oznaka za komplement. U literaturi se
često koriste i oznake ~A (tilda od A) i Ā(nadvučeno A) za operaciju komplementiranja.
Prvi komplement• Dakle, i koncept prvog komplementa se može iskorisititi za predstavljanje pozitivnih
i negativnih brojeva, kao u slijedećoj tabeli:
Binarno Označen
podatak
0111 1111 127
… 6
0000 0010 2
0000 0001 1
• Nedostatak predstavljanja označenih brojeva na ovaj način je, kao i u slučaju koncepta predznak-dimenzije, postojanje dvije nule. Zbog toga je na ovaj način u okviru jednog bajta moguće predstaviti samo R = 28 -1 = 255 različitih brojeva.
0000 0001 1
0000 0000 +0
1111 1111 −0
1111 1110 −1
1111 1101 −2
… 6
1000 0000 −127
Drugi komplement
• Drugi komplement nekog broja (bilo pozitivnog ili negativnog) se realizuje kao invertovanje njegovih bita i na kraju dodavanje broja 1 na dobijeni rezultat. Ako se kao rezultat sabiranja pojavi prenos u najznačajnijem bitu, ovaj prenos se ignoriše.
• Ako npr. treba da komplementiramo broj 127 u okviru jednog bajta, drugi komplement dobijamo u dva koraka:
• Ako npr. treba da komplementiramo broj 127 u okviru jednog bajta, drugi komplement dobijamo u dva koraka:
Drugi komplement
• Posmatrajmo slijedeću tabelu koja ilustruje ovaj koncept:
• Kako vidimo, pozitivni brojevi predstavljeni pomoću drugog komplementa uvjek počinju nulom na mjestu MSB-a, dok
Binarno Označen
podatak
0 1111111 127
… 6
0 0000010 2
0 0000001 1
nulom na mjestu MSB-a, dok negativni brojevi uvijek počinju jedinicom, što bitno pojednostavljuje projektovanje sklopova koji treba da manipulišu ovakvim brojevima.
0 0000000 +0
0 0000000 −0
1 1111111 −1
1 1111110 −2
… 6
1 0000001 −127
1 0000000 -128
Modifikovana notacija (Excess N, biased)
• Do sada smo vidjeli različite konvencije, odnosno dogovorene načine predstavljanja označenih brojeva.
• Međutim, za njihovo predstavljanje na nivou jednog bajta, na raspolaganju su nam uvjek bili isti binarni brojevi od (0000 0000)2 do (1111 1111)2.
• Samo je stvar dogovora inžinjera i
Binarno Neoznačen
podatak
Označen
podatak
0000 0000 0 -127
0000 0001 1 -126
0000 0010 2 -125
• Samo je stvar dogovora inžinjera i naučnih radnika kako se u principu isti binarni brojevi tretiraju u različitim notacijama.
• Prikazani opseg binarnih brojeva daje nam još jednu mogućnost za predstavljanje označenih brojeva. Ideja modifikovane notacije je da se pozitivni brojevi pomaknu za određeni broj mjesta od binarne nule, kao u slijedećoj tabeli:
…
0111 1111 127 0
1000 0000 128 1
… �
1111 1111 255 +128
Modifikovana notacija (Excess N, biased)
Na ovaj način, ne-negativni brojevi su pomaknuti za 127 mjesta od binarne nule (0000 0000)2. Ovakva notacija naziva se još i Excess 127 ili biased notacija. Vrijednost označenog podatka u ovoj notaciji se izračunava jednostavnim oduzimanjem broja 127 (pomaka) od stvarne vrijednosti binarnog broja. Ako na primjer imamo binarni broj (0000 0010)2=(2)10, onda će vrijednost označenog broja biti:
Excess127 = (2)10 – (127)10 = (-125)10.
Binarno
(stvarna
binarna
vrijednost)
Neoznačen
Podatak
(Stvarni)
Označen
podatak
0000 0000 0 -127
0000 0001 1 -126
0000 0010 2 -125
…
Ili
Označeni = Neoznačeni - 127
0111 1111 127 0
1000 0000 128 1
… �
1111 1111 255 +128
Binarno kodirani dekadni (BCD)
brojevi• U jednom od prethodnih poglavlja spominjali smo
mogućnost da se predznak broja predstavi njegovim ASCII karakterom, odnosno binarnim ekvivalentom znaka minus (-) i zaključili smo da ovo nije efikasno rješenje u smislu potrošnje memorije.
• Međutim, mogli smo razmišljati na nešto drugačiji način i • Međutim, mogli smo razmišljati na nešto drugačiji način i pokušati da svaku cifru dekadnog brojnog sistema predstavimo odgovarajućom sekvencom nula i jedinica. U tom slučaju bi nam za predstavljanje cifara (0-9)10 bila potrebna 4 bita za svaku cifru (0000 - 1001)2.
Binarno kodirani dekadni (BCD)
brojeviOvakvo rješenje naziva se binarno kodirani decimali (BCD) i ono se u starijim izvedbama računara i kalkulatora dosta koristilo, a i danas su česte finansijske i poslovne aplikacije koje koriste ovakvu reprezentaciju brojeva. Da bi predstavili neki decimalni broj na ovaj način, svaka decimalna cifra je smještena u četvorku (nibble), kako slijedi:
Decimalni: 0 1 2 3 4 5 6 7 8 9
BCD: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
BCD reprezentacija broja (127)10 bila bi:
0000 0001 0000 0010 0000 0111
Kako računari za držanje podataka koriste bajte (8 bita), danas imamo dva uobičajena načina Kako računari za držanje podataka koriste bajte (8 bita), danas imamo dva uobičajena načina za smještanje 4-bitnih BCD brojeva u bajt:
1) Svaka cifra je smještena u jednu četvorku (nibble), dok su ostali biti popunjeni nulama, jedinicama (u sučaju EBCDIC koda) ili sa 0011 u slučaju ASCII tabele.
2) Po dvije cifre su smještene u jedan bajt.
Extended Binary Coded Decimal Interchange Code (EBCDIC) je IBM-ov 8-bitni standard, sličan
ASCII tabeli, razvijan 1963 i 1964 godine, kao pokušaj da se zamjeni u to doba 7-bitna ASCII tabela.
Izgovara se Eb-Si-Dik.
Rang i preciznost brojeva sa
fiksnim zarezomPredstavlljanje podataka u fiksnom zarezu karakteriše rangbrojeva koje mogu da prikažu i njihova preciznost.
Rang je razlika između najvećeg i najmanjeg broja koji je moguće prikazati. Preciznost je udaljenost između susjednih brojeva na brojnoj pravoj.
Ako posmatramo prethodno prikazane decimalne brojeve u fiksnom zarezu koji su koristili 3 cifre i decimalnu tačku nakon druge cifre s desne strane, pomoću takve konvencije bi mogli prikazati brojeve u rangu [0.00-9.99].
S druge strane, preciznost ovako prikazanih brojeva bila bi 0.01,
jer bi to bila razlika između bilo koja dva susjedna broja (npr. 5.02 - 5.01 = 0.01).
Brojevi u pokretnom zarezu (floating point numbers)
Podsjećanje: Naučna (scientific) notacija ili eksponencijalna notacija je način pisanja brojeva koji omogućava pisanje brojeva koji su ili preveliki ili premali da bi mogli biti napisani u standardnoj decimalnoj notaciji. Po ovoj notaciji, brojevi se pišu na slijedeći način:
a*10b
gdje je: a – koeficient odnosno mantisa, signifikanta a b – eksponent
Ova notacija omogućava nam kraće pisanje vrlo velikih ili vrlo malih brojeva:
2.2*1053
2.13*10
-30
Pošto je u raznim kompjuterskim programima iz ranog doba bilo teško napisati eksponent kao superskript, razvijena je tzv. E notacija
2.2E+53 2.13E-30
Primjetite da ovaj način označavanja nema veze sa matematičkom e konstantom
(Ojlerov broj), već da je vezan za pojam Eksponent.
Brojevi u pokretnom zarezu (floating point numbers)
Floating point reprezentacija omogućava predstavljanje veoma velikog ranga brojeva pomoću malog broja cifara, zahvaljujući tome što odvaja cifre koje se koriste za preciznost od cifara koje se koriste za rang broja. Ako bi Avogadrovu konstantu predstavili koristeći ovu notaciju u bazi 10, imali bi:
+6.023*1023
Ovdje je rang predstavljen pomoću eksponenta 1023, dok je preciznost data Ovdje je rang predstavljen pomoću eksponenta 10 , dok je preciznost data ciframa broja u fiksnom zarezu. Dio koji je prikazan brojem u fiksnom zarezu, često se naziva i mantisa ili signifikanta. Dakle, možemo reći da brojeve u pokretnom zarezu karakteriše trojka – predznak, eksponent i signifikanta.
Rang ovako prikazanog broja prvenstveno je određen brojem cifara u eksponentu (u primjeru exponent ima dvije cifre - 23) i bazom eksponenta (u primjeru je baza 10). Preciznost na ovaj način prikazanog broja zavisi najprije od broja cifara mantise (u primjeru su to 4 cifre) ali i od veličine eksponenta.
Normalizacija i sakriveni bitPotencijalni problem pri predstavljanju brojeva u pokretnom zarezu je činjenica da jedan isti broj možemo predstaviti na više načina.
Primjer:
37.145 = .0037145×104 = 3714.5×10
-2.
Ovakav način predstavljanja brojeva naziva se nenormalizovana forma. U normalizovanojformi, decimalna tačka se pomjera u lijevo sve dok ne dođe do lijeve nenulte cifre, dok se istovremeno vrši adekvatno podešavanje eksponenta. Ovaj proces je prikazan u slijedećim istovremeno vrši adekvatno podešavanje eksponenta. Ovaj proces je prikazan u slijedećim primjerima:
Primjer 1: 3584.1 =
3584.1 x 100 =
358.41 x 101 =
35.841 x 102 =
3.5841 x 103
Dakle, zadnji prikazani broj je u normalizovanoj formi
Treba napomenuti da određena grupa autora normalizaciji u slučaju dekadnog brojnog sistema pristupa
nešto drugačije (0.35841), dok u slučaju binarnog brojnog sistema koriste ovdje prikazan pristup.
Normalizacija i sakriveni bitPrimjer 2:
Normalizovati brojeve 300, 4000 i 0.000 000 0061
300 = 3 x 102
4000 = 4 x 103
0.000 000 0061 = 6.1 x 10-9
5 720 000 000 = 5.72 x 109
Do sada smo o normalizaciju posmatrali samo u svjetlu naučne (scientific) notacije u dekadnom brojnom sistemu. Ali kako računari koriste binarni brojni sistem, mogli bi pokušati da predstavimo normalizovane mantise iz prethodnog primjera kao binarne brojeve. da predstavimo normalizovane mantise iz prethodnog primjera kao binarne brojeve. Pogledajmo slijedeći primjer:
Primjer 3: (3)10 = (11)2 = (1 .1)2-norm
(4)10 = (100)2 = (1.00)2-norm
(5.72)10 = (101.10111)2 = (1.0110111)2-norm
Vidimo da kada mantisu nekog normalizovanog broja prikažemo binarno, na prvoj
poziciji lijevo uvjek imamo cifru ”1”. Inžinjeri i naučni radnici su davno primjetili ovu činjenicu i usvojili konvenciju po kojoj nema potrebe skladištiti ovaj bit. On se
prije pakovanja podatka za skladištenje odbaci, a restaurira se prilikom raspakivanja podatka koji treba da učestvuje u nekim aritmetičkim operacijama. Ovaj bit se još
naziva nevidljivi ili sakriveni (hidden) bit ili sakrivena jedinica. Ovaj koncept omogućava da se u mantisi može držati još jedan, dodatni bit.
IEEE 754-2008 standard za predstavljanje brojeva u pokretnom zarezu
Jednostruka preciznost ili single (koja se u standardu iz 2008. naziva binary32) je 32-bitni broj sa bazom 2. Karakterišu ga:
• Bit predznaka (1 bit): 0 za pozitivne, 1 za negativne brojeve
• Eksponent (8 bita u Excess127 formatu) i
• Signifikanta (23+1 bita).
• Nevidljivi bit je nula samo ako su svi biti eksponenta nule.
Kada je u pitanju jednostruka preciznost, kompletan broj u decimalnom formatu dobijamo pomoću slijedeće formule:
1272)()1( −−=
ESxmxn (1)
Gdje je: S – predznak, m – signifikanta (mantisa) data kao decimalni broj, E – Eksponent dat kao decimalni broj.
IEEE 754-2008 standard za predstavljanje brojeva u pokretnom zarezu
Dvostruka preciznost ili double (koja se u standardu iz 2008. naziva binary64) je 64-bitni broj sa bazom 2. Karakterišu ga:
• Bit predznaka (1 bit): 0 za pozitivne, 1 za negativne brojeve
• Eksponent (11 bita u Excess1023 formatu) i
• Signifikanta (52+1 bita).
• Nevidljivi bit je nula samo ako su svi biti eksponenta nule.
Kod dvostruke preciznosti, kompletan broj u decimalnom formatu dobijamo pomoću slijedeće formule:
10232)()1( −−=
ESxmxn (1)
Gdje je:
S – predznak, m – signifikanta (mantisa) data kao decimalni broj,
E – Eksponent dat kao decimalni broj.
Primjer: Dat je podatak (0x3FD5 5555 5555 5555). Prikazati taj podatak kao double i izračunati njegovu decimalnu vrijednost.
• Binarna slika ovog podatka je: (3FD5 5555 5555 5555)16 =
(0011 1111 1101 0101 0101 0101 0101 0101 0101 0101 0101 0101
0101 0101 0101 0101)2
• Sada ćemo podatak raščlaniti na triplet (predznak, eksponent, signifikanta): 1 bit 11 bita 52 bita
(0) (01111111101) (0101 0101 0101 0101 0101 0101 0101 0101
0101 0101 0101 0101 0101)
• Signifikanti dodajemo sakriveni bit: • Signifikanti dodajemo sakriveni bit: (0) (01111111101) (10101 0101 0101 0101 0101 0101 0101 0101
0101 0101 0101 0101 0101)
• Najprije izračunamo vrijednost mantise u kao hex. broj (još ne u decimalnom
obliku, da zbog dijeljenja ne izgubimo preciznost)
(10101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
01010101)2 = (0x15555555555555)16
• Sada izračunavamo vrijednost broja:
2-2 x (0x15555555555555 x 2
-52)
= 2-54 x 0x15555555555555 =
= 2-54 x 6004799503160661 = 0.33333.