Programska organizacija računara
UNIVERZITET U SARAJEVU
Elektrotehnički fakultet Sarajevo
Odsjek za računarstvo i informatiku
PROGRAMSKA ORGANIZACIJA RAČUNARA
Sarajevo, maj 2001. mr. Idriz Fazlić
Sadržaj:
Uvod .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 1
1. Predstavljanje podataka. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 4
1.1 Brojni sistemi. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 4
1.1.1 Konverzije između brojnih sistema. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 5
1.1.2 Heksadecimalni i oktalni sistemi.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 6
1.1.4 Formati brojnih sistema.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 8
1.2 Organizacija podataka. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 9
1.2.1 Biti. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 9
1.2.2 Nibli. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 10
1.2.3 Bajti.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 10
1.2.4 Riječi.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 10
1.2.5 Duple riječi.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 11
1.3 Osnovne operacije .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 10
1.3.1 Logičke operacije .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 12
1.3.2 Operacije nad bitima.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 13
1.4 Predstavljanje negativnih brojeva. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 14
1.4.1 Predznak i vrijednost .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 14
1.4.2 Komplement jedan .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 15
1.4.3 Komplement dva .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 15
1.5 Pomjeranje i rotiranje bita. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 17
1.6 Realni brojevi.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 18
2. Osnovni elementi računarskih arhitektura. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 19
2.1 Bazne komponente sistema.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 19
2.1.1 Sistemska sabirnica.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 20
2.1.1.1 Podatkovna sabirnica.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 20
2.1.1.2 Adresna sabirnica.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 20
2.1.1.3 Kontrolna sabirnica.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 21
2.1.1.4 U/I sabirnica. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 21
2.1.2 Memorijski podsistem. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 21
2.2 Sistemsko vrijeme.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 23
2.2.1 Sistemski sahat .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 23
2.2.2 Pristup memoriji i sistemski sahat: .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 24
2.2.3 Stanja čekanja.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 25
2.2.4 Keš memorija.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 25
2.3 U/I (Ulaz/Izlaz).. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 26
3 Instrukcije naspram podataka.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 29
3.1 Instrukcije.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 29
3.1.1 Formati aritmetičkih izraza.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 30
3.1.2 Veličine instrukcija.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 31
3.1.3 Tipovi adresnih mašina.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 32
3.1.3.1 Troadresne mašine .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 32
3.1.3.2 Dvoadresne mašine.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 32
3.1.3.3 Jednoadresne mašine .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 32
3.1.3.4 Nuladresne mašine .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 33

6.4.4 Deklarisanje varijabli realnih brojeva REAL4, REAL8 i REAL10.. .. .. .. .. 72
6.5 Deklarisanje konstanti u asemblerskome programu .. .. .. .. .. .. .. .. .. .. .. .. 74
6.6 Kreiranje sopstvenih tipova direktivom TYPEDEF.. .. .. .. .. .. .. .. .. .. .. .. 74
6.7 Pokazivački tipovi podataka.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 74
6.8 Složeni tipovi podataka. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 77
6.8.1 Nizovi. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 77
6.8.1.1 Deklarisanje jednodimenzionalnog niza .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 78
6.8.1.2 Pristup elementima u jednodimenzionalnome nizu. .. .. .. .. .. .. .. .. .. .. .. .. 79
6.8.2 Višedimenzionalni nizovi. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 80
6.8.2.1 Preslikavanje po redovima.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 81
6.8.2.2 Preslikavanje po kolonama. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 84
6.8.2.3 Određivanje prostora za višedimenzionalne nizove .. .. .. .. .. .. .. .. .. .. .. .. 84
6.8.2.4 Pristup elementima višedimenzionalnih nizova .. .. .. .. .. .. .. .. .. .. .. .. .. .. 85
6.9 Kontrolne strukture. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 86
6.9.1 Kontrolne strukture grananja. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 86
6.9.1.1 Uslovno grananje. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 87
6.9.1.2 Bezuslovno grananje. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 87
6.9.1.3 Emuliranje uslovnih iskaza jezika visokog nivoa .. .. .. .. .. .. .. .. .. .. .. .. .. 88
6.9.2 Procedure i interapti.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 89
6.9.2.1 Procedure.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 89
6.9.2.2 Interapti. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 91
6.9.2.2.1 Interaptna tabela vekotra.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 93
6.9.2.2.2 Interaptna uslužna rutina.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 93
6.9.2.2.3 Prekidi toka izvršenja programa.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 94
7 Programsko okruženje .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 96
7.1 Konstrukcije asemblera.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 96
7.1.1 Dvoprolazni asembler .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 97
7.1.2 Jednoprolazni asembler .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 98
7.1.3 Izlaz iz asemblera – objektni kod.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 100
7.2 Povezivanje modula programa - linkeri. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 102
7.3 Punjenje programa u memoriju - loaderi.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 104
7.3.1 Loaderi ‘kompajliraj-i-kreni’. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 105
7.3.2 Opšta šema loadera.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 105
7.3.3 Relocirajući loaderi. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 106
Dodatak A: Kodiranje informacija. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 107
A1: Kodiranje informacija kroz historiju. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 107
A2: ASCII tabela.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 110
Dodatak B: Instrukcijski skup - procesor 8088.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 113
Dodatak C: Slika operativnog sistema i programa u memoriji .. .. .. .. .. .. .. .. .. .. 165
C1: Zauzeće memorije po iniciranju operativnog sistema MS-DOS. .. .. .. 165
C2: Format izvršnog modula (.EXE). .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 166
C3: Izgled koda programa sa slike 64. U memoriji po sekcijama.. .. .. .. .. 167
Dodatak D: Interapti arhitekture 8088 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 169
D1: Interni hardverski interapti. .. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. .. .. .. .. .. .. 169
D2: Eksterni hardverski interapti. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. .. .. .. .. .. .. 169
D3: Softverski interapti .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. .. .. .. .. .. .. 170
Literatura .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 173
Predgovor
Zahtjevi za pojavu ovog materijale leže u nedostatku materijala na fakultetima u BiH koji se
bave ovom problematikom. Kako je razvoj računarske tehnologije enormno brz, a time se i
arhitekture računara mijenjaju, to se poslije rata ukazala potreba za udžbenikom koji pokriva
ovu materiju na bosanskome jeziku (i/ili ostalim srodnim jezicima ex-Yu). Kako studenti na
našim fakultetima slušaju nastavu na našem jeziku, to se ne može od njih zahtjevati da materiju
vezanu za arhitekturu računara traže na Internetu na engleskome jeziku. To su glavni razlozi što
sam se prihvatio ovog posla.
Kako su arhitekture računara vezane za konkretnu mašinu, to je cilj ovoga materijala nije da
predstavi ni jednu partikularnu arhitekturu, već
principe
na kojima se baziraju arhitektura
računara. Da bi se cilj što uspješnije ostvario, koristile su se apstrakne arhitekture hipotetičke
mašine, na kojoj su prikazani opšti principi rada. Razumijevanje programske organizacije
računara se bazira na dualizmu softvera i hardvera. Zato se ovaj materijal bavi problematikom
koja dodiruje obije oblasti, ali se i trudi da ne prevagne na ni jednu stranu previše. Ako se
definiše
funkcija cilja
ovog rada, onda ona nije da student nauči programirati u asembleru i/ili
konstrukciju hardverskih sklopova, već da savlada principe rada računarske opreme i to na onoj
tački gde granica između softvera i hardvera nestaje. Funkcija cilja će biti zadovoljena, ako
student uspije da sagleda izvršenje Pascalskog iskaz a:=5; na nižim nivoima, sve dok ne dođe
do nivoa kontrolnih signala i stanja na logičkim sklopovima, prilikom realizacije navedenog
iskaza. Posebna pažnja je posvećena definisanju primitivnih operacija, kako kod softvera tako i
kod hardvera, iz kojih se mogu realizovati ostale.
Materijal počinje sa načinima kodiranja informacija i brojevima, te osnovnih logičkih
sklopaova za manipulisanje tim informacijama. U sljedećim poglavljima se nazmjenično
smjenjuju 'softveraški' i 'hardveraški' pogled na realizaciju računarske mašine. Pored
definisanja virtuelne mašine, definisan je i mašinski jezik sa minimalnim skupom instrukcija.
Na ovakvom modelu je moguće presdstaviti sve bitne elemente koji su vezani za moderne
računarske arhitekture. Kako bi se omogućilo razumjevanje struktuiranog programiranja i
strukture podataka, to su dati načini zapisa istih u realnom asembleru 8086. Da bi se slika
izvršenja zadatka na računarau kompletirala, u zadnjoj glavi su obrađeni procesi prevođenja
programa, linkovanja i punjenja, te izvršenja, što već zalazi u domen operativnih sistema. U
ovome materijalu nisu obrađene asemblerske instrukcije pojedinačno, što je u knjigama ovog
tipa obično urađeno. Razlog leži u tome što je funkcijom cilja definisano da je bitan princip
rada, pa su ovi detalji ostavljeni eventualno za sljedeću verziju. Kako bi se naglasio model
udžbenika, to su na krajevima poglavlja data pitanja vezana za problematiku datog poglavlja
kao i dodatna razmišljanja.
Posebno bih naglasio jezičke probleme koji su neizbježni kada je u pitanju računarska
tehnologija, jer je većina problema izvorno definisana na engleskome jeziku. Nisu uvijek
mogući adekvatni prijevodi na bosanski jezik. Nekada i kada postoji dobar prijevod, kao što je
prihvatnik za buffer, ljudi su ipak navikli i radije koriste izvorni oblik. Trudio sam se koliko je

instrukciju, često na modelima nižeg nivoa zahtjevaju puno koraka za svoje izvršenje. Pascalski
iskaz napisan u jednoj liniji:
y
:=
ax+b
sastoji se od više primitivnih operacija:
množenje konstante
a
sa varijablom
x
;
dodavanje konstante
b
proizvodu;
pridruživanje vrijednosti varijabli
y
.
Svaki od navedenih koraka predstavlja barem po jednu liniju (instrukciju) u asemblerskome
jeziku. Prva linija se prevodi u
mul a,x
U zavisnosti od arhitekture procesora, navedena instrukcija se prevodi kod:
troadresnih mašina: mul a,a,x
dvoadresnih mašina: mul a,x
jednoadresnih mašina: load a
mul x
sto a
Sljedeći nivo je mašinski kôd gdje su mnemonici i operandi binarno kodirani. Kod daljnjih
nivoa apstrakcije prelazi se na hardver i microkod izvršavanja pojedinih operacija.
Navedeni nivoi se mogu predstaviti šematski kao na slici 1.
Programski jezici visokog nivoa su prilagođeni programerima za što jednostavniju realizaciju
algoritama nad podacima kako bi se zadovoljila željena funkcija (obrada). Program koji prevodi
kod napisan u jeziku visokog nivoa u jezik razumljiv za određenu
računarsku
arhitekturu
naziva se
kompajler
. Kod koji se dobije iz kompajlera za svaku operaciju nad
podacima definiše neki simbol, pa se nazva simbolički jezik ili asembler. Kako on implicitno
odražava arhitekturu računara, to on predstavlja
međuvezu
između računarskog hardvera i
softvera i precizno definiše šta računarske
instrukcije
rade i kako se specificiraju. Sljedeća faza
je prevođenje asemblerskog programa posredstvom asemblera u
mašinski program
, u kome je
svaka instrukcija direktno razumljiva hardveru.
Ovo je tačka gdje prestaje softver a počinje hardver, čije granice nisu jasne. Često mikrokod
iste instrukcije jedni definišu kao softver a drugi kao hardver, u zavisnosti da li se posmatra sa
softverske ili hardverske strane apstrakcije. Dok neki dijelovi programa (u mašinskome jeziku)
za izvršavaje pozivaju hardverske sklopove, na drugoj mašini, za isti dio postoji podprogram
(softverska emulacija) koja to obrađuje
.
Program se sastoji od kolekcije varijabli, skupa instrukcija (rečenica) koje djeluju nad tim
varijablama, i pravila koja definišu redosljed primjene (izvršavanja) instrukcija. Ako za svaku
instrukciju postoji jedinstven identifikator (labela) i svaka ima implicitno definisane varijable,
inicijalno se definiše i implicitna varijabla
za labelu prve instrukcije koja će se izvršiti. Kada
program starta, izvrši se prva instrukcija i modifikuje jedna ili više varijabli. Implicitnoj
Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.
Slični dokumenti