Professional Documents
Culture Documents
2POGLAVLJE-Digital Logic Design PDF
2POGLAVLJE-Digital Logic Design PDF
2.1 UVOD
Digitalni sistemi se karakterišu osobinom da su signali obično ograničeni sa dvije moguće vrijednosti koje
su predstavljene korištenjem alfabeta od samo dva karaktera, uobičajeno označena kao 0 i 1. Predstavljanje
u formi binarnih podataka je, prema tome, od fundamentalnog značaja u analizi i projektovanju digitalnih
sistema.
Otpočećemo ovo poglavlje sa razmatranjem predstavljanja numeričkih podataka. Rad sa digitalnim
sistemima obično zahtijeva familijarnost sa više brojnih sistema:
- Decimalni
- Binarni
- Oktalni
- Heksadecimalni
- Binarno-kodirani decimalni (BCD)
gdje je br cijeli broj takav da je 0 ≤ br ≤ r-1. Ovdje su br digiti cijelog broja N dok se r odnosi na dužinu
niza. Na primjer, niz digita (9A0F)16 predstavlja heksadecimalni broj čija je dužina n=4 i gdje veličina
svakog simbola ne može prevazići r-1=15 ili da bude manja od nule.
Svaki digit u pozicionoj notaciji jednog cijelog broja N ima specijalno značenje koje zavisi od njegovog
položaja. Može se reći da sasvim lijevi digit bn-1 niza (2.1) je najznačajniji digit, dok se sasvim desni digit
naziva najmanje značajan digit. U binarnom sistemu brojeva, ovi digiti se označavaju respektivno, kao
najznačajniji bit (most significant bit, skraćeno msb) i najmanje značajan bit (least significant bit,
skraćeno lsb).
Općenito, niz bitova označava se kao riječ (word), pri čemu neki nizovi bita imaju posebna imena – niz od
četiri bita naziva se nibl (nibble), a niz od osam bitova označava se kao bajt (byte).
Numerička vrijednost cijelog broja predstavljena nizom digita (2.1) data je sa
n −1
Bn-1rn-1 + bn-2rn-2 + … + b1r1 + b0r0 = ∑b r
i =0
i i (2.2)
Jednačina (2.2) je otežana suma (weighted sum). Težine su sukcesivni stepeni od r pri čemu je svaki digit
otežan u saglasnosti sa svojom pozicijom u digitalnom nizu. Najznačajniji digit teži najviše i najmanje
značajni digit teži najmanje. Na primjer baza 6 brojnog sistema sastoji se od šest digita (od 0 do 5) pa je
numerička vrijednost za bazu 6 broja 5032 data sa
(5032)6 = 5 ּ 63 + 0 ּ 62 + 3 ּ 61 + 2 ּ 60
U onom što slijedi razmatraćemo samo cijele brojeve. Ali što je sa razlomljenim (fractions) i miješano
cijelo-razlomljenim brojevima. Da bi napravili razliku između cijelih i razlomljenih, koristićemo
konvenciju o baznoj tački (radix point). Cijeli dio broja lociran je lijevo od bazne tačke, dok se razlomljeni
pojavljuje desno od bazne tačke (ako je broj cijeli onda možemo raspolagati sa baznom tačkom). Kao
primjer, razmotrimo digitalni niz (35.274)10. Bazna decimalna tačka odvaja cijeli dio broja (35) od
razlomljenog dijela (274). Numerička vrijednost broja data je sa
Kako se uočava, digiti na lijevoj strani od bazne tačke predstavljaju koeficijente polinoma sa opadajućim
pozitivnim eksponentom baze (10) u primjeru brojnog sistema; digiti na desnu od bazne tačke su
koeficijenti polinoma sa rastućim negativnim eksponentom baze.
Jednadžba (2.3) može se generalizirati na svaki broj čiji se cijeli dio od digita i čiji se razlomljeni dio sastoji
od digita. Razmotrimo, dakle, broj predstavljen nizom digita
Treba uočiti da je bn-1 još uvijek najznačajniji digit, ali, sada je b-m najmanje značajan digit. Numerička
vrijednost broja data je sa
n −1
(N )r = ∑b r
i =− m
i
i
(2.5)
U binarnom sistemu, r=2 dok je bi bilo 0 ili 1 za svako i. Ovo se odnosi na binarne brojeve čija je
vrijednost određena u saglasnosti sa jednadžbom (2.5) ili (2.2), tj. korištenjem sukcesivnih težina koje su
cjelobrojni eksponenti od 2; i koji se označavaju kao pravi (straight) binarni brojevi. Korištenje druge vrste
težina je takođe moguće i biti će uvedeno u sekciji 2.5.
(110101)2 = 1ּ25+1ּ24+0ּ23+1ּ22+0ּ21+1ּ20=(32)10+(16)10+(0)10+(4)10+(0)10+(1)10=(53)10 ▪
(0.1101)2=1ּ2-1+1ּ2-2+0ּ2-3+1ּ2-4=(0.5)10+(0.25)10+(0)10+(0.0625)10=(0.8125)10 ▪
(73.452)8=7ּ81+3ּ80+4ּ8-1+5ּ8-2+2ּ8-3=
=(56)10+(3)10+(0.5)10+(0.078125)10+(0.0039063)10=(59.5820313)10 ▪
(32AF.C4)16=3ּ163+2ּ162+Aּ161+Fּ160+Cּ16-1+4ּ16-2=
=(12288)10+(512)16+(160)16+(15)10+(0.75)10+(0.015625)10=(12975.766)10 ▪
Treba zapaziti da vrijede jednakosti (A)16=(10)10, (C)16=(12)10 i (F)16=(15)10
15247
= 95 ……………ostatak = (15)10 = (F)16
16
952
= 59 ……………..ostatak = (8)10 = (8)16
16
59
=3 …………..ostatak = (11)10 = (B)16
16
3
=0 ……………ostatak = (3)10 = (3)16
16
Dakle (15247)10=(3B8F)16 ▪
Primjer 2.6 Pretvori (12A7C)16 u oktalni broj
Konverzija se može pojednostaviti ako se prvo nađe decimalni ekvivalent heksadecimalnog broja.
Postupajući ovako imamo (12A7C)16=(76412)16. Sada, pretvarajući decimalni broj u oktalni
imamo
76412
= 9551 ………ostatak = 4
8
9551
= 1193 ………ostatak = 7
8
1193
= 149 ………ostatak = 1
8
149
= 18 ………ostatak = 5
8
18
=2 ………ostatak = 2
8
2
=0 ………ostatak = 2
8
Dakle, (0.761)10=(0.1100001011…)2 ▪
Kako se vidi iz primjera 2.7 proces konverzije razlomka može da se ne završi. Drugim riječima može da
bude nemoguće tačno predstaviti razlomak nove baze sa konačnim brojem digita. Broj zadržanih digita
nakon bazne tačke zavisiće ot tačnosti sa kojom želimo izvršiti konverziju. Ako završimo proces u
primjeru 2.7 nakon prva dva značajna bita razlomka, rezultantni binarni razlomak biti će (0.11)2 koji je
jednak (0.75)10. Ovo predstavlja grešku od oko 1.4% u odnosu na stvarni decimalni razlomak (0.761)10. S
druge strane, ako završimo proces nakon deset bitova, rezultirajući binarni razlomak biti će
(0.1100001011)2 [=(0.7607422)10] i greška će biti oko 0.03% od zahtjevanog (0.761)10
Binarne, oktalne i heksadecimalne konverzije
Pošto su 8(=23) i 16(=24) obadvije jednakih eksponenata od dva, konverzije između binarnih, oktalnih i
heksadecimalnih brojnih sistema su veoma jednostavne. Posebno ove relacije impliciraju da se svaki
oktalni digit može biti binarno kodiran sa tri bita kako je pokazano u Tabeli 2.1, dok se svaki
heksadecimalni digit može binarno kodirati sa četiri digita kako je pokazano u Tabeli 2.2. Kao referenca
ove tabele takođe uključuju ekvivalentne decimalne brojeve.
Za konverziju iz binarnog u oktalni razbijamo binarni broj, počinjući od bazne tačke, u grupe od tri bita
svaka. Oktalni digit koji odgovara svakoj grupi se onda asignira (assigned) korištenjem Tabele 2.1.
Konverzija iz oktalnog u binarni, ovaj proces se reverzira. Svakom oktalnom digitu je asignirana grupa od
tri bita korištenjem Tabele 2.1 i ekvivalentni binarni broj se dobija povezivanjem ovih grupa.
6 7 2 3
1 5 0 5 2 6
▪
Dakle, ekvivalentni oktalni broj je (1505.20)8.
Treba uočiti u primjeru 2.9 da krajnja lijeva grupa cijelog dijela broja sadrži samo jedan bit, a da krajnja
desna grupa razlomljenog dijela sadrži samo dva bita. Za kvalificiranje oktalne predstave potrebno je,
međutim, da svaka grupa mora sadržavati tri bita. Da bi “ispunili” grupe uvodimo vodeće (leading) nule u
cijeli dio i prateće (trailing) nule u njegov razlomljeni dio. Dodavanje vodećih i pratećih nula ne mijenja
vrijednost originalnog broja i služi samo da olakša konverziju. U primjeru 2.9 uveli smo dvije vodeće nule
u krajnju lijevu grupu da bi dobili (001)2 = (1)8 i jednu prateću nulu u krajnje desnu grupu da bi dobili
(110)2 = (6)8.
4 7 3 6
1 2 A 7 F
1 D C 5 O
Pošto krajnja lijeva grupa ne sadrži četiri bita potrebno je uvesti tri nule da bi se olakšala konverzija u
najznačajniji heksadecimalni digit (pogledaj diskusiju nakon primjera 2.9).
1 5 6 1 3 1 ▪
Potrebno je shvatiti da je BCD upravo kod u binarnom, za razliku od direktnog (straight) binarnog broja
koji predstavlja aktualnu vrijednost.
Da bi se našla BCD predstava decimalnog broja, svaki decimalni digit nezavisno se predstavlja svojim
odgovarajućim binarnim nibblesom.
3 7 2 9
9 3 5 1 ▪
Dakle, ekvivalentni decimalni broj je (9351)10
Treba uočiti da ako je BCD broj iz primjera 2.15 pogrešno intrepretiran kao binarni broj rezultirajući
decimalni broj je dat sa 37713. Primjer 2.15 ponovo demonstrira neefikasnost koja postoji kada se koristi
BCD sistem. Šesnaestbitni BCD broj može predstavljati do četiri decimalna digita (decimalne brojeve do
9999), dok 16-bitni binarni broj može predstavljati do pet decimalnih digita (decimalni broj do 65535).
1 9 3 . 6 8 ▪
Ekvivalentni decimalni broj je 193.68. Uočimo da u cilju olakšanja konverzije dodajemo vodeće i prateće
nule na krajnju lijevu i krajnju desnu grupu, respektivno (pogledaj također primjere 2.9 i 2.12).
Brojevi koji se koriste u naučnim proračunima označeni su znakom (sign), veličinom (magnitude) broja i
položajem bazne tačke. Od položaja bazne tačke se zahtijeva da predstavlja razlomljeni, cijeli ili miješani
cijelo-razlomljeni broj. Postoje dva načina za specificiranje položaja bazne tačke: preko predstave njenog
fiksnog (fixed) položaja ili ploveće tačke (floating point). U onom što slijedi ograničiti ćemo našu
diskusiju na predstavu broja sa fiksnom tačkom. Treba istaći, međutim da se razlika između ove dvije
predstave odnosi na područje brojeva koji trebaju da se prilagode digitalnom sistemu sa datom dužinom
riječi.
Dva najuobičajenija korištena položaja bazne tačke su: (1) bazna tačka krajnje lijevo, što broj čini
razlomljenim, striktno manjim od jedan ili (2) bazna tačka krajnje desno što broj čini cijelim. U bilo kojem
od ova dva slučaja, bazna tačka nije stvarno prisutna u digitalnom sistemu, već je njen položaj nametnut
činjenicom da je broj predefiniran kao cijeli ili razlomljeni. Prema tome, u aritmetici cijelih brojeva,
brojevi su poredani desno kao da postoji bazna tačka krajnje desno. U aritmetici razlomljenih, brojevi su
(bez obzira na njihovu dužinu) poredani na lijevo kao da je bazna tačka na krajnje lijevo.
Zapazimo, međutim, da su ova dva dogovora (convetions) u biti ekvivalentni i da je prilično laka
konverzija između cijelih i razlomljenih brojeva. Proces konverzije se označava kao pomjeranje (shifting).
Pomjeranje radne bazne tačke broja baze r za k mjesta u lijevo je ekvivalentno množenju broja sa r-k ;
pomjeranje bazne tačke za k mjesta u desno ima efekat množenja broja sa rk. Na primjer, razmotrimo
binarni broj 10110.101. Ako pomjerimo baznu tačku tri mjesta u lijevo dobijamo 10.110101 i moramo ga
pomnožiti sa 23 da bi obnovili originalnu vrijednost koja je 10110.101 = 23 (10.110101). Ako pomjerimo
baznu tačku originalnog broja za dva mjesta u desno, dobijamo 1011010.1 i moramo ga pomnožiti sa 2-2 da
obnovimo originalnu vrijednost koja je 10110.101 = 2-2 (1011010.1).
Dakle, bilo koja baza r, cijeli broj od n-digita može se razmatrati kao razlomak pomnožen sa konstantnim
faktorom rn i svaki razlomak m digita baze r može da se razmatra kao cijeli broj pomnožen sa konstantnim
faktorom r-m. Međutim, treba zapaziti da pomjeranje nije ograničeno na konverzije cijeli – razlomljeni. Na
primjer, kada množimo ili dijelimo postoje među koraci koji zahtijevaju pomjeranje brojeva na lijevo ili
desno (vidi sekciju 2.4).
Označavanje znaka
Za vršenje bilo koje aritmetičke operacije moramo specificirati broj bilo kao pozitivan ili negativan. Pošto
digitalni sistem ne može raspoznavati konvencionalne znake (+) i (-), moramo uvesti kod (code) koji
predstavlja znak broja. Dogovor o znaku koji se uobičajeno koristi u digitalnom sistemu je da se položaj
krajnjeg lijevog digita rezervira za digit znaka.
Za pozitivne brojeve fiksne tačke, digit znaka postavljen je na 0 i preostali digiti prikazuju istinsku veličinu
broja.
Neka je (N) broj baze r sa cjelobrojnim dijelom od n digita (uključujući digit znaka) i razlomljeni dio od m
digita. Sada se pozitivni broj (N)r ≥ 0 može se predstaviti nizom digita
n−2
∑b r
i =− m
i i (2.7)
Tri različite notacije uobičajeno se koriste za predstavljanje negativnog broja sa fiksnom tačkom: veličina
znaka (sign magnitude) (r-1)-vi komplement i r-ti komplement.
U cilju njihovog uvođenja neka (N) bude negativna verzija broja (N) definisanog jednačinom (2.6). u bilo
kojoj predstavi vrijednost digita znaka je (r-1). U cilju isticanja činjenica da krajnji lijevi digit predstavlja
znak broja on je napisan zacrnjeno (boldface)
Primjer 2.21 Predstavljanje znaka veličine (predznaka) od (+687)10 koji je pozitivan broj čija je veličina (687)10 je
4-digitni niz (0687)10. Pošto je (r-1) = 9 predstava znaka veličine (-687)10 je (9687)10. ▪
Primjer 2.22 Predstava znaka veličine (+1101.011)2 je (01101.011)2 dok je predstava znaka veličine (-1101.011)2
po istom principu (11101.011)2. ▪
Predstavljanje (r-1)-tog komplementa
Jednačina (2.10b) nam kaže da je (r-1)-ti komplement dobijen oduzimanjem svakog digita od r-1. Pošto je
r=2 u binarnom sistemu, primjena jednačine (2.10b) za generiranje 1-vog komplementa je sasvim
jednostavna. Datom broju, nule su promjenjene u 1 i 1 su promijenjene u 0 da se dobije 1-ti komplement.
Primjer 2.23 (a) 9-ti komplement od (08457.43)10 dobije se preko jednačine (2.9) sa n=5 i m=2
Čitaoc može lako verifikovati da se isti rezultat može dobiti korištenjem jednačine (2.10b)
(b) 9-ti komplement (0.2371)10 je dobiven preko jednačine (2.9) sa n=1 i m=-4
( N ) r =rn-r-m-(N)r=(104-1-0374)8=(7777-0374)7403
( N ) r =rn-r-m-(N)r=(104-100-04B7)16=FFFF-04B7=FB48
(e) Da bi našli prvi komplement od (0 1101.101)2 možemo koristiti jedbnačinu (2.9) sa n=5 i m=3.
U ovom slučaju, međutim, jednostavnije je dobiti prvi komplement korištenjem procedure izvedene
jednačinom (2.10b). Ovdje, ako sve 0 zamjenimo sa 1 i sve 1 sa 0 imamo
(N ) 2 =(10010.010) ▪
( N ) r =rn-(N)r (2.11)
Iz jednadžbe (2.11) vidljivo je da u cilju nalaženja r-tog komplementa broja, ostavljamo sve najmanje
značajne nule nepromjenjene, oduzimamo prvi nenulti najmanje značajan digit i potom oduzimamo sve
ostale digite od r-1. Pošto je kod binarnog sistema r=2 primjena jednačine (2.11) za generiranje drugog
komplementa može se utvrditi kako slijedi. Polazeći od najmanje značajnog bita u datom broju ostavi sve
0 i prvu 1 nepromjenjenu i onda zamjeni 1 sa 0 i 0 sa 1 u svim preostalim bitovima.
Može se, također, dobiti r-ti komplement iz (r-1) komplementa. Upoređujući jednačinu (2.9) i (2.11)
vidimo da dodavanje r-m na (r-1) komplement rezultira u r-tom komplementu. Naredni primjer ilustrira ove
ideje.
Primjer 2.24 (a) 10-ti komplement od (04857.43)10 dobijen je u jednadžbi (2.11) sa n=5
( N ) r =rn-(N)r=(105-04857.43)10=100,000-04857.43=95142.57
Isti rezultat također možemo dobiti preko 9-tog komplementa datog broja što je pokazano u primjeru
(2.23a). Pošto je m=2 imamo
95142.57+10-2=95142.57
( N ) r =rn-(N)r=10-(02731)10=9.7269
Pošto je m=4 ovaj rezultat također se može dobiti sabiranjem 10-4 sa 9-tim komplementom datog broja koji
je već izveden u primjeru (2.23b).
( N ) r =rn-(N)r=(104-0374)8=(10000-0374)8=7404
(d) 16-ti komplement (04B7)16 može se dobiti dodavanjem 160 (pošto je m=0) na 15-ti komplement u
primjeru 2.23d. Dakle,
FB48+1=FB49
(N ) 2 =(10010.011) ▪
Primjer 2.25 Razmotrimo broj sa fiksnom tačkom sa istinskom veličinom (9)10 = (10 01)2. Želimo predstaviti
njegovu pozitivnu i negativnu verziju u notaciji sa tri znaka korištenjem osam bita.
Binarna predstava u bajtima sa fiksnom tačkom za (± 9)10 prikazana je u Tabeli 2.4
Pošto je r=2 vrijednost bita znaka od (-9)10 u sve tri notacije je r-1=1. Da bi dobili predstavu znaka veličine
od (-9)10 jednostavno stavljamo 1 za bit znaka, a preostale bite ostavljamo nepromjenjene (vidi jednačinu
2.8).
Da bi dobili 1-vi komplement koristimo proceduru datu u jednačini (2.10b). 2-gi komplement dobijen je
korištenjem procedure date nakon jednadzbe (2.11).
Zaključujući ovu sekciju, uočimo da bilo koja notacija znaka koja uzima negativu od negativnog broja
uspostavlja pozitivni broj. Dakle,
[(N) ] =(N)
rr r
Razmotrimo sekvencu binarnih brojeva od 0000 do 1111, koji odgovaraju decimalnim (dekadnim)
brojevima od 0 do 15. Ove iste binarne vrijednosti mogu se koristiti do predstave dekade brojeva sa
znakom (predznakom) od +7 do –8 kako je pokazano u Tabeli 2.5. Više pitanja slijedi iz predstave binarnih
brojeva sa znakom.
Decimalni
1-ti komplement 2-gi komplement Znak-veličine
(dekadni)
+7 0111 0111 0111
+6 0110 0110 0110
+5 0101 0101 0101
+4 0100 0100 0100
+3 0011 0011 0011
+2 0010 0010 0010
+1 0001 0001 0001
+0 0000 0000 0000
-0 1111 0000 1000
-1 1110 1111 1001
-2 1101 1110 1010
-3 1100 1101 1011
-4 1011 1100 1100
-5 1010 1011 1101
-6 1001 1010 1110
-7 1000 1001 1111
-8 Nemoguće 1000 Nemoguće
Da bi ih ilustrirali koristićemo četvero bitne brojeve prikazane u Tabeli 2.5 iako je generalizacija na bilo
koji bitni broj direktna. Treba naučiti da brojevi sa fiksnom tačkom u Tabeli 2.5 imaju jedinstvenu
predstavu izuzev notacije nula u znaku veličine i 1-og komplementa. Vidimo da pozitvne i negativne nule
imaju predstave u ovim dvjema notacijama dok konvencija o 2-gom komplementu ima jedinstvenu nulu.
Razlog za ovo je vrlo jednostavan. Pozitivnu nula predstavljena je sa 0000 u bilo kojoj od ove tri notacije
(obilježavanja). Podsjetimo da je krajnji lijevi bit predznaka.
Pošto je r=2, predstava predznaka veličine negativne nule je 1000 u saglasnosti sa jednadžbom (2.8). Da bi
dobili predstavu 1-vog komplementa negativne nule, koristimo proceduru predstavljenu nakon jednadžbe
(2.10b) što kao rezultat daje 1111. Predstava 2-gog komplementa negativne nule dobija se procedurom
datom nakon jednadžbe (2.11) što kao rezultat daje 0000.
Najveći pozitivni četvero bitni broj jednak je dekadnom (decimalnom) +7. Ne postoji binarni ekvivalent
dekadnog +8 ako koristimo samo četiri bita za predstavljanje ovog binarnog broja sa predznakom. Zaista
ako koristimo konvencionalnu binarnu notaciju i asigniramo 1000 za predstavu 8, onda u binarnoj notaciji
broja sa predznakom položaj 1-vog bita predznaka ukazuje da se broj treba posmatrati kao negativni.
Najmanji negativni 4-ero bitni broj jednak dekadnom (decimalnom) (-8) u notaciji 2-gog komplementa. Ne
postoji pozitivna replika (countport), pošto obadvije +0 i –0 u 2-gom komplementu imaju istu predstavu
(0000) i zauzimaju jedan od oblika pozitivno bitnog broja, ostavljajući jedan fewer za preostali pozitivni
broj. U notaciji prvog komplementa (-0) zauzima jedan od obrazaca bita pozitivnog broja. Ostavljajući
jedan fewer za preostali pozitivni broj. Dakle, najmanji četvero bitni negativni broj 1-vog komplementa
jednak je dekadnom (decimalnom) (-7). U predstavi sa predznakom veličine, veličina najmanjeg
negativnog broja mora biti jednaka onoj od najvećeg pozitivnog broja. Pošto je (+7) najveći pozitivni broj,
najmanji negativni dekadni broj sa predznakom je (-7).
Primjer 2.26 Koje je područje binarnih brojeva sa predznakom predstavljenog sa bajtom podataka ?
Pošto je n=8, gornja granica je (28 – 1)10 = 127. U notacijama veličine sa predznakom 1-vog
komplementa donja granica je –(27 – 1)10 = -127. U 2-gom komplementu, najmanji negativni broj
koji se može predstaviti je –(27)10 = -128.
Kada god prevaziđemo područje brojeva sa znakom (predznakom) dešava se prevelik protok (overflow).
Kako ćemo vidjeti u sekciji 2.4, preveliki protok znači da je rezultat date aritmetičke operacije pogrešan,
radi toga što smo pokušali da prevaziđemo dopušteno područje binarnih vrijednosti.
Konvencije o bitu znaka (predznaka) je također primjenjiva ako koristimo druge binarno kodirane
predstave. Razmotrimo, na primjer, broj (EC)10 = (11101100)2 . Ako se ovaj broj interpretira kao binarni
broj bez znaka (unsigned) ekvivalentan je sa (236)10.
Interpretiran kao binarni broj sa znakom (signed), binarni obrazac (pattern) predstavlja negativan broj pošto
je bit znaka 1. Dakle, ekvivalentan je sa (-108)10 u predstavi sa znakom veličine, (-19)10 u notaciji 1-vog
komplementa i (-20)10 kao 2-gi komplement.
Međutim, nismo tako sretni kada imamo posla sa BCD brojevima.
Razmotrimo, na primjer, dekadni (decimalni) broj +5. Njegova BCD (kao i binarna predstava) je 0101.
Predstave veličina sa predznakom, 1-vog i 2-gog komplementa ovog broja su respektivno 1101, 1010 i
1011 i nijedna ne vrijedi u BCD kodu. Da bi rukovali (to handle) sa BCD brojevima sa znakom, moramo
koristiti bilo kod 10-tog ili 9-tog komplementa.
Drugim riječima, kod koji generira BCD brojeve sa predznakom mora oduzeti svaki BCD digit od bilo
(10)10 ili (9)10. Da bi predstavili znak, moramo dodati jedan ekstra digit. Kodiranje koje se uobičajeno
koristi za ovaj digit znaka je (0000)2 [=(0)10] za pozitivne brojeve i za nulu, te (1001)2[(9)10] za negativne
brojeve.
Razmotrimo, na primjer, 3-digitne BCD brojeve sa četvero digitnim pridruženjem (apprended) za
indiciranje znaka (predznaka). U notaciji sa znakom veličine (+45)10 je kodirano kao (0045)10 = (0000
0000 0100 0101)BCD dok je (-45)10 kodirano kao (9045)10 = (1001 0000 0100 0101)BCD.
Područje 3-digitalnih brojeva kodiranih kao 2-baytni BCD brojevi sa znakom veličine je od (-999)10 do
(+999)10.
Da bi se našao 10-ti komplement od (-45)10, (45)10 mora da se oduzme od 104 (podsjetimo 2.11 i uzmimo u
obzir da brojevi sa znakom u primjeru imaju 4 digita od kojih je svaki digit znaka). Prema tome, (104 – 45
= 9955)10 tako da je (-45)10 kodirano kao (1001 1001 0101 0101)BCD. Područje brojeva u 10-tom
komplementu, sa dvo baytnom BCD predstavom je od (1001 0000 0000 0000)BCD = -(1000)10 do (0000
1001 1001 1001)BCD = (+999)10.
Da bi se dobio 9-eti komplement, oduzimamo 1 od 10-tog komplementa predstave (vidi jednadžbu 2.9) da
se dobije (9954)10 = (1001 1001 0101 0100)BCD.
Podaci u digitalnim sistemima su binarni brojevi i druge binarno kodirane informacije nad kojima se vrše
operacije u cilju dobivanja rezultata sračunavanja. Aritmetika digitalnih sistema razlikuje se od realne u
fundamentalnom pitanju tačnosti brojeva. Pošto brojevi sa kojima se manipuliše u digitalnim sistemima
imaju konačnu dužinu, može se izvršiti samo računanje konačne tačnosti. Kao kontrast, realna aritmetika
može proizvesti arbitrarnu tačnost bez ograničenja na dužinu. Prema tome, digitalna aritmetika može da se
razmatra kao aproksimacija realne aritmetike.
Cilj ove sekcije je da predstavi bazične aspekte digitalne aritmetike. Naša diskusija je ograničena na
aritmetiku sa fiksnom tačkom i razmatramo četiri osnovne operacije sabiranja, oduzimanja, množenja i
dijeljenja. Logička kola koja implementiraju neke od ovih operacija uvedena su u Poglavlju 5.
Sabiranje
Sabiranje je binarna operacija na parovima digita prvog (augend) i drugog (addend) sabirka, pri čemu su
njihove položajne vrijednosti kolone dovedene u liniju.
Počinjemo sa sabiranjem dva digita najmanjeg značaja. Ako suma kolone prevazilazi najveću vrijednost
simbola (brojnog sistema koji se koristi) prenosimo vrijednost jednog bayta u slijedeću kolonu i
reduciramo postojeću sumu kolone za vrijednost jednog bayta, da dobijemo partikularni digit sume.
Ova procedura primjenjuje se na sistemu bilo koje baze kako to ilustruju naredni primjeri. U ovim
primjerima predpostavljamo da su brojevi bez znaka (predznaka). Kasnije ćemo vidjeti kako se postupa sa
brojevima sa znakom (predznakom).
1 (1) (1)
3 4 7 prvi sabirak (augend)
+ 6 7 9 drugi sabirak (addent)
10 12 16
(-10) (-10) (-10)
1 0 2 6
1 0 2 6
Suma najmanje značajnog para digita 7+9=16 prevazilazi najveću vrijednost simbola (9). Mi unosimo
jednu vrijednost baze, 10, na slijedeću kolonu i reduciramo (smanjujemo) postojeću sumu kolone za jednu
vrijednost baze (16-10=6) da dobijemo najmanje značajni digit sume 6. U drugoj koloni sada imamo
4+7+preneseni digit 1=12.
Ponovo, 10, je preneseno u slijedeću kolonu, dok je suma postojeće kolone smanjena za baznu vrijednost
12-10=2. U trećoj koloni imamo sličnu situaciju 3+6+preneseni digit 1=10.
Ponovo, 10, je preneseno u slijedeću kolonu, dok su i prvi i drugi digit sabiraka 0, pa je suma kolone
reducirana za jednu bazu 10-10=0.
Dakle, suma je (1026)10. ▪
Primjer 2.28 Saberi (1011)2 i (1101)2
Stavljajući kolone u liniju imamo
Oduzimanje
Oduzimanje je binarna operacija nad parovima digita umanjenika (minuend) i umanjioca (subtrahend)
kada su njihove pozicione vrijednosti kolone stavljene u liniju. Počinjemo sa oduzimanjem posljednja dva
najmanje značajna digita. Ako umanjenika prevazilazi umanjitelj, posuđujemo jednu bazu od naredne
kolone i dodajemo na umanjenik, izvršavamo oduzimanje da bi dobili partikularni digit razlike. Kod
oduzimanja slijedeće kolone posuđena bazna jedinica je oduzeta od umanjenika i tada se proces nastavlja.
(+10)
7 5 umanjenik (minuend
(-1)
- 5 9 umanjilac (subtrahend)
1 6
Isto pravilo se primjenjuje za sistem bilo koje baze, ali općenito oduzimanje je znatno komplikovanije za
implementaciju od sabiranja. Za ilustraciju dodatnih komplikacija predpostavimo da želimo oduzeti 75 od
59. Ovo se izvršava obrtanjem njihovog redoslijeda i oduzimanjem broja sa manjom veličinom od većeg
broja za rezultat i korištenjem znaka većeg. Dakle, 59-75=-(75-59)=-16.
Također, treba zapaziti da smo predpostavlili da su brojevi bez znaka. Međutim, u svakodnevnim
aritmetičkim sračunavanjima koristimo brojeve sa znakom koji je predstavljen notacijom znaka (predznaka)
veličine.
Kada se operacije vrše nad brojevima sa dva znaka, prvo upoređujemo njihove znakove. Ako su dva znaka
ista sabiremo dvije veličine i znak rezultata je isti kao znak dva broja. Ali, ako su znakovi različiti,
upoređujemo dvije veličine, oduzimamo manju od veće i određujemo znak rezultata da je jednak znaku
većeg broja. Slijedeći primjeri ilustruju ove procese.
Primjer 2.31
Da bi implementirali ove procese zahtijeva se duga sekvenca odluka: uporediti, sabrati, oduzeti i odrediti
znak. Ovi procesi mogu se implementirati u hardware-u ili software-u, ali su znatno složeniji nego što je
potrebno. Umjesto navedenog, sabiranje i oduzimanje sa fiksnom tačkom mora da se pojednostavi ako
koristimo r-tu ili (r-1)-tu predstavu komplementa kako je pokazano u narednoj sekciji.
Ako su brojevi predstavljeni u notaciji r-tog komplementa onda je jednadžba (2.11) ključna i može se
ponovo napisati u obliku
(N )r + (N )r = r n (2.12)
Njena reinterpretacija kaže da kada je suma dva broja 0 i prenos 1 (koji zanemarujemo) brojevi su bazni
komplementi (radix complements) jedan drugog.
Sabiranje preko r-tog komplementa: Da bi sabrali dva broja predstavljena u r-tom komplementu
saberemo njihove odgovarajuće digite (uključujući digit znaka) i ignorišemo svaki prenos od krajnjih
digita.
Ovakav prenos se označava kao krajnji prenos (end carry). Ovako dobijena suma predstavljena je također
u r-tom komplementu.
Naredni primjeri ilustriraju sabiranje pozitivnih, negativnih i suprotno označenih binarnih brojeva,
predstavljenih u 2-gom komplementu (krajnji lijevi bit predstavlja znak i stavljen je zacrnjeno).
▪ Primjer 2.32 Brojevi dati u zagradama u slijedećim primjerima su dekadni (decimalni) ekvivalenti binarnih brojeva
0 01110 (+14) 1 10010 (-14)
+ 0 01100 (+12) + 1 10100 (-12)
-------------------- ---------------------
0 11010 (+26) 1 1 00110 (-26)
prenos kraja
prenos kraja
prenos kraja ▪
Slijedeći primjer prikazuje da sabiranje brojeva sa znakom treba da se obavlja pažljivo.
Primjer 3.3
(a) Saberi (9D)16 i (A4)16 uz predstavu oba broja sa 16-stim komplementom
9D
+ A4
(1) 4 1
Uočimo da su oba sabirka negativni brojevi (da bi ovo vidjeli izvršimo pretvorbu heksadecimalnih brojeva
u binarne). Međutim njihova suma izlazi kao pozitivan broj, što ne može biti tačno.
Razlog za ovo leži u činjenici što smo prevazišli područje negativnih dvo-digitnih heksadecimalnih
brojeva, pa se desio prevelik protok (overflow). Da bi ovo vidjeli napomenimo da je najmanji negativni
broj koji se može predstaviti u notaciji sa znakom sa dva heksadecimalna digita –(128)10. Da bi smo našli
decimalni ekvivalent od (9D)16 i (A4)16, prvo odredimo njihove 16-te komplemente (63)16 i (5C)16,
respektivno. Njihovi decimalni ekvivalenti su –99 i –92, a njihova suma je –191, što je izvan područja.
0 0 111 001
+ 0 1 001 011
1 0 000 100
Prvi i drugi sabirak su pozitivni brojevi, ali njihova je suma negativan broj, što je očigledno netačno.
Ponovo smo prevazišli područje pozitivnih 8-bitnih brojeva, odnosno desio se prevelik protok (overflow).
Pošto digitalne arhitekture uključuju brojeve konačne dužine, može doći do prevelikog protoka svaki put
kada se prevaziđe područje brojeva sa znakom, kako je pokazano u primjeru 2.33. Kada su znaci dva broja
koja se sabiru suprotni, ne može doći do prevelikog protoka. Ako su znaci dva broja koja treba da se saberu
isti, može doći do prevelikog protoka zavisno od veličine dva broja, a koji se može detektovati
razmatranjem znaka dobivenog rezultata. Ako je znak rezultata suprotan od znakova operanada došlo je do
prevelikog protoka i rezultat je netačan. Digitalni sistem mora da se provjeri na preveliki protok i obezbjedi
njegova indikacija ako do prevelikog protoka dođe.
Oduzimanje preko r-tog komplementa: Da bi oduzeli dva broja koristeći r-ti komplement potrebno
je dodati umanjenik r-tom komplementu umanjioca. Ako postoji kraj prenosimo ga izvan digita znaka i
ignorišemo. Dobijena razlika je također predstavljena u r-tom komplementu.
Slijedeći primjer ilustruje oduzimanje pozitivnih, negativnih i binarnih brojeva sa suprotnim znakom,
predstavljenih u r-tom komplementu.
Primjer 2.34 Brojevi prikazani u zagradama u slijedećim primjerima su decimalni ekvivalenti binarnih brojeva.
prenos kraja ▪
Oduzimanje suprotno označenih brojeva može proizvesti rezultat koji prevazilazi područje brojeva r-tog
komplementa, dakle dolazi do prevelikog protoka. Da bi ovo ilustrirali razmotrimo oduzimanje 10110101
(decimalni -75) od 00111001 (decimalni +57). Ako dodamo umanjilac 2-gog komplementa na umanjenik
dobijamo 10000100, što je očigledno netačno. Pošto je gornja granica područja 8-bitnih binarnih brojeva
(127)10 tačan rezultat (koji je 13210) prevazilazi područje, te dolazi do prevelikog protoka. Kako vidimo
preveliki protok kod oduzimanja, sličan onom kod sabiranja (vidi primjer 2.33), može da se detektuje
preko ispitivanja najznačajnijeg bita rezultata.
Možemo također sabirati i oduzimati brojeve predstavljene u notaciji (r-1)-og komplementa. Ovdje je
ključna jednadžba (2.9)
Sabiranje preko (r-1)-og komplementa : Da bi sabrali dva broja, saberemo njihove odgovarajuće digite
(uključujući digite znaka). Ako postoji prenos najznačajnijeg lijevog digita, povećava se suma za 1 i
ignorišemo prenos broja. Alternativni opis procesa je kako slijedi. Ako postoji prenos broja, onda (uzmi ga)
i dodaj ga rezultatu. Proces se označava kao kraj oko prenosa (end-around carry). Ovako dobijena suma
predstavljena je u (r-1)-om komplementu.
Sljedeći primjeri ilustriraju sabiranje pozitivnih, negativnih i suprotno označenih binarnih brojeva
predstavljenih u r-tom komplementu. Krajnji lijevi bit predstavlja znak i označen je zacrnjeno.
Primjer 2.35 U narednim primjerima brojevi dati u zagradama su decimalni ekvivalenti binarnih brojeva.
prenos
broja
1 (prenos oko kraja)
1 00101 (-26)
prenos
broja
+ 1 (prenos oko kraja)
0 00010 ( +2)
prenos
broja
+ 1 (prenos oko kraja)
0 00010 ( +2)
Oduzimanje preko (r-1)-og komplementa : Za oduzimanje u (r-1)-tom komplementu, sabirat ćemo (r-
1)-ti komplement umanjioca sa umanjenikom. Ako se dobije prenos broja dodajemo ga rezultatu (prenos
oko broja). Dobijena razlika također je predstavljena u (r-1)-tom komplementu.
Sljedeći primjeri ilustriraju oduzimanje pozitivnih, negativnih i suprotno označenih binarnih brojeva
predstavljenih u r-tom komplementu.
▪ Primjer 2.35 U narednim primjerima brojevi dati u zagradama su decimalni ekvivalenti binarnih brojeva.
Sabiranje i oduzimanje sa brojevima u notaciji (r-1)-tog komplementa može kao rezultat da ima preveliki
protok u slučaju ako je prevaziđeno područje predstave (r-1)-tog komplementa. Slično slučaju kada su
brojevi u r-tom komplementu, može nastupiti preveliki protok kad sabiremo dva broja koja imaju isti
predznak ili kad oduzimamo dva suprotno označena broja. U bilo kojem od slučaja, detektujemo prevelik
protok preko osmatranja najznačajnijeg digita rezultata.
Množenje i dijeljenje
Zaključimo naš uvod u aritmetičke operacije razmatranjem množenja i dijeljenja sa brojevima sa fiksnom
tačkom i znakom (predznakom). U ovom što slijedi ograničićemo našu diskusiju na binarne brojeve.
Uočimo, međutim, da se izvedena procedura može primijeniti na sistem bilo koje baze.
Množenje je ponovljeni proces operacije lijevog pomjeranja i sabiranja. Polazeći od najmanje značajnog
bita (lsb) množitelja (multiplier) i ako je 1, množenik (multiplicant) se kopira u formi prvog parcijalnog
proizvoda; ako je 0 i prvi parcijalni proizvod formira sekvenca sastavljena od nula. U slijedećem, ispituje
se drugi bit množitelja. Ako je 1, drugi parcijalni proizvod je kopija množenika, pomjera se za jedno
mjesto na lijevo u odnosu na prvi parcijalni proizvod. Ako je 0, onda je drugi parcijalni proizvod sekvenca
sastavljena samo od nula. Proces se nastavlja sve dok se ne iscrpe svi biti množitelja. Nakon toga se svi
parcijalni proizvodi sabiraju u obliku krajnjeg proizvoda.
Znak proizvoda određen je formom znaka množenika i množitelja. Ako su isti, proizvod je pozitivan, a ako
ne, proizvod je negativan.
Za ilustraciju procesa množenja razmotrimo slijedeći primjer. Znaci brojeva u ovom primjeru
predpostavljeni su kao isti i radi toga su izostavljeni.
Primjer 2.37
11001 množenik
x 01101 množitelj
11001 množitelj lsb=1; kopiraj množenik
00000 množiteljev bit=0; sekvenca nula, pomjerena u lijevo
parcijalni 11001 množitelj bit=1; kopiraj množenik i pomjeri u lijevo
proizvodi 11001 množiteljev bit=1; kopiraj množenik i pomjeri u lijevo
00000 . množiteljev bit=0; sekvenca nula pomjerena u lijevo
101000101 saberi sve parcijalne proizvode za formiranje krajnjeg proizvoda
Primjer 2.38
(b) Šest bita od X:X>Y; pomjeri u desno Y i oduzmi, uvedi msb od Q=1.
011011
- 10001
01010
010100
- 10001
00011
000111
(e) Parcijalni ostatak<Y; pomjeri u desno; unesi 0 u Q.
001111
011110
- 10001
01101 posljednji ostatak
Uočimo da operacija dijeljenja može rezultirati prevelikim protokom u kvocijentu. Preveliki protok može
da se desi u više situacija, ali sigurno ako je djelilac nula.
Do sada smo se već susreli sa nekim numeričkim kodovima. Interpretirali smo binarne obrasce (patterns)
koji predstavljaju binarni, decimalni, oktalni, heksadecimalni, BCD, veličine sa znakom, te brojeve 1-vog i
2-gog komplementa. U ovoj sekciji razmotrit ćemo neke dodatne numeričke kodove, instrukcione kodove i
kodove za detekciju greški.
Binarni kodovi mogu biti uspostavljeni za bilo koji skup diskretnih elemenata. Ako skup sadrži 2m
diskretnih elemenata, onda se bar m bita zahtijeva za njegovo kodiranje. Na primjer, ako skup sarži 12
elemenata, onda se bar četiri bita zahtijevaju za jedinstveno kodiranje svakog od ovih elemenata. Sa četiri
bita možemo kodirati do maksimalno 16 različitih elemenata. Istaknimo, međutim, da ne postoji
maksimalni broj bita za binarno kodiranje. Na primjer, možemo koristiti 12 bita za kodiranje 12 elemenata.
U ovom kodu, prvom elementu može biti dodjeljen oblik 000000000001, drugi element može biti kodiran
sa 000000000010, i tako dalje do dvanaestog elementa kodiranog sa 100000000000.
Decimalni kodovi
U BDC kodu, svaki decimalni digit kodiran je kao pravi 4-bitni binarni broj. BCD kod se također naziva i
kao 8421 kod zbog toga što se koriste sukcesivne vrijednosti eksponenta 2 (23, 22, 21, 20) za konverziju
binarnog bitnog oblika u njegov ekvivalentni decimalni digit. Pošto je svaki bit pomnožen sa
odgovarajućom težinom i suma otežanih bitova daje decimalni digit, BCD kod se označava kao otežani
kod (weighted code).
Veliki broj drugih različitih kodova može da se formuliše permutacijom četiri bita da bi se predstavilo
deset decimalnih digita. Neki primjeri najuobičajnijih 4-bitnih decimalnih kodova prikazani su u Tabeli
2.6. Treba uočiti da otežavanje kodova može biti pozitivno ili negativno. Zapazimo također da neki kodovi
(npr. 2421 kod) koriste slične težine za različite pozicije bita. Dakle, predstave nekih decimalnih digita nisu
jedinstvene u ovim kodovima.
Decimalni
BCD 8421 2421 84 (-2) (-1) Excess 3
Digit
0 0000 0000 00 00 0011
1 0001 0001 01 11 0100
2 0010 0010 01 10 0101
3 0011 0011 01 01 0110
4 0100 0100 01 00 0110
5 0101 1011 10 11 1000
6 0110 1100 10 10 1001
7 0111 1101 10 01 1010
8 1000 1110 10 00 1011
9 1001 1111 11 11 1100
Da se dobije decimalni ekvivalent riječi otežanog koda, moramo pomnožiti svaki bit sa njegovom
respektivnom težinom. Na primjer, kodirana riječ 1101 u pozitivno otežanom kodu 2421 ekvivalentna je sa
1·2+1·4+0·2+1·1=(7)10 , dok je 1011 u kodu 84(-2)(-1) ekvivalentna sa 1·8+0·4+1·(-2)+1·(-1)=(11)10. Neke
kodirane riječi mogu da vrijede po jednoj kodnoj šemi, a bezvrijedne po drugoj. Na primjer, 1101 vrijedi u
2421 kodu, a bezvrijedni u 84(-2)(-1) kodu pošto je 1·8+0·4+1·(-2)+1·(-1)=(11)10. Neke kodne riječi, kao
1011 vrijede po obadvije šeme.
Pošto koristimo samo deset od mogućih 16 kodiranih riječi sa četiri bita, šest kodne riječi su uvijek
bezvrijedne sa bilo kojom decimalnom kodnom šemom. Za 2421 kod riječi sa bezvrijednim kodom su
0101, 0110, 1000, 1001 i 1010; a za 84(-2)(-1) kod bezvrijedne su kodne riječi 0001, 0010, 0011, 1100,
1101 i 1110.
Drugi skupovi težina su mogući. Možemo konstruirati 4-bitne decimalne kodove korištenjem težina
(6,3,2,1), (6,4,2,-3), (4,2,2,1), (7,4,2,1) i njih ilustrirati sa nekoliko primjera. Tabela 2.6 prikazuje primjer
neotežanog koda poznatog kao excess 3 kod. Ovdje je svaki decimalni digit kodiran dodavanjem
(3)10=(0011)2 na svoj BCD ekvivalent i tako dobijen binarni kod u formi 8421. Na primjer, decimalno 8 je
kodirano sa 1011 što je decimalno 11 = (=8+3) u 8421 kodu.
Nedostatak korištenja BCD koda je teškoća u sračunavanju njegovog 9-tog komplementa. Nasuprot tome
2421, 84(-2)(-1) i excess 3 kodovi imaju autokomplementarnu osobinu gdje je 9-ti komplement svakog
decimalnog digita dobiven zamjenom 1-vog i 0-tog u njegovom binarnom kodu. Da bi bio auto-
komplementaran, kod mora biti simetričan oko centra. Ovo znači da za otežani kod suma težine mora biti
jednaka 9, dok za neotežani kod binarna suma kodnih riječi decimalnog digita i njegovog 9-tog
komplementa mora biti jednaka kodnoj riječi 9. Čitaoc može ovo lako verificirati, izuzev za BCD, da
kodovi dati u Tabeli 2.6 zadovoljavaju ove uslove i takođe su ohrabreni da pokažu da su otežani kodovi
(5,2,1,1), (4,2,2,1) i (6,4,2,-3) također autokomplementarni. Međutim, pošto slične težine rezultiraju u
nejedinstvenim kodnim riječima, moramo verificirati da je generisani skup zaista autokomplementaran
(vidi Problem 2.21).
Autokomplementarna osobina, demonstrirana u slijedećem primjeru je veoma korisna kod izvršavanja
aritmetičkih operacija sa binarno kodiranim decimalnim brojevima i kada se oduzimanje vrši preko 9-tog
komplementa.
Primjer 2.39 Odredi 9-ti komplement od (38)10 u obliku četvero kodiranih šema, Tabele 2.
(Zbog jednostavnosti odbaci digit znaka).
BCD: Da se nađe BCD predstava 9-tog komplementa od 38 moramo koristiti jednadžbu (2.9) što daje 61 i
nakon toga primjeniti Tabelu 2.6. Dakle, (38)10=(00111000) i (61)10=(01100001),
2421: (38)10=(00111110). Komplementirajući svaki bit dobijamo (11000001)=(61)10
84(-2)(-1): (38)10=(01011000). Komplementirajući svaki bit dobijamo (10100111)=(61)10
Excess 3: (38)10=(01101011). Komplementirajući svaki bit dobijamo (10100111)=(61)10
Kako se vidi iz primjera, auto-komplementni decimalni kodovi omogućavaju nam da dobijemo 9-ti
komplement na jednostavan pravolinijski način, oslobađajući nas da koristimo jednadžbu (2.9). Ova
osobina omogućava nam da implementiramo vrlo jednostavno logički krug da generira 9-ti komplement.
Ranije smo spomenuli da je četiri bita maksimalni broj bita koji se zahtijeva da se kodiraju deset decimalni
digiti. Ipak, ponekad je nužno koristiti više od četiri bita. Dva ovakva primjera prikazana su u Tabeli 2.7.
Oba ova koda su korisna za detekciju greške, kako će biti objašnjeno u narednoj sekciji. Bikuinari
(biquinary) kod je 7-bitni otežani kod, dok je 2-van-od-5 (2-out-of-5) kod 5-bitni neotežani kod. Oba se
karakterišu da imaju samo dva 1-va u svakoj riječi koda.
Zapazi kako je konstruisan bikuinari kod: Samo 01 pod najznačajnijom težinom {5,0} ukazuje da je
decimalni digit u području od 0 do 4, dok 10 pod ovom težinom ukazuje da je decimalni u području od 5
do 9. Ovdje 1 pod bilo kojom preostalom težinom ukazuje na položaj digita unutar područja, dakle, 1 pod
najmanje značajnom težinom {0} da je decimalni digit prvi unutar područja, dok 1 pod težinom {1}
ukazuje da je decimalni digit drugi unutar područja i tako dalje.
TABELA 2.7 Primjeri decimalnih kodova koji imaju više od četiri bita
Izvođenje riječi od 2-van-od-5 koda je sasvim jednostavno. Svaka riječ koda mora imati samo 1 bit, dok su
preostala tri bita 0. Uoči, međutim, da šema kodiranja nije jedinstvena, nego riječi koda mogu da budu
permutirane u odnosu na decimalne digite gdje svaka permutacija proizvodi validni 2-van-od-5 kod.
Gray-ov kod
Mnoge praktične primjene zahtijevaju kodove u kojima se sukcesivne riječi koda razlikuju samo u jednom
bitu. Ovi kodovi se označavaju kao ciklički kodovi (cyclic codes), a među njima je Gray-ov kod značajan
član. Tabela 2.8 prikazuje primjer 4-bitnog Gray-ovog koda.
Kao što se može vidjeti svaka binarno kodirana riječ razlikuje se od bilo naredne ili prethodne u promjeni
samo jednog bita od 1 na 0 ili od 0 na 1. Kod prikazan u Tabeli 2.8 nije jedini mogući ciklični kod, već se
mogu izvesti drugi kodovi sa sličnim karakteristikama. Gray-ov kod se često koristi u situacijama gdje
drugi binarni kodovi mogu dovesti do pogrešnih ili sumnjivih rezultata tokom tranzicije jedne kodirane
riječi na drugu u kojoj se više od jednog bita koda mijenja.
Razmotrićemo, na primjer, korištenje koda 8421 i zahtjev za tranziciju od 0111 na 1000. Ovakva tranzicija
traži da se sva četiri bita jednovremeno mijenjaju. Zavisno od logičkog kruga koji generira bitove, može da
postoji značajna razlika u vremenima tranzicije različitih bitova. Na primjer, ako se najznačajniji bit
mijenja brže od ostatka, onda idući od 0111 ka 1000, momentalno ćemo dobiti pogrešan kod 1111. Pojava
ove kodirane riječi proizvodi pogrešnu operaciju čiji ishod zavisi od relativnih vremena tranzicije bita koji
se mijenjaju u kolu čiji su ulazi ovi bitovi. Situacija slična ovoj, u kojoj ishod zavisi od relativnih vremena
tranzicije promjenjivih bitova označava se kao utrka (race). Korištenje Gray-ovog koda eliminiše ovaj
problem, što se po tranziciji dešava samo promjena jednog bita i bilo kakva utrka između bitova neće imati
nikakav uticaj na rezultat.
Gray-ov kod pripada klasi kodova označenih kao reflektirani kodovi (reflected codes). Izraz reflektivni
kod vodi porijeklo od metoda korištenog za njegovo izvođenje.
0 0 00 000 0000
1 1 01 001 0001
(a) 1 11 011 0011
0 10 010 0010
(b) 10 110 0110
11 111 0111
01 101 0101
00 100 0100
(c) 100 1100
101 1101
111 1111
110 1110
010 1010
011 1011
011 1001
000 1000
(d) (e)
Kako pokazuje slika n-ti kod generiran je reflektiranjem (n-1)-og koda. Prvi biti 0 i 1 napisani su u koloni
(a), reflektrirajuća linija podvučena je ispod 1 i kolona je reflektirana oko nje (b). Dvije 0 su dodate iznad
reflektirajuće linije i dvije 1 su dodate ispod nje, kako pokazuje gornji dio (c). Druga reflektirajuća linija je
povučena (c) i proces se nastavlja na (d) i (e). Ovaj proces se nastavlja do dobijanja željenog broja
kombinacija.
Alfanumerički kodovi
Mnoge primjene koriste podatke koji uključuju ne samo brojeve već također slova alfabeta, kao i ostale
specijalne karaktere. Ovakvi podaci zovu se alfanumerički podaci i mogu da se predstave numeričkim
kodovima. Kada su brojevi uključeni u podatke, mogu se također predstaviti specijalnim kodovima.
Jedan alfanumerički skup podataka tipično uključuje 26 slova alfabeta (moguća velika i mala slova), deset
decimalnih digita i određen broj specijalnih simbola kao što su +, =, “, $ i !.
Dva najuobičajenija alfanumerička koda su ASCII – američki standardni kod za razmjenu informacija
(American Standard Code for Information Interchange), prikazan u Tabeli 2.10. ASCII je 7-bitni kod, dok
je EBCDIC 8-bitni kod. Pošto mnogi digitalni kodovi rade sa 8-bitnim (bayt-nim) kodovima mnogo
efikasnije, jedna 8-bitna verzija nazvana ASCII-8 (ili USASCII-8) također je razvijena i prikazana u
Tabeli 2.11.
Kako možemo vidjeti iz ovih tabela dati su i neki dodatni specijalni kodovi skupu alfanumeričkih
karaktera. Ovi rezervirani kodovi koriste se kao komunikacioni signali u primjenama gdje dolazi do
prenosa podataka, između digitalnog sistema koji je spojen preko komunikacionih linija. Na primjer, linije
napajanja – LF (line feed) i nosilac povrata – CR (carriouge return) se koriste u spoju sa štampačem; BEL
se koristi za aktiviranje zvona; ACR (acknowledge), NAK (negative acknowledge) i DLE veza pobjega
podataka (data link escape) su razmjenjeni signali preko komunikacionih linija.
Najmanje značajni digiti (nibble)
najznačaj-
niji digit
(nibble)
najznačaj-
niji digit
(nibble)
najznačaj-
niji digit
(nibble)
Primjer 2.40 Pronađi heksadecimalni i binarni kod za malo slovo k u tri alfanumeričke kodne šeme.
ASCII : Lociranjem slova k u Tabeli 2.9 vidi se da je njegova vrijednost u vrsti
(6)16=(0110)2 a njegova vrijednost u koloni je (B)16=(1011)2. Dakle ASCII kod za k je
(6B)16=(01101011)2.
EBCDIC : Korištenjem Tabele 2.10 EBCDIC kod za k je (92)16=(10010010)2.
ACSII-8 : Korištenjem Tabele 2.11 ASCII-8 kod za k je (EB)16 ili (11101011)2.
Primjer 2.41 Nađi karakter predstavljen sa (01011011)2 ili [ekvivalent (5B)16] u tri alfanumeričke kodne šeme.
ASCII : Karakter je lociran u Tabeli 2.9 na presjeku (5)16 vrste i (B)16 kolone i njegov
simbol je [ .
EBCDIC : Korištenjem Tabele 2.10 simbol je $.
ASCII-8 : Korištenjem Tabele 2.11 karakter je;.
Primjer 2.42 ASCII i EBCDIC kodovi za neke nizove karaktera prikazani su u Tabeli 2.12
$ specijalni broj 24 49 6E 74 65 67 65 72 3B C9 95 A3 85 87 85 99
04/12/84 30 34 2F 31 32 2F 38 34 F0 F4 61 F1 F2 61 F8 F4
Ostavili smo prostora između baytova da učinimo kodove čitljivim; međutim takvi prostori u aktuelnoj
komunikaciji podataka ne postoje. Zapazimo da brojevi u tabeli (04,12 i 84) imaju kodove koji se razlikuju
od njihove uobičajene BCD predstave.
Digitalni podaci tipično su pripremljeni na ulaznom uređaju (tastatura – keyboard) i potom poslani preko
neke komunikacione veze i pročitani od strane digitalnog sistema (računara).
Proces prenosa digitalne informacije je predmet greške. Mada je moderna oprema projektovana da reducira
greške, čak i ne česte greške mogu uzrokovati ozbiljne probleme. Dakle, bitno je detektovati greške kad je
to moguće.
Ako se greške ne dešavaju često može se pokušati retransmisija podataka. Međutim u modernim
digitalnim komunikacionim sistemima ovo se ne smatra efikasnim. Retransmisija podataka za svaku
detektovanu grešku očigledno je suviše skupa. Iz ovih razloga razvijene su tehnike za korekciju
detektiranih grešaka. Upotreba ovih tehnika uobičajeno implicira još komplikovanije sisteme. Optimalno
rješenje, dakle, leži između ova dva prilaza – između korištenja jednostavnih i relativno jeftinih sistema
koji ne ispravljaju detektirane greške i korištenja sofisticiranih i skupih sistema sposobnih da korigiraju
mnoge greške. U ovim sistemima razmotrićemo samo kodove za detekciju greški.
Kod detektiranja greške je binarni kod koji detektira digitalne greške tokom prenosa podataka. Jedna od
najšire korištenih šema za detekciju grešaka je metod pariteta. On znači uvođenje dodatnog bita, pariti
bita u binarnu poruku koja se prenosi sa jedne lokacije na drugu. U slijedećim diskusijama predpostavlja se
da je paritetni bit dodat poruci u krajnje desnu poziciju. On također može biti dodat na krajnju lijevu
poziciju.
Paritetni bit može da se projektuje kao parni ili neparni paritet. Kod metoda parnog pariteta, paritetni bit je
postavljen na 1 tako da je totalni broj 1-ca u binarnoj poruci (uključujući i bit pariteta) paran broj;
drugačije se postavlja na 0. Predpostavimo, na primjer, da želimo prenijeti EBCDIC karakter $ čiji je
binarni kod 01011011. Pošto on sadrži neparan broj jedinica, dodatni bit pariteta postavlja se na 1 da se
ukupan broj jedinica učini parnim. Prema tome, kod koji će stvarno biti prenesen je 010110111. Za
EBCDIC karakter C kod koji će biti prenesen je 110000110. Metod neparnog pariteta koristi se tačno na
isti način osim što je bit pariteta postavljen na 1, tako da je ukupan broj 1-ca, uključujući i bit pariteta
neparan broj.
Bez obzira da li koristimo parni ili neparni paritet, bit pariteta predstavlja integralni dio koda. Razmotrimo
sliku 2.2.
koja pokazuje blok dijagram digitalnog sistema prenosa podataka koji koristi provjeru pariteta. Na kraju
pošiljaoca binarna poruka prvo je primjenjena na generator pariteta koji proizvodi odgovarajući bit
pariteta. Poruka uključuje bit pariteta, koji je nakon toga prenesen na svoje odredište. Na prijemnom kraju
dolazeća poruka je primjenjena na detektor pariteta koji verificira integritet informacije pariteta. Ako broj
1-ca u poruci odgovara (matches) generiranom paritetu poruka se smatra korektnom pa detektor pariteta
izdaje OK signal koga prihvata prijemnik podataka. Drugačije, ako se poruka detektira kao netačna
detektor pariteta izdaje signal GREŠKA, koji se može koristiti kao zahtijevana transmisija.
Metod pariteta je ograničen sa te strane što se može koristiti za detekciju greške u poruci, ali ne može
detektovati u kojem je bitu greška. Šta više, bez obzira da li koristimo parni ili neparni paritet, metod
pariteta može detektirati samo neparni broj greški (vidi zadatak 2.28). Postoje mnogo elaboriranije šeme
koje ne samo što provjeravaju multiple greške, već detektuju i gdje su greške, te ih koriguju.
Drugi primjer koda za detekciju greške je 2-van-5 kod, prikazan u Tabeli 2.7. Ovaj kod je tako konstruisan
da je svaki decimalni digit prestavljen binarno kodiranom rječju u kojoj su dva bita 1, a svi ostali 0. Prema
tome, ako digit koji stiže u prijemnik ima tri 1, pokazaće se greška i digit će biti odbačen kao nekorektan.
Kod 2-van-5 je sposoban da detektira svaku grešku koja sadrži promjenu jednog ili više bita što uzrokuje
da se broj 1-ca razlikuje od 2. Međutim, ima slučajeva gdje se može desiti simultana promjena dva bita, pa
se različiti digiti, koji također imaju dvije 1, proizvode i prihvaćaju sa neuspjehom koda da detektira
grešku. Na primjer, ako je broj 4 predstavljen kodom 01010 prenesen netačno i najmanje značajan bit
promijenjen u 1, doći će do trenutne detekcije greške. Međutim, ako je drugi najznačajniji bit također
afektiran u isto vrijeme, onda će rezultantna kodirana riječ 01001, koja predstavlja decimalno 3, biti
prihvaćena sa nedetektiranom greškom.
Bikuinari kod prikazan u Tabeli 2.7 je još jedan primjer koda sa osobinama detekcije greške. Strukturiran
slično 2-van-5 kodu, bikuinari (biquinary) kod može na sličan način da se upotrijebi za detekciju greške, ali
će na jednak način otkazati ako se dva bita jednovremeno promijene i proizvedu vrijednu kodiranu riječ.
Instrukcioni kodovi
Pored predstavljanja podataka, binarni kodovi se također koriste za formulaciju upravljačkih instrukcija,
označenih kao instrukcioni kodovi. Instrukcioni kod je grupa bita koja kaže digitalnom sistemu da izvrši
specifičnu operaciju. Instrukcioni kod je obično podijeljen u dijelove od kojih svaki ima vlastitu posebnu
interpretaciju. Najznačajniji dio instrukcionog koda je operacioni kod. Operacioni kod (operation code) ili
op-kod (op-code) je grupa bita koja definira operacije kao što su sabiranje, oduzimanje, pomjeranje i
komplementiranje. To je instrukcioni glagol (verb) koji sistemu kaže što činiti. Drugi dio instrukcije sastoji
se od jednog ili više operanada. Operand je ime koje se koristi za objekat i može da bude podatak ili adresa
koja kaže gdje su podaci.
Da bi se izvršile instrukcije formulisane za digitalni sistem, one moraju biti binarno kodirane.
Razmotrićemo, na primjer, operacije opterećivanja (load) i pamćenja (store). Opteretiti znači kopirati
broj iz memorijske lokacije u registar, dok pamtiti znači kopirati broj iz registra u memorijsku lokaciju
(Memorija i registar biće diskutovani u Poglavlju 7).
Na primjer, mikroprocesor Motorola 6800 koristi heksadecimalni op-kod 86 da OPTERETI registar A sa
vrijednošću a. Isti mikroprocesor koristi heksadecimalni op-kod B7 da UPAMTI sadržaj registra A u a
memorijsku lokaciju (zapazi da koristimo heksadecimalnu notaciju samo kao pogodnu stenografsku
predstavu; u digitalnom sistemu op-kodovi su predstavljeni u binarnoj formi).
Instrukcije koje sadrže ovi op-kodovi mogu biti, na primjer, 86 F2 (u heksadecimalnom), što znači
OPTERETI registar A sa vrijednošću F2 ili B7 00F2, što se prevodi u ZAPAMTI vrijednost registra A u
memorijsku lokaciju (čija adresa je) 00F2. Ponovo F2 je interno predstavljen u mikroprocesoru kao
(11110010).
1. Binarni broj bez znaka, ekvivalentan decimalnom 149, oktalnom 225 ili heksadecimalnom 95.
2. Binarni broj bez znaka (ekvivalentan decimalnom 21) sa parnim paritetom.
3. Predstava veličine sa znakom koja odgovara -(21)10.
4. Predstava prvog komplementa od -(106)10.
5. Predstava drugog komplementa od -(107)10.
6. BCD broj bez znaka, ekvivalentan (95)10.
7. BCD broj sa znakom ekvivalentan sa –(5)10.
8. ASCII za karakter NAK, sa parnim paritetom.
9. Op-kod u instrukcionom skupu mikroprocesora Motorola 6800 koji izvršava logičko I (AND)
između sadržaja registra A i sadržaja momorijske lokacije M.
10. Excess 3 kodirani decimal 62.
11. Grey-ov kodirani decimal 226.
Sigurno ste začuđeni kako digitalni sistem odlučuje koju od ovih intrepretacija da realizije. Ali, on to ne
čini. To je zadatak projektanta digitalnog sistema, koji odlučuje o značenju različitih binarnih podataka
unutar sistema.
Zadaci