You are on page 1of 101

1.

Dio

Rad s podatcima u računalu

Ovaj dokument namijenjen je isključivo za osobnu upotrebu studentima


Fakulteta elektrotehnike i računarstva Sveučilišta u Zagrebu.
Svaka druga upotreba ili umnožavanje bilo kojeg dijela ovog dokumenta
nije dozvoljena bez pismene dozvole autora.
© Mario Kovač, Danko Basch

© Kovač, Basch, FER, Zagreb 1


Rad s podatcima u računalu
• Većina gradiva ovog poglavlja je ponavljanje i utvrđivanje gradiva
iz "Programiranja" i "Digitalne logike"

• Ovo poglavlje trebate proučiti sami za domaću zadaću

• Slajdove označene sa i možete preskočiti, a mogu ih proučiti


oni koji žele znati više

© Kovač, Basch, FER, Zagreb 2


Uvod
• U ovom predmetu se proučavaju procesori, memorije, vanjske
jedinice, sabirnice, programiranje u asembleru
 Proučava se računalo na niskoj razini
• Prilikom programiranja u asembleru nisu nam na raspolaganju:
• tipovi podataka iz viših programskih jezika (int, float, char, struct,
array itd.)
• operacije koje s njima možemo raditi (+, -, *, /. %, itd.)

• Da bi ostvarili rad s ovim podatcima, moramo većinu stvari riješiti


programski

• Zato moramo poznavati način na koji su podatci zapisani u


računalu i kako računalo radi s tim podatcima

© Kovač, Basch, FER, Zagreb 3


Uvod
• Svi podatci u računalu zapisuju se u binarnom obliku pa zato
moramo znati kako se brojevi pišu u različitim bazama

• Zatim moramo znati kakvu vrstu podataka želimo zapisati u


računalu i koji prikaz podataka (tj. koji kôd) je najpogodnije
upotrijebiti

• Na kraju moramo znati kako se obavljaju različite operacije


(npr. zbrajanje, logički ILI) s odabranim prikazom podataka

© Kovač, Basch, FER, Zagreb 4


1.1. Brojevne baze

© Kovač, Basch, FER, Zagreb 5


Brojevne baze - podsjetnik
• Svi podatci u računalu zapisuju se u binarnom obliku

• Zato moramo znati kako se brojevi pišu u različitim bazama:


• dekadska - baza koji koristimo u svakodnevnoj upotrebi
• binarna - baza koja se često koristi u računarstvu
• heksadekadska - slično binarnoj, ali je praktičnija zbog kraćeg
zapisa

• Npr., broj -75,2510 se u binarnoj bazi zapisuje kao -1001011,012,


ili u heksadekadskoj bazi kao -4B,416

• Svi ovi brojevni sustavi su tzv. težinski sustavi, jer svaka


znamenka ima težinu, koja se izračunava kao potencija brojevne
baze:
-75,25 = -(7*101 + 5*100 + 2*10-1 + 5*10-2)

© Kovač, Basch, FER, Zagreb 6


Brojevne baze
• Važno:
• Zapisi -75,2510 , -1001011,012 i -4B,416 NISU način
prikaza brojeva u računalu

• To su samo zapisi broja u različitim bazama "na papiru“


radi jednostavnijeg razumijevanja u pojedinim
situacijama

• U računalu se ne mogu izravno prikazati predznak,


decimalni zarez, oznaka baze itd., a na raspolaganju
za prikaz je samo ograničeni broj bitova.

• Za prikaz u računalu definiraju se različiti kôdovi

© Kovač, Basch, FER, Zagreb 7


1.2. Prikaz podataka u računalu

© Kovač, Basch, FER, Zagreb 8


Prikaz podataka
• Svi podatci u računalu zapisuju se, obrađuju i prenose u binarnom
obliku, ili točnije kao različite naponske razine na sklopovima ili
različiti smjerovi magnetizacije na diskovima i sl.
• Za nas je dovoljno promatrati ih u binarnom obliku

• Postoje različite vrste podataka koje nam trebaju u programiranju:


cijeli brojevi, realni brojevi itd.
• Svaka vrsta podataka može se u računalu prikazati na različite
načine.
• Svaki način prikaza definiran je kôdom. Neformalno možemo
reći da je kôd niz bitova kojima je dodijeljeno određeno značenje.
• Prikaz podataka u računalu uvijek je ograničen određenim brojem
bitova (u registru, na sabirnici, u ALU itd.) pa obično
treba zadati i širinu prikaza u bitovima

© Kovač, Basch, FER, Zagreb 9


Prikaz podataka
• Tipične vrste podataka i njihovi prikazi:
• Cjelobrojni podatci
• Bez predzaka
• NBC
• BCD
• S predznakom
• prikaz s bitom za predznak
• prikaz jediničnim komplementom
• prikaz dvojnim komplementom
• Brojevi u pomičnom zarezu
• IEEE-format
• Znakovi
• ASCII

© Kovač, Basch, FER, Zagreb 10


NBC - Podsjetnik
• NBC (Natural Binary Code) služi za prikaz pozitivnih cijelih
brojeva

• Svaki bit predstavlja jednu znamenku u običnom


težinskom prikazu

Primjer: broj 37 prikazan u 8-bitnom NBC-u je:

00100101, jer je 1001012 = 25+22+20 = 32+4+1 = 37

• Za N-bitni NBC, prikazivi opseg je od 0 do 2 N-1

© Kovač, Basch, FER, Zagreb 11


BCD - Podsjetnik
• BCD (Binary Coded Decimal) služi za prikaz pozitivnih cijelih
brojeva
• Svaka dekadska znamenka prikazuje se grupom od 4
binarne znamenke koja se zasebno kodira težinskim
prikazom

• BCD se zapisuje u bajtovima pa imamo:


• pakirani BCD - po dvije dekadske znamenke u bajtu
• nepakirani BCD - jedna dekadska znamenka u bajtu (viša 4
bita su 0000)

Primjer: broj 37 prikazan u BCD-u je:


0011 0111 - jer je 00112 = 3 i 01112 = 7 (pakirani)
0000 0011 0000 0111 (nepakirani)

© Kovač, Basch, FER, Zagreb 12


BCD - Podsjetnik
• U grupi od 4 binarne znamenke kodiraju se samo brojevi od
0 do 9, tj. dobivaju se znamenke 0000 do 1001, a ostale
kombinacije su zabranjene

• Prikazivi opseg ovisi o broju bajtova i o pakiranosti.

• Na primjer, za nepakirani BCD zapisan u 4 bajta, prikazivi


opseg je od 0 do 9999

© Kovač, Basch, FER, Zagreb 13


Prikaz s bitom za predznak - Podsjetnik
• Služi za prikaz pozitivnih i negativnih cijelih brojeva, tj. cijelih
brojeva s predznakom
• Predznak se označuje pomoću najvišeg bita, a preostali niži
bitovi sadrže težinski zapis apsolutnog iznosa broja:

P apsolutni iznos broja

0 pozitivan broj
1 negativan broj

• Nedostatak: Nula ima dva prikaza +0 i -0 što otežava izvedbu


računskih operacija
• Za N-bitni prikaz s bitom za predznak, prikazivi opseg je od
-(2N-1-1) do +(2N-1-1)

© Kovač, Basch, FER, Zagreb 14


Prikaz s bitom za predznak - Podsjetnik

Primjer: brojevi +37 i - 35 prikazani u 8-bitnom prikazu s bitom


za predznak su:

• 37 (apsolutni iznos od +37) prikazan težinski u 7 bita je 0100101 2


• Budući da je +37 pozitivan, konačni prikaz je 00100101

• 35 (apsolutni iznos od -35) prikazan težinski u 7 bita je 0100011 2


• Budući da je -35 negativan, konačni prikaz je 10100011

© Kovač, Basch, FER, Zagreb 15


Prikaz 1'k - Podsjetnik
• Prikaz jediničnim komplementom (mi ćemo ga skraćeno
označavati 1'k) služi za prikaz cijelih brojeva s predznakom

• Pozitivni brojevi prikazuju se tako da se u najviši bit stavi


ništica, a preostali niži bitovi sadrže težinski zapis broja

• Negativni brojevi se prikazuju tako da se prikaže njihov


apsolutni iznos (kao za pozitivne brojeve), a zatim se na cijelom
podatku napravi operacija jediničnog komplementa (zamjenjuju
se ništice i jedinice)

• Nedostatak: Nula ima dva prikaza +0 i -0 što otežava izvedbu


računskih operacija

• Za N-bitni 1'k, prikazivi opseg je od -(2N-1-1) do +(2N-1-1)

© Kovač, Basch, FER, Zagreb 16


Prikaz 1'k - Podsjetnik
Primjer: brojevi +37 i - 35 prikazani u 8-bitnom prikazu 1'k:

• 37 (apsolutni iznos od +37) prikazan težinski u 7 bita je 0100101 2

• Budući da je +37 pozitivan, na najviše mjesto se stavlja ništica što


daje konačni prikaz: 00100101

• 35 (apsolutni iznos od -35) prikazan težinski u 7 bita je 0100011 2

• Prikaz broja +35 s dodanom ništicom je 00100011. Budući da je


početni broj -35 negativan, broj 00100011 treba komplementirati
što daje konačni prikaz: 11011100

00100011

11011100

© Kovač, Basch, FER, Zagreb 17


Prikaz 2'k - Podsjetnik
• Prikaz dvojnim komplementom (mi ćemo ga skraćeno označavati
2'k) služi za prikaz cijelih brojeva s predznakom

• Brojevi se prikazuju analogno kao u 1'k, samo se za dobivanje


negativnog broja koristi operacija dvojnog komplementa:
• Pozitivni brojevi prikazuju se tako da se u najviši bit stavi ništica, a
preostali niži bitovi sadrže težinski zapis broja
• Negativni brojevi se prikazuju tako da se prikaže njihov apsolutni
iznos (kao za pozitivne brojeve), a zatim se na cijelom podatku
napravi operacija dvojnog komplementa (zamjenjuju se ništice i
jedinice i zatim se pribroji jedinica)

• Za N-bitni 2'k, prikazivi opseg je od -(2 N-1) do +(2N-1-1)

© Kovač, Basch, FER, Zagreb 18


Prikaz 2'k - Podsjetnik
Primjer: brojevi +37 i - 35 prikazani u 8-bitnom prikazu 2'k:

• 37 (apsolutni iznos od +37) prikazan težinski u 7 bita je 0100101 2

• Budući da je +37 pozitivan, na najviše mjesto se stavlja ništica što daje


konačni prikaz: 00100101

• 35 (apsolutni iznos od -35) prikazan težinski u 7 bita je 0100011 2

• Prikaz broja +35 s dodanom ništicom je 00100011. Budući da je početni


broj -35 negativan, broj 00100011 treba dvojno komplementirati: što
daje konačni prikaz: 11011101

00100011

11011100
+ 1
11011101

© Kovač, Basch, FER, Zagreb 19


Usporedba kôdova za cijele brojeve
Iznos broja
Niz
bitova bit za jedinični dvojni
NBC
predznak komplement komplement
0000 0 +0 +0 +0
0001 1 +1 +1 +1
0010 2 +2 +2 +2
0011 3 +3 +3 +3
0100 4 +4 +4 +4
0101 5 +5 +5 +5
0110 6 +6 +6 +6
0111 7 +7 +7 +7
1000 8 -0 -7 -8
1001 9 -1 -6 -7
1010 10 -2 -5 -6
1011 11 -3 -4 -5
1100 12 -4 -3 -4
1101 13 -5 -2 -3
1110 14 -6 -1 -2
1111 15 -7 -0 -1

© Kovač, Basch, FER, Zagreb 20


IEEE format - Podsjetnik
• 32-bitni IEEE format služi za zapis realnih brojeva, tj. brojeva s
pomičnim zarezom

• Realni broj X koji se želi prikazati IEEE-formatom, zapiše se u


obliku:
X = Mantisa2 * 2Eksponent
• pri čemu je Mantisa normalizirana, tj. s lijeve strane decimalnog
zareza ima samo jednu jedinicu, a ostale znamenke su desno od
zareza i nazivaju se Frakcija mantise:
X = 1,Frakcija2 * 2Eksponent

© Kovač, Basch, FER, Zagreb 21


IEEE format - Podsjetnik
• 32-bitni IEEE format definira se ovako:

31 30 23 22 0
P K F
• P (1 bit) je bit predznaka za koji vrijedi:
• 0 znači +
• 1 znači -

• K (8 bita) je Karakteristika za koju vrijedi:


• 1 ≤ K ≤ 254
• K = Eksponent + B (B=127, B je predbroj (engl. bias))

• F (23 bita) je Frakcija mantise

© Kovač, Basch, FER, Zagreb 22


IEEE format - Podsjetnik
• Realni broj X prikazan 32-bitnim IEEE-formatom računa se
po formuli:
X = (-1)P * 1,F * 2K-127

• Prikazivi opseg brojeva (u apsolutnom iznosu) je približno:

1,18·10-38 ≤ X ≤ 3,41·10+38

© Kovač, Basch, FER, Zagreb 23


IEEE format - Podsjetnik
• IEEE format ima četiri specijalna oblika:

• Ništica (engl. zero) služi za prikaz broja 0:


• K=0 i F=0

• Preljev (engl. overflow) označava da je broj prevelik za prikaz


(po apsolutnom iznosu) i traži eksponent veći od 127:
• K=255 i F=0 E>127, broj je prevelik

• Podljev (engl. underflow) označava da je broj premalen za


prikaz (po apsolutnom iznosu) i traži eksponent manji od -126:
• K=0 i F≠0

• Neispravan broj ili NaN (engl. not a number) označava da je


broj neispravan (npr. rezultat nakon dijeljenja s 0):
• K=255 i F≠0

© Kovač, Basch, FER, Zagreb 24


IEEE format - Podsjetnik
Primjer: Koji realni broj predstavlja podatak BF200000 16 koji je u
32-bitnom IEEE-formatu

BF200000 = 1011 1111 0010 0000 0000 0000 0000 0000


P K F
P=1
K = 011111102 = 12610  E = K-B = 126-127 = -1
F = 010 0000 0000 0000 0000 0000

Iz formule za X:
X = (-1)1 * 1,012 * 2-1 = -1 * 1,25 * 0.5
X = -0.625

© Kovač, Basch, FER, Zagreb 25


IEEE format - Podsjetnik
Primjer: Broj 7245,125 treba prikazati u 32-bitnom IEEE-formatu

Broj prvo prikažemo binarno:


7245,12510 = 1110001001101,0012
Zatim ga normaliziramo:
1,1100010011010012 * 212
Iz normaliziranog oblika izravno očitavamo F:
F = 1100 0100 1101 0010 0000 000
Izračunamo K na temelju E (E=12):
K = E+B = 12+127 = 139 = 10001011
Sastavimo P, K i F (P=0 jer je broj pozitivan):
0 10001011 11000100110100100000000 2
= 45E2690016

© Kovač, Basch, FER, Zagreb 26


ASCII - Podsjetnik
• ASCII (American Standard Code for Information Interchange) služi
za prikaz znakova (tj. slova, znamenaka, interpunkcije i kontrolnih
znakova)

• ASCII je 7-bitni kod, ali se u praksi u računalu zapisuje u 8 bita


(tj. u bajtovima)
• najviši bit postavlja se u ništicu (tzv. čisti ASCII)
• prilikom prijenosa podataka, najviši bit može se iskoristiti za provjeru
ispravnosti prijenosa (paritetni bit)

• ASCII se nekada koristio za komunikaciju između terminala i


udaljenog centralnog računala - otuda njegova građa i nazivi
kontrolnih znakova

© Kovač, Basch, FER, Zagreb 27


ASCII - Podsjetnik
• ASCII je definiran tablicom. Važnije grupe znakova su:

znakovi kodovi (dekadski)


mala slova engleske abecede (a...z) 97 do 122
velika slova engleske abecede (A...Z) 65 do 90
dekadske znamenke (0...9) 48 do 57
interpunkcijski znakovi 32..47, 58..64, 91..96 i 123..126
kontrolni znakovi 0..31 i 127

• Imena važnijih kontrolnih znakova (u zagradi je naveden dekadski kod):


• NUL (0) - služi za zaključivanje stringova u C-u
• CR (13) - prelazak kursora na početak retka
• LF (10) - pomak kursora u redak ispod
• BS (8) - pomak kursora za jedno mjesto unatrag
• DEL (127) - brisanje znaka ispod kursora

© Kovač, Basch, FER, Zagreb 28


Interpretiranje podataka
• Svaki niz ništica i jedinica može predstavljati različite
podatke zapisane korištenjem različitih prikaza

• Iz samog podatka ne može se vidjeti koji prikaz je


upotrijebljen pa samim tim ni o kojem podatku se radi
• Slijedi da za svaki podatak mora biti unaprijed poznato koji
prikaz se koristi

• Zadatak je programera da interpretira podatak na ispravan


način i da napiše program tako da s podatkom obavlja
ispravne operacije obzirom na upotrijebljeni prikaz

© Kovač, Basch, FER, Zagreb 29


Interpretiranje podataka
Primjer:

Što prikazuje 8-bitni podatak 10010101 ako ga promatramo kao:


• NBC
• prikaz s bitom za predznak
• 1'k
• 2'k
• pakirani BCD
• nepakirani BCD
• ASCII znak

© Kovač, Basch, FER, Zagreb 30


Interpretiranje podataka
Rješenje:
1001 0101

• NBC 1+4+16+128=149
• prikaz s bitom za predznak negativan, -(1+4+16) = -21
• 1'k negativan, -(01101010) = - (2+8+32+64) = -106

• 2'k negativan, -(01101010+1) = - (01101011) =


- (1+2+8+32+64) = -107
• pakirani BCD 95
• nepakirani BCD neispravan
• ASCII znak Nije čisti ASCII (8-bit nije ništica).
Ako je najviši bit npr. paritet, onda ostatak
od 7 bitova (0010101) predstavlja
kontrolni ASCII znak NAK.

© Kovač, Basch, FER, Zagreb 31


Prikaz podataka u praksi
• U praksi se koristi:
• NBC za prikaz pozitivnih cijelih brojeva (unsigned u C-u)

• 2'k za prikaz cijelih brojeva s predznakom (signed u C-u)

• Ova dva prikaza su pogodna sa sklopovsku implementaciju


aritmetičkih operacija, pri čemu se koristi isto sklopovlje za
podatke u oba prikaza

• Svaki procesor ima ugrađenu podršku za osnovne operacije s


ovim prikazima
• Neki procesori, ovisno o namjeni i cijeni, imaju podršku i
za brojeve u pomičnom zarezu

© Kovač, Basch, FER, Zagreb 32


1.3. Proširivanje podataka

© Kovač, Basch, FER, Zagreb 33


Proširivanje podatka
• Često imamo podatak određene širine u bitovima, a trebamo dobiti
podatak iste vrijednosti, ali veće širine

početni podatak

?
prošireni podatak

• Postoje dvije vrste proširivanja koji se koriste u praksi:


• Proširivanje ništicama (zero extension)
• Predznačno proširenje (sign extension) >>>>

© Kovač, Basch, FER, Zagreb 34


Proširivanje podatka ništicama
• Proširenje ništicama se radi ovako:
• početni podatak se kopira u niže bitove proširenog podatka
• preostali viši bitovi proširenog podatka se popune ništicama

početni podatak

0......0 početni podatak

prošireni podatak

© Kovač, Basch, FER, Zagreb 35


Proširivanje podatka ništicama
• Čemu služi proširivanje ništicama?

• Proširivanje ništicama služi za NBC brojeve, jer broj prije


i poslije proširivanja imaju istu vrijednost.

• Na primjer, pogledajmo proširenje sa 4 na 8 bitova:


• 4-bitni opseg za NBC je od 0 do 15, a 8-bitni opseg je od 0 do 255

• Broj 0101 ima iznos 510, a nakon proširenja dobivamo 00000101


što i dalje iznosi 510
• Broj 1110 ima iznos 1410, a nakon proširenja dobivamo 00001110
što je i dalje broj 1410

© Kovač, Basch, FER, Zagreb 36


Proširivanje podatka ništicama
Primjer:
Proširiti ništicama sljedeće 20-bitne brojeve na 32 bita širine:
• 00011000001010000110
• 10011000001110000000
Prvi broj:
00011000001010000110
00000000000000011000001010000110

Drugi broj:
10011000001110000000
00000000000010011000001110000000

© Kovač, Basch, FER, Zagreb 37


Predznačno proširivanje podatka
• Predznačno proširenje se izvodi ovako:
• početni podatak se kopira u niže bitove proširenog podatka
• preostali viši bitovi proširenog podatka se popune najvišim
bitom početnog podatka (najviši bit je na slici označen
slovom P - predznak)

početni podatak

P niži bitovi početnog podatka

P......P početni podatak

prošireni podatak

© Kovač, Basch, FER, Zagreb 38


Predznačno proširivanje podatka
• Čemu služi predznačno proširivanje?

• Predznačno proširivanje služi za 2'k brojeve, jer broj prije


i poslije proširivanja imaju istu vrijednost.

• Na primjer, pogledajmo proširenje sa 4 na 8 bitova:


• 4-bitni opseg za 2'k je od -8 do +7, a 8-bitni opseg je od -128 do +127

• Broj 0101 ima iznos +510, a nakon proširenja dobivamo 00000101 što i
dalje iznosi +510
• Broj 1110 ima iznos -210, a nakon proširenja dobivamo 11111110 što je
i dalje broj -210

• Da smo upotrijebili proširenje ništicama, dobili bi ispravan iznos za +5,


jer je on pozitivan i ima ništicu u najvišem bitu, ali za broj -2 bi dobili
pogrešan broj koji bi imao pozitivan predznak

© Kovač, Basch, FER, Zagreb 39


Predznačno proširivanje podatka
Primjer:
Predznačno proširiti sljedeće 20-bitne brojeve na 32 bita širine:
• 00011000001010000110
• 10011000001110000000
Prvi broj:
0 0011000001010000110
0000000000000 0011000001010000110

Drugi broj:
1 0011000001110000000
1111111111111 0011000001110000000

© Kovač, Basch, FER, Zagreb 40


Proširivanje podatka - Rekapitulacija

• Proširenje ništicama čuva iznos NBC brojeva,


(ali ne čuva iznos 2'k brojeva, osim pozitivnih)

• Predznačno proširenje čuva iznos 2'k brojeva,


(ali ne čuva iznos NBC brojeva, osim donje polovice opsega)

© Kovač, Basch, FER, Zagreb 41


1.4. Osnovne operacije s podatcima u računalu

© Kovač, Basch, FER, Zagreb 42


1.4.1. Zbrajanje i oduzimanje

© Kovač, Basch, FER, Zagreb 43


Zbrajalo
• Za zbrajanje cijelih brojeva, u praksi se koriste zbrajala. Podsjetimo se (iz "Digitalne") građe 4-bitnog
zbrajala:

A3 B3 A2 B2 A1 B1 A0 B0

A B A B A B A B
C4 C3 C2 C1 C0
Cout FA Cin Cout FA Cin Cout FA Cin Cout FA Cin
S S S S

S3 S2 S1 S0

• 4-bitni operandi se dovode na ulaze A i B, a 4-bitni rezultat se


dobiva na izlazima S.
• Sa C (carry) su označeni prijenosi između pojedinih potpunih
zbrajala (FA, full-adder). Na C0 dovodi se 0.

© Kovač, Basch, FER, Zagreb 44


Zbrajalo
• Zbrajala čine osnovu aritmetičko-logičkih jedinica (engl. ALU,
arithmetic logic unit)

• Ovakvo zbrajalo je vrlo pogodno za upotrebu:


• jer radi s brojevima u prikazu NBC i u prikazu 2'k
• jer uz vrlo male modifikacije može izvesti operaciju oduzimanja

• Oduzimanje bi se moglo izvoditi zasebnim sklopom (oduzimalom),


ali ne bi bilo efikasno imati još jedan sklop u ALU

• Zato se oduzimanje A-B izvodi tako da se zbroji prvi operand s


dvojnim komplementom drugog operanda:

A-B = A+(-B) = A+(B+1)

© Kovač, Basch, FER, Zagreb 45


duzimanje pomoću zbrajala

• Da bi dobili oduzimanje po formuli A+B+1, treba ispred ulaza B1 do


B4 staviti dodatne NE sklopove, a na ulaz C0 dovedemo 1

B3 B2 B1 B0

A3 A2 A1 A0

A B A B A B A B
C4 C3 C2 C1 C0
Cout FA Cin Cout FA Cin Cout FA Cin Cout FA Cin 1
S S S S

S3 S2 S1 S0

© Kovač, Basch, FER, Zagreb 46


Zbrajalo - modulo aritmetika
• Aritmetika implementirana zbrajalom ograničena je na određen
broj bitova i nema svojstva na koja smo navikli u stvarnom životu

• Radi se o tzv. modulo-aritmetici u kojoj se dobiva rezultat koji je


uvijek ograničen širinom zbrajala, tj. operacijom modulo (ostatak)

• Za N-bitno zbrajalo dobiva se modulo 2 N aritmetika (npr. za 4 bita,


dobiva se modulo 16 aritmetika)

• Rezultat se izračunava tako da prvo zbrojimo brojeve, a onda


napravimo operaciju modulo (označavamo je znakom %)

• Na primjer, za 4 bita: 9+13=22, rezultat će biti 22%16=6

© Kovač, Basch, FER, Zagreb 47


Zbrajalo - brojevna kružnica
• Ovakvu artimetiku ne možemo prikazati brojevnim pravcem, nego
brojevnom kružnicom:
0
15 1
14 2
5+3=8
8%16=8 13 3

12 4

9+13=22 11 5

22%16=6
10 6
9 7
© Kovač, Basch, FER, Zagreb
8 48
1.4.2. Zastavice

© Kovač, Basch, FER, Zagreb 49


Što su zastavice
• Što su zastavice?

• Zastavice su bistabili u kojima se ogleda stanje aritmetičko-


logičke jedinice nakon operacije

• Čemu služe zastavice?

• Zastavice mogu služiti za:


• otkrivanje grešaka u aritmetičko-logičkoj operaciji
• uspoređivanje brojeva (koji je veći ili manji i sl.)
• ispitivanje različitih uvjeta

© Kovač, Basch, FER, Zagreb 50


Definicija zastavica
• Zastavice se definiraju i implementiraju na sljedeći način:
prijenos
XOR preljev

A3 B3 A2 B2 A1 B1 A0 B0

A B A B A B A B
C4 C3 C2 C1 C0
Cout FA Cin Cout FA Cin Cout FA Cin Cout FA Cin
S S S S

S3 S2 S1 S0

predznak NOR
ništica

© Kovač, Basch, FER, Zagreb 51


Definicija zastavice
• Drugim riječima, zastavice su (za n-bitno zbrajalo):

prijenos (carry) c = Cn
preljev (overflow) ov = Cn xor Cn-1
predznak (sign, negative) s = Sn-1
ništica (zero) z = not (S0 or S1 or ... or Sn-1)

• Još se često koristi i zastavica posudbe:

posudba (borrow) b = not c = not Cn

• Ovo su općenite definicije!!! Svaki procesor može


imati drugačije zastavice!!!

© Kovač, Basch, FER, Zagreb 52


Zastavice - Primjer
• Za 5-bitno računalo odrediti stanje zastavica nakon operacije:
10110 + 01101
zastavica preljeva je 1 xor 1
ov = 0
zastavica prijenosa je
prijenos s najvišeg mjesta 11010
c=1
11010
(posudba je obratna, b=0)
+ 01011 pojedini prijenosi

00101 zastavica ništice označava da


rezultat NIJE jednak ništici
zastavica predznaka je najviši bit rezultata z=0
s=0

© Kovač, Basch, FER, Zagreb 53


Zastavice - Primjer
• Za 5-bitno računalo odrediti stanje zastavica nakon operacije:
11100 - 00101 (pozor: oduzimanje se radi na zbrajalu)
zastavica preljeva je 1 xor 1
ov = 0
zastavica prijenosa je
prijenos s najvišeg mjesta 11000
c=1
11100 pojedini prijenosi
(posudba je obratna, b=0)
11010
+ 1 zastavica ništice označava da
zastavica predznaka je rezultat NIJE jednak ništici
najviši bit rezultata 10111
z=0
s=1

© Kovač, Basch, FER, Zagreb 54


Greške kod aritmetičkih operacija i zastavice

© Kovač, Basch, FER, Zagreb 55


Greške kod aritmetičkih operacija i zastavice
• ALU jedinica radi s ograničenim brojem bitova

• Zato prilikom zbrajanja i oduzimanja rezultat može izaći iz opsega


brojeva prikazivih u raspoloživom broju bitova

• Ovo predstavlja GREŠKU koja se može otkriti na temelju


stanja zastavica

• Vidjet ćemo da se greške otkrivaju različito, ovisno promatramo li


operande kao NBC ili 2'k brojeve

• Pokažimo kako se otkrivaju greške (bez ulaženja u matematiku i


dokaze).

© Kovač, Basch, FER, Zagreb 56


Greške
• Ovisno o vrsti operacije ( + ili –, tj. zbrajanje ili oduzimanje) i
vrsti podataka (NBC ili 2'k), greška se prepoznaje na sljedeći
način:
Operacija

+ –
NBC prijenos = 1 prijenos = 0
Zapis
podataka preljev = 1 preljev = 1
2'k

Npr.: zbrajanje NBC brojeva prepoznaje se kad je prijenos=1

OPREZ: svaki procesor ima drugačije definirane zastavice


© Kovač, Basch, FER, Zagreb 57
Greške - Zbrajanje NBC brojeva i
• Sve ćemo promatrati na širini od 4 bita kako bi skratili pisanje.
Opseg 4-bitnih NBC brojeva je od 0 do 15 (od 0 do 2 n-1)

• Prilikom zbrajanja jedina greška koja može nastati je da rezultat


bude veći od gornje granice opsega (15 za 4 bita)

• Ova greška ne bi nastala da imamo na raspolaganju 5 bita, a


budući da prijenos C4 možemo promatrati kao proširenje rezultata
na peti bit, onda ćemo grešku moći prepoznati pojavom prijenosa

• Dakle, grešku kod zbrajanja NBC brojeva možemo prepoznati


pojavom prijenosa

© Kovač, Basch, FER, Zagreb 58


Greške - Zbrajanje NBC brojeva i
Primjer:

0111 1001
5 0101 9 1001
+ 3 + 0011 + 13 + 1101
8 1000 22 0110

OK GREŠKA

Greška <=> prijenos=1 >>>>

© Kovač, Basch, FER, Zagreb 59


Greške - Zbrajanje NBC brojeva i
0
Ilustrirajmo 5+3 15 1
na brojevnoj 14 2
kružnici
13 3
5+3=8
Operacija u kojoj
8 % 16 = 8 12 nema greške 4

5
11

10 6
9 7
8
© Kovač, Basch, FER, Zagreb 60
Greške - Zbrajanje NBC brojeva i
0
Ilustrirajmo 9+13 15 1
na brojevnoj 14 2
kružnici
13 3
9+13=22
"Prelazak" preko
22 % 16 = 6 ishodišta je greška 4
12

5
11

10 6
9 7
8
© Kovač, Basch, FER, Zagreb 61
Greške - Oduzimanje NBC brojeva i
• Prilikom oduzimanja jedina greška koja može nastati je da rezultat
bude manji od donje granice opsega 0, tj. da rezultat bude
negativan
• Kad oduzimamo "na papiru", onda sortiramo brojeve po veličini, a
rezultatu promijenimo predznak. Mogli bi ih ostaviti u početnom
rasporedu, a u slučaju pojave posudbe napravimo operaciju desetog
komplementa (analogno dvojnom komplementu) te promijenimo
predznak (npr. 2-5="7 i jedan dalje", deseti komplement od 7 je 3,
promijenimo predznak od 3 i dobivamo rezultat -3)

• Dakle, grešku kod oduzimanja NBC brojeva možemo prepoznati


pojavom posudbe, tj. odsustvom prijenosa (koji je komplement
posudbe)

© Kovač, Basch, FER, Zagreb 62


Greške - Oduzimanje NBC brojeva i
Primjer:

posudbe prijenosi posudbe prijenosi

0010 1101 1000 0111


5 0101 0101 6 0110 0110
- 3 - 0011 1100 - 10 - 1010 0101
2 0010 + 1 -4 1100 + 1
0010 1100

OK GREŠKA

Greška <=> prijenos=0 >>>>


ili
Greška <=> posudba=1

© Kovač, Basch, FER, Zagreb 63


Greške - Oduzimanje NBC brojeva i
Ilustrirajmo 5-3
0
na brojevnoj 15 1
kružnici
14 2
Kad bi se koristilo
oduzimalo:
13 "Neprelazak" oduzimala 3
5-3=2 preko ishodišta znači da
nema greške
Sklopovski se izvodi
na zbrajalu 12 4
pomoću operacije "Prelazak" zbrajala
dvojnog preko ishodišta znači
komplementa: da nema greške 5
11
5-3 =
10 6
5+12+1=18
9 7
18 % 16 = 2 8
© Kovač, Basch, FER, Zagreb 64
Greške - Oduzimanje NBC brojeva i
Ilustrirajmo 6-10 0
na brojevnoj 15 1
kružnici 14 2

Kad bi se koristilo 13 "Prelazak" 3


oduzimalo: oduzimala preko
ishodišta je greška
6-10=-4
12 4
Sklopovski se izvodi "Neprelazak"
na zbrajalu zbrajala preko
pomoću operacije ishodišta je greška 5
dvojnog 11
komplementa:
10 6
6-10=
9 7
6+5+1=12 8
© Kovač, Basch, FER, Zagreb 65
Greške - Zbrajanje 2'k brojeva i
• Opseg 4-bitnih 2'k brojeva je od -8 do +7 (od -2 n-1 do +2n-1-1)

• Prilikom zbrajanja 2'k brojeva greška može nastati ako je rezultat


manji od donje granice opsega ili veći od gornje

• Za razliku od operacija na NBC brojevima, kod kojih se može


prekoračiti samo jedna granica opsega, kod 2'k brojeva moguće je
prekoračiti obje granice opsega (zato što pribrojnici mogu imati
bilo kakav predznak)

• Kako otkriti grešku? Pomoću prijenosa?

© Kovač, Basch, FER, Zagreb 66


Greške - Zbrajanje 2'k brojeva i
0001 1111
(-7) 1001 (+7) 0111 pozitivan i
negativan
+ (+5) + 0101 + (-5) + 1011
(-2) 1110 (+2) 0010

0011 0100 dva


(+1) 0001 (+5) 0101 pozitivna
+ (+3) + 0011 + (+4) + 0100
(+4) 0100 (+9) 1001

1100 1000 dva


(-2) 1110 (-7) 1001 negativna
+ (-3) + 1101 + (-2) + 1110
(-5) 1011 (-9) 0111
• Pogledajmo primjere zbrajanja brojeva različitih predznaka i
veličina >>>>
© Kovač, Basch, FER, Zagreb 67
Greške - Zbrajanje 2'k brojeva i
0001 1111
(-7) 1001 (+7) 0111
+ (+5) + 0101 + (-5) + 1011
(-2) 1110 OK (+2) 0010 OK

0011 0100
(+1) 0001 (+5) 0101
+ (+3) + 0011 + (+4) + 0100
(+4) 0100 OK (+9) 1001 GREŠKA

1100 1000
(-2) 1110 (-7) 1001
+ (-3) + 1101 + (-2) + 1110
(-5) 1011 OK (-9) 0111 GREŠKA

• Što vidimo iz ovih primjera?

© Kovač, Basch, FER, Zagreb 68


Greške - Zbrajanje 2'k brojeva i
0001 1111
(-7) 1001 (+7) 0111
+ (+5) + 0101 + (-5) + 1011
(-2) 1110 OK (+2) 0010 OK

0011 0100
(+1) 0001 (+5) 0101
+ (+3) + 0011 + (+4) + 0100
(+4) 0100 OK (+9) 1001 GREŠKA

1100 1000
(-2) 1110 (-7) 1001
+ (-3) + 1101 + (-2) + 1110
(-5) 1011 OK (-9) 0111 GREŠKA

1. Pomoću prijenosa ne možemo prepoznati grešku

© Kovač, Basch, FER, Zagreb 69


Greške - Zbrajanje 2'k brojeva i
0001 1111
(-7) 1001 (+7) 0111
+ (+5) + 0101 + (-5) + 1011
(-2) 1110 OK (+2) 0010 OK

0011 0100
(+1) 0001 (+5) 0101
+ (+3) + 0011 + (+4) + 0100
(+4) 0100 OK (+9) 1001 GREŠKA

1100 1000
(-2) 1110 (-7) 1001
+ (-3) + 1101 + (-2) + 1110
(-5) 1011 OK (-9) 0111 GREŠKA

2. Zbrajanje dva broja različitog predznaka uvijek daje dobar


rezultat
© Kovač, Basch, FER, Zagreb 70
Greške - Zbrajanje 2'k brojeva i
0001 1111
(-7) 1001 (+7) 0111
+ (+5) + 0101 + (-5) + 1011
(-2) 1110 OK (+2) 0010 OK

0011 0100
(+1) 0001 (+5) 0101
+ (+3) + 0011 + (+4) + 0100
(+4) 0100 OK (+9) 1001 GREŠKA

1100 1000
(-2) 1110 (-7) 1001
+ (-3) + 1101 + (-2) + 1110
(-5) 1011 OK (-9) 0111 GREŠKA

3. Zbrajanje dva broja istog predznaka može dati grešku

© Kovač, Basch, FER, Zagreb 71


Greške - Zbrajanje 2'k brojeva i
0001 1111
(-7) 1001 (+7) 0111
+ (+5) + 0101 + (-5) + 1011
(-2) 1110 OK (+2) 0010 OK

0011 0100
(+1) 0001 (+5) 0101
+ (+3) + 0011 + (+4) + 0100
(+4) 0100 OK (+9) 1001 GREŠKA

1100 1000
(-2) 1110 (-7) 1001
+ (-3) + 1101 + (-2) + 1110
(-5) 1011 OK (-9) 0111 GREŠKA

4. Grešku raspoznajemo po tome što je rezultat


suprotnog predznaka od pribrojnika
© Kovač, Basch, FER, Zagreb 72
Greške - Zbrajanje 2'k brojeva i
0001 1111
(-7) 1001 (+7) 0111
+ (+5) + 0101 + (-5) + 1011
(-2) 1110 OK (+2) 0010 OK

0011 0100
(+1) 0001 (+5) 0101
+ (+3) + 0011 + (+4) + 0100
(+4) 0100 OK (+9) 1001 GREŠKA

1100 1000
(-2) 1110 (-7) 1001
+ (-3) + 1101 + (-2) + 1110
(-5) 1011 OK (-9) 0111 GREŠKA

• Kako pomoću zastavica raspoznati da su pribrojnici imali


jednake predznake, a da je rezultat poprimio predznak
različit od njih? >>>>
© Kovač, Basch, FER, Zagreb 73
Greške - Zbrajanje 2'k brojeva i
<<<<
• Promotrimo sve moguće kombinacije zbrajanja najviših bitova (tj. bitova predznaka) kojima se pribraja C 3 i promatrajmo C3 i C4.

00 11 Zbrajanje dvaju
0... 0... brojeva različitih
+ 1... + 1... predznaka
1... 0...
00 01
0... 0... Zbrajanje dvaju
+ 0... + 0... pozitivnih brojeva
0... 1... GREŠKA
11 10
1... 1... Zbrajanje dvaju
+ 1... + 1... negativnih brojeva
1... 0... GREŠKA

© Kovač, Basch, FER, Zagreb 74


Greške - Zbrajanje 2'k brojeva i
<<<<
• Promotrimo sve moguće kombinacije zbrajanja najviših bitova (tj. bitova predznaka) kojima se pribraja C 3 i promatrajmo C3 i C4.

00 11
0... 0...
+ 1... + 1...
1... 0...
00 01
0... 0...
+ 0... + 0...
0... 1... GREŠKA Grešku
prepoznajemo kad su
11 10 C3 i C4 različiti
1... 1...
+ 1... + 1...
1... 0... GREŠKA

© Kovač, Basch, FER, Zagreb 75


Greške - Zbrajanje 2'k brojeva i
• Kako ustanoviti da su zadnji i predznadnji prijenos različiti?

• Jednostavno: to već radi zastavica preljeva? Cn Cn-1 ov

• Podsjetnik: ov = Cn xor Cn-1 0 0 0


0 1 1
1 0 1
• Operacija XOR uspoređuje dva bita 1 1 0

• Dakle, grešku kod zbrajanja 2'k brojeva možemo prepoznati


pojavom preljeva (overflow)

© Kovač, Basch, FER, Zagreb 76


Greške - Oduzimanje 2'k brojeva i
• Prilikom oduzimanja 2'k brojeva greška nastaje na isti način kao i
kod zbrajanja

• Razlog je taj što se oduzimanje dvaju 2'k brojeva X-Y može svesti
na zbrajanje X+(-Y)

• Može se provesti razmatranje i za operaciju oduzimanja i dobiva


se isti rezultat kao i za zbrajanje:

• Grešku kod oduzimanja 2'k brojeva možemo prepoznati pojavom


preljeva

© Kovač, Basch, FER, Zagreb 77


Usporedba brojeva i zastavice

© Kovač, Basch, FER, Zagreb 78


Usporedba
• Potrebni uvjeti za usporedbu su:
• = ≠
za NBC-brojeve i 2'k brojeve
• < > ≤ ≥

• Brojevi se uspoređuju ovako:


• brojevi se najprije oduzmu
• zatim se ispitaju zastavice

• Na koji se način ispituju zastavice?

• Jednakost/različitost dva broja ispituje se jednako i za NBC i


za 2'k brojeve, a ostali uvjeti se razlikuju za NBC i 2'k

© Kovač, Basch, FER, Zagreb 79


Usporedba - Ispitivanje jednakosti (NBC i 2'k)
• Označimo sa X i Y dva broja koja uspoređujemo (NBC ili 2'k)

• Oduzimanjem ova dva broja dobivamo rezultat X-Y za koji


vrijedi:
• X=Y onda i samo onda kad je rezultat X-Y jednak ništici
• X≠Y onda i samo onda kad je rezultat X-Y različit od ništice

• Dakle, jednakost (različitost) brojeva ispitujemo zastavicom z:


• X=Y <=> z=1
• X≠Y <=> z=0

© Kovač, Basch, FER, Zagreb 80


Usporedba
• Uspoređivanje NBC brojeva ispitivanjem zastavica:
• X>Y <=> c=1 and z=0
• X≤Y <=> c=0 or z=1
• X≥Y <=> c=1
• X<Y <=> c=0

• Uspoređivanje 2'k brojeva ispitivanjem zastavica:


• X≥Y <=> (s xor ov)=0
• X<Y <=> (s xor ov)=1
• X>Y <=> (s xor ov)=0 and z=0
• X≤Y <=> (s xor ov)=1 or z=1

© Kovač, Basch, FER, Zagreb 81


Usporedba - NBC brojevi i
• Označimo sa X i Y dva NBC broja koja uspoređujemo

• Oduzimanjem ova dva broja dobivamo rezultat X-Y za koji


vrijedi:
• (X-Y≥0, tj. X≥Y) onda i samo onda kad je rezultat ispravan (tj.
unutar opsega NBC brojeva)
• (X-Y<0, tj. X<Y) onda i samo onda kad je rezultat neispravan
(tj. izvan opsega NBC brojeva)

• Ova dva slučaja možemo razlikovati ako ispitamo zastavicu c


(podsjetnik: c je prijenos, a grešku signalizira prijenos=0):
• X≥Y <=> c=1
• X<Y <=> c=0

© Kovač, Basch, FER, Zagreb 82


Usporedba - NBC brojevi i
• Ispitivanjem zastavice c znamo razlikovati samo dva slučaja:
• X≥Y <=> c=1
• X<Y <=> c=0

• Još trebamo razlikovati slučajeve X>Y i X≤Y, što je jednostavno


ako gornje uvjete proširimo ispitivanjem jednakosti brojeva:
• X>Y je ekvivalentno uvjetu: X≥Y and X≠Y
• X≤Y je ekvivalentno uvjetu: X<Y or X=Y

• Sva četiri uvjeta izražena pomoću ispitivanja zastavica:


• X>Y <=> c=1 and z=0
• X≤Y <=> c=0 or z=1
• X≥Y <=> c=1
• X<Y <=> c=0

© Kovač, Basch, FER, Zagreb 83


Usporedba - 2'k brojevi i
• Razmotrimo kako se ispituju zastavice za 2'k brojeve.

• Za razliku od NBC brojeva, sada kod oduzimanja neće biti


greška ako dobijemo negativan broj, jer 2'k brojevi mogu biti i
pozitivni i negativni

• Ali, zato možemo ispitati predznak rezultata i na temelju toga


zaključiti je li veći X ili Y

© Kovač, Basch, FER, Zagreb 84


Usporedba - 2'k brojevi i
• Označimo sa X i Y dva 2'k broja koja uspoređujemo

• Oduzimanjem ova dva broja dobivamo rezultat X-Y za koji vrijedi


(ali samo uz pretpostavku da nije došlo do prekoračenja opsega):
• (X-Y≥0, tj. X≥Y) onda i samo onda kad je predznak rezultata
pozitivan
• (X-Y<0, tj. X<Y) onda i samo onda kad je predznak rezultata
negativan

• Dakle, ova dva slučaja možemo ispitati zastavicom s


(podsjetnik: s je predznak rezultata):
• X≥Y <=> s=0
• X<Y <=> s=1

© Kovač, Basch, FER, Zagreb 85


Usporedba - 2'k brojevi i
• Ispitivanjem zastavice s znamo razlikovati samo dva slučaja:
• X≥Y <=> s=0
• X<Y <=> s=1

• Još trebamo razlikovati slučajeve X>Y i X≤Y što je jednostavno


ako gornje uvjete proširimo ispitivanjem jednakosti brojeva:
• X>Y je ekvivalentno uvjetu: X≥Y and X≠Y
• X≤Y je ekvivalentno uvjetu: X<Y or X=Y

• Ili izraženo preko ispitivanja zastavica:


• X>Y <=> s=0 and z=0
• X≤Y <=> s=1 or z=1

© Kovač, Basch, FER, Zagreb 86


Usporedba - 2'k brojevi i
• Nažalost, stvarni uvjeti su kompliciraniji, jer smo prethodne uvjete
izveli uz pretpostavku da nema greške prekoračenja opsega u
operaciji oduzimanja

• Prisjetimo se da se greška signalizira zastavicom ov u jedinici i da


ona znači da je predznak rezultata neispravan (tj. ispravan
predznak je komplement dobivenog predznaka rezultata)

• Najjednostavnije rješenje je ispitivati korigiranu zastavicu s

• Zastavica s se jednostavno korigira operacijom s xor ov:


• Ako nema greške: vrijedi ov=0, pa vrijedi s xor ov = S
• Ako ima greške: vrijedi ov=1, pa vrijedi s xor ov = not(S)

© Kovač, Basch, FER, Zagreb 87


Usporedba - 2'k brojevi i
• Konačno, 2'k brojevi uspoređuju se sljedećim ispitivanjem
zastavica:

• X≥Y <=> (s xor ov)=0


• X<Y <=> (s xor ov)=1
• X>Y <=> (s xor ov)=0 and z=0
• X≤Y <=> (s xor ov)=1 or z=1

© Kovač, Basch, FER, Zagreb 88


1.4.3. Operacije pomaka i rotacije

© Kovač, Basch, FER, Zagreb 89


Pomaci i rotacije
• Operacije pomaka (shift) i rotacije (rotate ili rotate circular) pomiču bitove nekog podatka unutar registra u lijevo ili u
desno

• Npr. podatak se pomiče u lijevo:

0 0 0 1 0 0 1 0 1 1 0 0

© Kovač, Basch, FER, Zagreb 90


Pomaci i rotacije
• Moguć je pomak (ili rotacija) za jedan ili više bitova

• Pomak za više bitova...

0 0 0 1 0 0 1 0 1 1 0 0

... može se izvesti kao niz jednobitnih pomaka ...

0 0 0 1 0 0 1 0 1 1 0 0

... i zato promotrimo detaljnije samo


jednobitne pomake i rotacije ...

© Kovač, Basch, FER, Zagreb 91


Pomaci i rotacije
• Kod svakog pomaka postoji izlazni bit koji se može
zanemariti, spremiti u neku zastavicu itd.:

0 0 0 1 0 0 1 0 1 1 0 0

• Obično se izlazni bit sprema u zastavicu u koju se inače


sprema prijenos
• Neki procesori imaju zasebnu zastavicu koja služi samo za
spremanje izlaznog bita

• U oba slučaja ta zastavica efektivno predstavlja proširenje


registra za jedan bit

© Kovač, Basch, FER, Zagreb 92


Pomaci i rotacije
• Kod svakog pomaka postoji ulazni bit kojemu se mora
definirati točna vrijednost:

0 0 0 1 0 0 1 0 1 1 0 0
?

• Ovisno o definiranoj vrijednosti ulaznog bita, dobivaju se


različite operacije pomaka i rotacije, a operacije su .........

© Kovač, Basch, FER, Zagreb 93


Logički pomak u lijevo
• Logički pomak u lijevo (logical shift left) dobiva se kad se
kao ulazni bit dovede ništica:

0 0 0 1 0 0 1 0 1 1 0 0 0

• Riječ logički označava da operacija radi s brojevima u NBC-u,


a riječ aritmetički označava da radi s brojevima u formatu 2'k

• Logički pomak ulijevo odgovara množenju s 2 za NBC brojeve


• Pomak za N bitova ulijevo odgovara množenju s 2N
• Ova operacija funkcionira i za 2'k brojeve pa bi se mogla nazvati
i aritmetički pomak, ali je naziv logički pomak uobičajen

© Kovač, Basch, FER, Zagreb 94


Logički pomak u desno
• Logički pomak u desno (logical shift right) dobiva se kad se
kao ulazni bit dovede ništica:

0 0 0 0 1 0 0 1 0 1 1 0 0

• Logički pomak udesno odgovara dijeljenju s 2 za NBC brojeve


• Pomak za N bitova udesno odgovara dijeljenju s 2N

• Logički pomak udesno ne može se primjeniti za dijeljenje


brojeva u formatu 2'k, zato što sigurno mijenja predznak
negativnih brojeva (i samim tim daje pogrešan rezultat)

© Kovač, Basch, FER, Zagreb 95


Aritmetički pomak u desno
• Aritmetički pomak u desno (arithmetic shift right) dobiva se
kad se kao ulazni bit dovede prethodna vrijednost najvišeg bita:

0 0 0 1 0 0 1 0 1 1 0 0

• Aritmetički pomak udesno odgovara dijeljenju s 2 za 2'k brojeve


• Pomak za N bitova udesno odgovara dijeljenju s 2N

• Budući da čuva vrijednost najvišeg bita (tj. čuva predznak


broja), dijeljenje radi ispravno za 2'k brojeve

© Kovač, Basch, FER, Zagreb 96


Rotacije
• Ako se kao ulazni bit uzme vrijednost izlaznog bita, dobivaju se
rotacije (ulijevo ili udesno).

1 0 0 1 0 0 1 0 1 1 0 0

• Kod rotacija kroz zastavicu, kao ulazni bit uzme se stara


vrijednost zastavice, a izlazni bit postaje novo stanje zastavice:

1 0 0 1 0 0 1 0 1 1 0 0

© Kovač, Basch, FER, Zagreb 97


Primjeri
• Ako 8-bitni broj 0000 1111 logički pomaknemo u lijevo, dobijemo
rezultat: 0001 1110

• Ako 6-bitni broj 010 111 logički pomaknemo u desno, dobijemo


rezultat: 001 011

• Ako 8-bitni broj 1000 1111 aritmetički pomaknemo u desno,


dobijemo rezultat: 1100 0111

• Ako 8-bitni broj 1000 1111 rotiramo u lijevo, dobijemo rezultat: 0001
1111

• Ako 8-bitni broj 1000 1111 rotiramo kroz zastavicu c u lijevo, uz


pretpostavku da je prethodno stanje zastavice bilo c=0, dobijemo
rezultat: 0001 1110 i c=1

© Kovač, Basch, FER, Zagreb 98


1.4.4. Logičke operacije

© Kovač, Basch, FER, Zagreb 99


Logičke operacije - Podsjetnik
• Logičke operacije rade na bitovima pri čemu se bit 0 tretira kao
FALSE, a bit 1 kao TRUE

• Logičke operacije su:


• NOT (NE) unarna operacija
• AND (I)
• OR (ILI)
• XOR (EX-ILI)
binarne operacije
• NAND (NI)
• NOR (NILI)
• NXOR (EX-NILI)

© Kovač, Basch, FER, Zagreb 100


Logičke operacije - Primjer - Podsjetnik
• Izračunajte logičke operacije ILI, EX-ILI, NI i EX_NILI za podatke
0011 i 0101

0011 0011
ILI 0101 EX-ILI 0101
0111 0110

0011 0011
NI 0101 EX-NILI 0101
1110 1001

© Kovač, Basch, FER, Zagreb 101

You might also like