SP Usmeni

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 36

I DIO 1. Razlika izmedu CISC i RISC! Postoje dva pristupa dizajnu raunara : RISC: Raunar s reduciranim skupom instrukcija.

Samostalne instrukcije obavljaju jednu, dobro definiranu operaciju. RISC pristup pretpostavlja da e se veina pro ramiranja obavljati u jezicima visoko nivoa. !vaj pristup poveava broj instrukcija koje je potrebno upotrebiti u pro ramu, ali pojednostavljuje strukturu procesora. CISC: Raunar s kompleksnim skupom instrukcija. "edna instrukcija obavlja vi#e operacija. "ednostavnije je pisati pro rame u ma#inskom i asemblerskom jeziku, ali se kompleksnost procesora poveava. 2. Podjela maina po memorijskom pristupu!

$. %rodresne ma#ine
Svi tri operanda su eksplicitno navedeni u veini instrukcija.

&. 'voadresne ma#ine


( &)adresnoj ma#ini, instrukcije imaju samo dvije eksplicitne adrese. "edna od nji* ima dvije ulo e: adresa izvorno operanda i adresa odredi#ta.

+. "ednoadresne ma#ine ,akumulatorske( jednoadresnoj ma#ini ili akumulatorskoj ma#ini, akumulator ima ulo u odredi#no i jedno od izvorni* operanada. Potrebno je navesti samo adresu dru o izvorno operanda. Specifina je jedino S%!R. instrukcija, u kojoj je akumulator izvorni operand, a odredi#te je na memorijskoj lokaciji koja se eksplicitno navodi. /kumulator je re istar u akumulatorskoj ma#ini. /kumulator se nalazi unutar CP(.

0. "ednoadresne ma#ine sa vi#e re istara


1no e moderne ma#ine ,npr. CP( u svakom PC raunaru- pri*vatile su ideju jedne adrese, ali umjesto jedno akumulatora koriste vi#e razliiti* interni* re istara. %o ubrzava neke operacije.

2. 3ula adresne ma#ine ,stekovne1o u je i pristup da se operandi nalaze na internom mjestu u memoriji ili procesoru. "edan takav pristup je preko steka ,o njemu vi#e u posebnom po lavlju-. 4od 5 adresne ma#ine operacije uzimaju vrijednosti sa steka i smje#taju rezultate tako6e na stek. 3. Ulo a re istara SI! DI! SP! "P! Postoje dva indeksna re istra: SI i 'I. !ni se esto koriste kao pokazivai, ali se tako6e koriste kao re istri op#te namjene. Ipak, oni se ne mo u rastaviti u osmobitne re istre ,u sluaju $7)bitni* re istara-. Re istri 8P i SP se koriste da pokazuju na podatke na ma#inskom steku i zovu se 8ase Pointer I Stack Pointer.

#. $oji su dijelo%i re istra &'() ./9 je +&)bitni re istar. /9 je ni:i* $7 bita re istra ./9, ba# kao #to je /; ni:i* < bita re istra /9 ,kao i ./9-. 3ema direktno naina za pristup do vi#i* $7 bita ./9 re istra. *. Do+ijanje ,izi-ke adrese u realnom re.imu! ( realnom re:imu rada ,kompatibilnom sa <5<7 i aktivnom pri startu raunara- memorija je o raniena na samo jedan me abajt. Ispravne adrese u opse u ,*eksadekadno- izme6u 55555 i =====. !ve adrese za*tijevaju &5)bitne brojeve. "asno, &5)bitni broj se ne mo:e smjestiti u $7)bitne re istre procesora <5<7. Intel je rije#io taj problem kori#tenjem dvije $7)bitne vrijednosti radi odre6ivanja adrese. Prva $7 bitna vrijednost se zove selektor ili se mentna vrijednost. >rijednosti selektora se moraju uvati u se mentnim re istrima. 'ru a #esnaestobitna vrijednost se zove pozicija ,offset-. =izika adresa koja se dobije +& bitnim parom selektor)pozicija se rauna formulom: $7$5? selektor @ pozicija 1no:enje sa $7$5 u *eksadekadnom sistemu je lako, samo se dodaje 5 na kraj broja. 3a primjer, fizika adresa navedena kao 50AC$7:550<$7 iznosi: 50AC5 @550< )))))))) 50<5< /. Do+ijanje ,izi-ke adrese u 1/ +itnom zati-enom re.imu! 4od za#tieno re:ima, vrijednost selektora je redni broj elementa u deskriptorskoj tabeli, kombinovan s jo# tri bita ,od koji* jedan odre6uje koji od dva mo ua deskriptorska re istra pokazuje na tabelu, a dva bita odre6uju s kojim pravima se :eli pristupiti memorijskom se mentu-. I za za#tieni I za realni re:im, pro ram se dijeli u se mente. ( za#tienom re:imu, se menti nisu na fiksnoj poziciji u fizikoj memoriji. Bak, ne moraju uop#te biti u R/1 memoriji. Ca#tieni re:im koristi te*niku koja se zove virtualna memorija. !snovna ideja virtualne memorije da se u R/1)u uvaju samo podaci i pro ram koji se trenutno koristi. !stali podaci i pro ramski kod se privremeno dr:e na disku dok ne budu opet potrebni. ( $7)bitnom za#tienom re:imu, se menti se premje#taju izme6u memorije i diska po potrebi. 4ada se se ment vrati sa diska u memoriju, vrlo je vjerovatno da e biti smje#ten u dru i dio memorije u odnosu na onaj dje je bio prije ne o #to je prebaen na disk. Sve se ovo radi transparentno, u operativnom sistemu. Sam pro ram ne mora biti posebno pisan da radi s virtualnom memorijom. ( za#tienom re:imu, svakom se mentu je pridru:en element deskriptorske tabele. %aj element ima sve informacije potrebne sistemu da zna o

se mentu. Informacije ukljuuju: da li je trenutno u memoriji, ako jeste D dje je, koja su prava nad datim se mentom ,npr samo za itanje-. Redni broj elementa se menta je vrijednost selektora smje#tena u se mentnim re istrima. 0. Do+ijanje ,izi-ke adrese u 32 +itnom zati-enom re.imu! <5+<7 uveo je +&)bit za#tieni re:im. Postoje dvije lavne razlike izme6u +&)bitno re:ima za +<7 i $7 bitno re:ima za &<7: $. 1emorijske pozicije su poveane na +& bita. %o omo uuje postavljanje pozicije na vrijednost preko 0 milijarde. %ako, se menti mo u imati veliine do 0 i abajta. &. Se menti se mo u dijeliti na manje jedinice od 0 kilobajta, koje se zovu stranice. Sistem virtualne memorije sada radi s stranicama umjesto se menata. %o znai da u memoriji mo:emo dr:ati i samo dijelove se menata. ( $7)bitnom re:imu procesora <5&<7 , ili je cijeli se ment u memoriji ili nije. %o nije praktino sa velikim se mentima kakve dopu#ta +&)bitni re:im. 1. Razlika izmedu 2O3 &'(!D'4' i 2O3 &'(!5D'4'6 u 7'S2! Indirektno adresiranje omo uuje re istrima da se pona#aju kao pokazivake varijable. 'a se oznai da se re istar koristi indirektno kao pokaziva, uokviren je u lastim za radama ,E F-. 3a primjer:
mov aG, E'ataF HH normalno direktno memorijsko adresiranje rijei mov ebG, 'ata HH ebG I J 'ata ) adresa mov aG, EebGF HH aG I ?ebG D podatak na adresi

Po#to /9 sadr:i $7bitnu rije, linija + ita rije koja poinje na adresi koja je navedena u re istru .89. /ko se /9 zamijeni sa /;, bio bi proitan samo jedan bajt. 8. O+jasniti 2O3 &C(!5&'(9#:&"(92;;;<6 Indirektno adresiranje se esto koristi za realizaciju nizova, pa je uvedena eneralna forma za indirektni pristup memoriji. E bazni re istar@ faktor ?indeks re @ konstanta F dje su: bazni re istar jedan od ./9, .89, .C9, .'9, .8P, .SP, .SI ili .'I. faktor je jedan od $, &, 0 ili <. ,/ko je $, faktor se ne navodiindeks re je jedan od re istara ./9, .89, .C9, .'9, .8P, .SI, .'I ili se mo:e izostaviti. , .SP nije na listi.konstanta je +&)bitna konstanta. 4onstanta mo:e biti i labela. 1;. =ta su to +i endian i little endian) Imaju dva popularna metoda za smje#tanje cijeli* brojeva, bi endian i little endian. 8i endian je metod koji iz leda prirodnije. 3ajvei ,tj. najznaajniji- bajt se smje#ta na

adresu najmanju po vrijednosti, nakon nje a sljedei po znaaju itd. 3a primjer dupla rije 55555550 se smje#ta kao etiri bajta, tj. 55 55 55 50. I81 veliki raunari, veina RISC procesora I 1otorolini procesori koriste metod bi endian. Ipak, Intel)bazirani procesori koriste little endian metodK !vdje se najmanje znaajan bajt smje#ta prvi, pa se 55555550 smje#ta u memoriji kao 50 55 55 55. Razlo za ovaj format je #to operacije s ;ittle endian formatom mo u ponekad biti br:e. !vaj format je u ra6en u sam mikroprocesor i ne mo:e se mijenjati. 3ormalno pro ramer ne treba da brine koji se format koristi. Ipak, ponekad je ovo bitno $.4ada se binarni podaci prenose izme6u razliiti* raunara ,preko datoteka ili mre:no&.4ada se binarni podaci upisuju u memoriju kao vi#ebajtni cijeli broj, a zatim itaju kao pojedinani bajtovi ili obrnuto. 11. 7a koji na-in se proiruje osmo+itni podatak u 32 +ita) Ima vi#e instrukcija za procesor <5+<7 i jai koje omo uavaju pro#irivanje veliine brojeva. Sam raunar ne zna da li je broj predznaeni ili nepredznaeni. 3a pro rameru je da koristi korektnu instrukciju. Ca nepredznaene brojeve mo u se prosto staviti nule u ornje bitove koristei instrukciju 1!>. Ipak, nije mo ue koristiti 1!> instrukciju za konverziju nepredznaene rijei u /9 u nepredznaenu duplu rije u ./9. Ca#toL 3ema naina da se 1!> instrukcijom specificira ornji* $7 bita re istra ./9. Procesor <5+<7 rje#ava ovaj problem uvo6enjem nove instrukcije 1!>C9. !va instrukcija ima dva operanda. !dredi#ni ,prvi operand- mora biti $7 ili +& bitni re istar. Izvorni ,dru i operand- mo:e biti < ili $7 bitni re istar odnosno bajt ili rije memorije. 'ru o o ranienje je da odredi#te mora biti vee od izvora. ,>eina instrukcija za*tijeva da su izvor i odredi#te iste veliine.Ca predznaene brojeve, 1!> nije po odna za pro#irivanje veliine podataka. <5<7 procesor dao je neke instrukcije za pro#irivanje predznaeni* brojeva. Instrukcija C8M ,Convert 8Nte to Mord- predznano pro#iruje re istar /; u /9. !perandi su implicitni. CM' ,Convert Mord to 'ouble Oord- instrukcja predznaeno pro#iruje /9 u '9P/9. 3otacija '9P/9 predstavlja da se zamisli da '9 i /9 re istri ine jedan +& bitni re istar s ornji* $7 bita u '9 i donji* $7 bita u /9. ,3e treba zaboraviti da <5<7 nije imo ni jedan +& bitni re istarK- Procesor <5+<7 je dodao nekoliko novi* instrukcija. Instrukcija CM'. ,Convert Mord to 'ouble Oord .Gtended- predznano pro#iruje /9 u ./9. Instrukcija C'Q ,Convert 'ouble Oord to Quad Oord- predznano pro#iruje ./9 u .'9P./9 ,70 bita-. 4onano, instrukcija 1!>S9 radi kao 1!>C9, osim #to koristi pravila za predznaene brojeve. 12. =ta su to asem+lerske direkti%e) 'irektiva je element asemblera, a ne mikroprocesora. !ne se eneralno koriste bilo da daju instrukciju asembleru da ne#to uradi, bilo da se asembler informira o neemu. 'irektive se ne prevode u ma#inski kod. (obiajena primjena direktiva je: R definiranje konstanti R definiranje memorije za smje#tanje podataka R rupiranje memorije u se mente

R uslovno ukljuivanje izvorno koda R ukljuivanje dru i* datoteka 13. 4ipi-ni uzorak za realiza-iju i, nared+e EStranica 05.F ili: S instrukcije koje postavljaju fla s j e t*enblock S uslov: j e, jne, jl, itd. ,tabela str. ++S odabrati tako da se skok desi ako je uslov if)a tacan S instrukcije else blocka jmp neGt t*enblock: S instrukcije t*en blocka endif: S nastavak pro rama 1#. >ato se parametrima direktno pristupa na nji<o%im loka-ijama umjesto POP Parametri na steku se skidaju u potpro ramu, ne o im se umjesto to a direktno pristupa na steku. Ca#toL R Po#to se oni moraju smjestiti na steku prije C/;; instrukcije, povratna adresa bi se morala prvo pokupiti sa steka ,i onda smjestiti na nje a ponovo-. R Besto se parametri koriste na vi#e mjesta u potpro ramu. !bino, oni se ne mo u uvati u re istrima tokom cijelo potpro rama i morali bi biti smje#teni u memoriji. 3ji*ovo uvanje na steku odr:ava kopiju u memoriji kojoj se mo:e pristupati s bilo koje mjesta u potpro ramu. 1*. Razlika izme?u C -all! Pas-al -all I S4D -all 3akon #to je potpro ram zavr#en, parametri koji su smjeteni na stek moraju +iti uklonjeni. C kon%en-ija pozi%a spe-i,i-ira da pro ram pozi%ala- to mora uraditi. 'ru e konvencije su dru aije. 3a primjer, Pas-al kon%en-ija spe-i,i-ira da poz%ani potpro ram mora ukloniti parametre. Postoji i dru a forma R.% instrukcije koja to jednostavno radi. 3eki C kompajleri podr:avaju i ovu konvenciju. ( deklaraciji prototipa funkcije se navede kljuna rije pascal da se ka:e kompajleru da slijedi ovu konvenciju. ( emu je prednost ove konvencijeL !na je malo efikasnija od C konvencije. Ca#to se ona onda ne koristi u svim C funkcijamaL Teneralno, C pro rami dopu#taju da funkcije imaju promjenjiv broj ar umenata ,npr., printf i scanf funkcije-. Ca ovaj tip funkcija, operacija koja skida parametre sa steka e se razlikovati za razliite pozive funkcija. C konvencija dopu#ta da se ovo razliito preuzimanje parametara jednostavno realizuje. Pascal konvencija ine ovu operaciju te#kom. Cato Pascal konvencija ,kao i Pascal jezik- ne dopu#ta ovaj tip funkcije. 1S MindoOs mo:e koristiti ovu konvenciju jer ni jedna od nje ovi* /PI funkcija ,osim Ovsprintf- ne uzima promjenjiv broj ar umenata. Pascal konvencija je bila kori#tena u MindoOs $7 bitnim verzijama. Ipak, +&)bitne MindoOs funkcije koriste mjea%inu C i Pas-al kon%en-ija koja se zo%e std-all. Ona koristi redoslijed parametara na steku

kao C kon%en-ija! ali se stek prila o?a%a na kraju potpro rama kao kod Pas-al kon%en-ije. 1/. U tipi@nom podpro ramu! kako se pristupa lokalnim %arija+lama Stek se mo:e koristiti kao po odno mjesto za lokalne varijable. 3a ovom mjestu i jezik C smje#ta lokalne ,ili automatske- varijable. (potreba steka za varijable je va:na ako se :eli postii da su potpro rami ponovno pozivljivi. Ponovno pozivljiv pro ram e raditi ako je pozvan sa bilo ko mjesta, ukljuujui i sam taj potpro ram. 'ru im rijeima, ponovno pozivljivi potpro rami se mo u zvati rekurzivno. (potreba steka za varijable tako6er #tedi memoriju. Podaci koji se ne smje#taju na stek koriste memoriju od poetka do kraja izvr#enja cijelo pro rama ,C naziva ove tipove varijabli lobalne ili statike -. Podaci smje#teni na stek koriste memoriju samo kada je potpro ram u kome su definisani aktivan. ;okalne varijable se nalaze odma* iza sauvane .8P vrijednosti na steku. !ne se alociraju umanjivanjem .SP za potreban broj bajtova potrebni* za .SP u poPetnom dijelu potpro rama. Re istar .8P se koristi za pristup lokalnim varijablama. 10. 7a =ta tre+a paziti kada se po%ezuju assem+ler i C 4ada se asemblerski jezik koristi, to je obino za manje dijelove koda. %o se radi na dva naina, pozivom asemblerski* potpro rama iz C)a ili u ra6enim ,inline- asemblerom. ( ra6eni asembler omo uava pro rameru da smjesti asemblerske naredbe direktno unutar C pro rama. %o mo:e biti dosta praktino, ali ima i nedostataka u ra6eno asemblera. /semblerski kod se mora pisati u formatu koji kompajler koristi. Popularni C kompajleri ne koriste 3/S1 format. Razliiti kompajleri koriste razliite formate. 8orland I 1icrosoft koriste 1/S1 format. 1inTO TCC i ;inuGov cc za*tijevaju T/S format. T/S je asembler koji svi T3( kompajleri koriste. !n koristi /%J% sintaksu koja je vrlo razliita od relativno slini* sintaksi 1/S1a, %/S1a i 3/S1a. %e*nika poziva posebno prevedeni* asemblerski* potpro rama je daleko standardizovanija na PC raunarima. /semblerske rutine se obino koriste sa C)om iz sljedei* razlo a: R 'irektni pristup je neop*odan *ardverskim osobinama raunara kojima je te#ko ili nemo ue pristupiti iz C)a. R Rutina mora biti #to je mo ue br:a i pro ramer mo:e bolje optimizovati kod, ne o raunar. 'ru i razlo je dijelom iz ubio na znaaju. %e*nolo ija kompajlera je uznapredovala i kompajleri mo u enerisati veoma efikasan kod, posebno ako su optimizacije ukljuene, mada jo# uvijek ima sluajeva kada se pro ramom u asembleru mo:e postii nekoliko puta vea brzina ne o ekvivalentnim pro ramom u C)u. 1ane asemblerski* rutina su smanjena portabilnost i itljivost. 11. 7a ta tre+a paziti pri pisanju pono%o pozo%i%i< I rekurzi%ni< pro rama Ponovno pozivljiv pro ram mora zadovoljavati sljedee kriterije: R 3e smije modificirati instrukcije pro rama. ( vi#im pro ramskim jezicima to je te#ko, ali u asembleru nije te#ko pro ramu da modifikuje vlastiti kod.

R 3e smije modifikovati lobalne podatke ,poput oni* u data i bss se mentima-. Sve varijable se smje#taju na steku. Rekurzivni potpro rami moraju imati uslov zavr#etka. 4ada je ovaj uslov ispunjen, vi#e se ne vr#e rekurzivni pozivi. /ko rekurzije nemaju uslov zavr#etka, ili taj uslov nikad nije ispunjen, rekurzija nikada nee prestati ,poput je beskonane petlje-. 18. $ako se ra@una adresa 7Ato elementa u jednodimenzionalnom nizu arraNPname @ 3 ? velicinaPpodatakaPuPnizuP,u bNteima%u 3 znaci index elementa (pocinje od nule) 2;. $ako se ra@una adresa elementa u d%odimenzionalnom nizu 3a primjer, niz koji ima tri reda i dvije kolone se defini#e kao: int a E+FE&FS 4ako kompajler odre6uje dje se aEiFEjF nalazi u raspore6ivanju po redovimaL Prosta formula e izraunati indeks iz i,j. =ormula u ovom sluaju je &i @ j . 3ije te#ko zakljuiti kako je ova formula dobivena. Svaki red ima dva elementa, pa je poetni element i)o reda na poziciji &i. 3akon to a se pridoda kozicija kolone j, sabiranjem j s &i. !va analiza pokazuje kako se formula mo:e eneralizovati za niz od 3 kolona: 3 Ui @j . !va formula ne ovisi od broja redova. 3ema posebno razlo a za#to je izabrana reprezentacija po redovima. 1o la bi raditi i reprezentacija po kolonama. ( reprezentaciji po kolonama, svaka kolona je smje#tena kontinualno. .lement EiFEjF se nalazi na poziciji i @ +j . !va analiza pokazuje kako se formula mo:e eneralizovati za niz od 3 redova: i @ 3 Uj . 21. $oja je ulo a R&P pre,iksa u +lok instruk-ijama =amilija <5G<7 ima specijalni instrukcijski prefiks koji se zove R.P i koji se mo:e koristiti za strin instrukcije. Instrukcijski prefiks nije instrukcija, on je specijalni bajt koji se postavlja ispred strin instrukcije koji modifikuje njeno pona#anje. ,Postoje i dru i prefiksi za promjenu podrazumijevani* se menata pri memorijskom pristupu ili naina adresiranja.- Prefiks R.P ka:e procesoru da ponavlja narednu strin instrukciju navedeni broj puta. Re istar .C9 se koristi za brojanje iteracija. 22. $ako su or anizo%ani re istri u pokretnom zarezu 3ajraniji Intelovi procesori nisu imali *ardversku podr#ku za operacije u pokretnom zarezu. %o ne znai da nisu mo li obavljati te operacije. %o samo znai da su morali obavljati ove operacije preko procedura koje obavljaju cjelobrojne operacije. Ca ove rane sisteme Intel je proizveo poseban ip koji se zvao matematiki koprocesor. 1atematiki koprocesor ima ma#inske instrukcije koje obavljaju mno o operacija u pokretnom zarezu daleko br:e ne o upotrebom softverski* procedura. 3umeriki koprocesor ima osam re istara za rad u pokretnom zarezu. Svaki re istar ima <5 bitova podataka

8rojevi u pokretnom zarezu se interno uvaju u tim re istrima u formatu od <5 bita, pro#irene preciznosti. !vi re istri se zovu S%5, S%$, S%&, . . . S%A. Re istri za rad u pokretnom zarezu se koriste na dru i nain ne o cjelobrojni re istri u lavnom procesoru. Re istri za rad u pokretnom zarezu su or anizovani kao stek. Poznato je da je stek ;ast)In =irst)!ut ,;I=!- lista. S%5 uvijek pokazuje na vrijednost na vr*u steka. Postojei brojevi se uraju na steku da se napravi mjesto za novi broj. Postoji i statusni re istar u numerikom koprocesoru. !n ima vi#e indikatora. 23. =ta je to pora%nanje u strukturama /3SI C standard defini#e da su elementi strukture u memoriji poredane u istom redoslijedu kako su definisani u definiciji struct. !n tako6er defini#e da je prvi element na samom poetku strukture ,tj. Pozicija 5-. Standard defini#e i koristan makro u za lavlju stddef.* pod imenom offsetof,-. !vaj makro rauna I vraa poziciju bilo koje elementa strukture. 1akro za*tijeva dva elementa, prvi je ime tipa strukture, dru i je ime elementa ija se pozicija tra:i. Recimo da je rezultat offsetof,S, N- bi bio &. /ko bi se koristio makro offsetof za tra:enje pozicije polja N kori#tenjem cc kompajlera, primjetie se da je on vratio vrijednost koju vraa 0, a ne &K Ca#toL Cato #to cc ,i mno i dru i kompajleri- poravnavaju vrijednost na duplu rije. ( +&)bitnom za#tienom re:imu, CP( br:e ita tridesetdvobitne podatke u memoriji ako podaci poinju na ranici duple rijei. 4ompajler ubacuje dva nekori#tena bajta u strukturu da poravna N i z na ranicu duple rijei. %o pokazuje za#to je razumna ideja koristiti offsetof za raun pozicija, umjesto da i* pro ramer sam rauna kada se koriste strukture definisane u C)u. !smobitni podaci se tipino ne moraju poravnavati na adrese koje od ovaraju duploj rijei, jer za nji*ovo itanje nema razlike u brzini pristupa ako su adrese poravnate ili ne. Vesnaestbitni podaci se poravnavaju na ranice #esnaestbitne rijei. 3aravnom ako se struktura koristi samo u asembleru, pro ramer mo:e sam odrediti pozicije. Ipak, ako se povezuju C i asemblerski jezik, veoma je va:no da se asemblerski kod i C kod sla:u po pitanju pozicija elemenata. 'odatna komplikacija mo:e biti da razliiti C kompajleri mo u dati razliite pozicije podataka. Ipak /3SI C standard ne defini#e kako to treba biti ura6eno, i sto a razliiti kompajleri to rade na razliit nain. 2#. 2ODR2 +ajt u enerisanom kodu 1odRH1: 8iti A..7 predstavljaju 1ode, biti &..5 sadr:e kod re istra ili memorijsko re:ima koji je indiciran modom, biti 2..+ su rezervno polje ( $7 bitnom rezimu: 1od predstavlja veliinu pomaka ,5, $, & bajta- ili + ako je u pitanju re istar. Polja &..5 dopu#taju nekoliko kombinacija re istara za adresiranje, pri emu EbpF se mora kodirati kao Ebp@5F ( +& bitnom re:imu mod polje predstavlja du:inu dijela pomaka, 5 znai da nema pomaka, $ znai jedan bajt, & predstavlja 0 bajta. /ko se pomaku pridodaje samo jedan re istar i on nije .SP, tada rHm polje sadr:i vrijednost koja

predstavlja taj re istar i nema polja SI8. /ko je rHm polje jednako 0 , postoji SI8 polje. %ako6er, EebpF se mora kodirati kao Eebp@5F. 2*. SI" +ajt u enerisanom kodu SI8 bajt ima tri polja: =aktor skaliranja u bitima A..7 koji predstavljaju $, &, 0 ili <, indeksni re istar u bitima 2..+ I bazni re istar u bitima &..5. Ideja je da se eneri#e E8/S. @ SC/;.?I3'.9F, koji se onda dodaju eventualnom pomaku navedenom u 1odRH1 bajtu. 3a primjer, kod '+ ,$$5$55$$- ima skalu $$ ,znai <-, indeksni re istar 5$5 ,znai .'9- I bazni re istar 5$$ ,znai .89- pa se kodira kao EebG@edG?<F. ( $7 bitnom re:imu SI8 bajt se nikada ne koristi

II DIO 1. Instruk-ija 'DC I S"" /semblerski jezik tako6e posjeduje instrukcije koje omo uavaju sabiranje ili oduzimanje brojeva vei* od duple rijei. !ve instrukcije koriste carrN indikator. 4ako je ve reeno, i /'' i S(8 instrukcije mijenjaju carrN indikator ako se dese prijenos ili pozajmnica. !va informacija smje#tena u carrN indikator se mo:e koristiti za sabiranje ili oduzimanje veliki* brojeva razbijanjem operacije u operacije sa manjim dijelovima veliine dupli* rijei ,ili jo# manje- Instrukcije /'C i S88 koriste ovu informaciju u carrN indikatoru. Instrukcija /'C obavlja sljedeu operaciju:
operand$I operand$@ carrN fla @ operand&

Instrukcija S88 obavlja:


operand$I operand$)carrN fla ) operand&

2. Instruk-ija 'DD /'' instrukcija se koristi za sabiranje cijeli* brojeva: add eaG, 0 add al, a* S eaG I eaG @ 0 S al I al @ a*

3. Instruk-ija '7D Rezultat /3' operacije nad dva bita je $ ako su oba bita $, inaPe je 5. Procesori podr:avaju ove operacije kao instrukcije koje rade neovisno nad svim bitima paralelno. 3a primjer ako se izvr#i /3' operacija izme6u /; i 8; , osnovna /3' operacija se primjeni na svaki od < parova od ovarajui* bita u oba re istra.

/3'

$5$5$5$5 $$55$55$ $555$555

3a primjer:
mov aG, 5C$&+W and aG, <&=7W S aG I <5&&W

#. Instruk-ija C'BB Instukcija C/;; smje#ta na stek adresu instrukcije neposredno iza same sebe i izvr#ava bezuslovni skok u potpro ram. *. Instruk-ija C"C Instrukcija C8M ,Convert 8Nte to Mord- predznno pro#iruje re istar /; u /9. !perandi su implicitni. /. Instruk-ija CDD Instrukcija C'Q ,Convert 'ouble Oord to Quad Oord- predznano pro#iruje ./9 u .'9P./9 ,70 bita-. 0. Instruk-ija C2P 4ontrolne strukture treba da odrede #ta da se radi na bazi porePenja podataka. ( asemblerskom jeziku, rezultat pore6enja se smje#ta u =;/TS re istar da bi se kasnije koristio. Procesori iz serije <5G<7 nude instrukciju C1P radi obavljanja pore6enja. Re istar =;/TS se postavlja na bazi razlike dva operanda instrukcije C1P. !perandi se interno oduzmu i =;/TS se postavi na bazi rezultata, ali rezultat samo oduzimanja se ni dje ne smje#ta. /ko je rezultat potreban, tada se treba koristiti S(8 instrukcija umjesto C1P. 1. Instruk-ija D&C Instrukcija '.C umanjuje vrijednosti za $. Po#to je X$Y implicitni operant, ma#inski kod za '.C je krai od ekvivalentno S(8 instrukcije. dec dl S dl)

8. Instruk-ija DI3 'I> je operator dijeljenja. !n obavlja nepredznaeno dijeljenje. !p#ti oblik je: div source

/ko je izvor <)bitni, /9 se dijeli sa operandom. 4olinik se smje#ta u /; a ostatak u /W. /ko je izvor $7)bitni, onda se '9P/9 dijele s operandom. 4olinik se smje#ta u /9 a ostatak u '9. /ko je izvor +&)bitni, onda se .'9P./9 dijeli sa operandom, a koliPnik se smje#ta u ./9 a ostatak u .'9. 1;. Instruk-ija E'"S =/8S S%5 I ZS%5Z (zima apsolutnu vrijednost S%5

11. Instruk-ija E'DD Svaka operacija sabiranja raSuna sumu re istra S%5 i dru o operanda. Rezultat se uvijek smje#ta u koprocesorski re istar. =/'' src S%5 @I src .

Izvor mo:e biti bilo koji koprocesorski re istar ili broj jednostruke ili dvostruke preciznosti u memoriji. 12. Instruk-ija ECO2P =C!1P src Poredi S%5 i src i pokupi broj s koprocesorsko steka. Izvor mo:e biti koprocesorski re istar ili float ili double u memoriji. 13. Instruk-ija EDI3 ='I> src S%5 HI src. Izvor mo:e biti bilo koji koprocesorski re istar ili broj jednostruke ili dvostruke preciznosti u memoriji. 1#. Instruk-ija EI'DD =I/'' src S%5 @I ,float- src . Sabira cijeli broj sa S%5. Izvor mora biti rije ili dupla rije u memoriji. 1*. Instruk-ija EBD =;' source (itava broj u pokretnom zarezu iz memorije na vr* koprocesorsko steka. Izvor mo:e biti broj u jednostrukoj, dvostrukoj ili pro#irenoj preciznosti ili koprocesorski re istar. 1/. Instruk-ija ESI7 =SI3 Sinus S%5

10. Instruk-ija ESU" =S(8 src S%5 )I src . Izvor mo:e biti bilo koji koprocesorski re istar ili broj jednostruke ili dvostruke preciznosti u memoriji. 11. Instruk-ija IDI3 I'I> je operator dijeljenja. !n obavlja predznaeno dijeljenje. !p#ti oblik je: idiv source /ko je izvor <)bitni, /9 se dijeli sa operandom. 4olinik se smje#ta u /; a ostatak u /W. /ko je izvor $7)bitni, onda se '9P/9 dijele s operandom. 4olinik se smje#ta u /9 a ostatak u '9. /ko je izvor +&)bitni, onda se .'9P./9 dijeli sa operandom, a kolinik se smje#ta u ./9 a ostatak u .'9. Instrukcija I'I> radi na isti nain. /ko je kolinik prevelik da stane u re istre ili je djeljenik jednak 5, pro ram se prekida i zavr#ava. >eoma esta re#ka je zaboravljanje inicijalizacije re istara '9 ili .'9 prije dijeljenja. 18. Instruk-ija I2UB Postoje dvije razliite instrukcije za mno:enje i dijeljenje. Instrukcija I1(; se koristi za mno:enje predznaeni* brojeva. Pravila za mno:enje su razliita za nepredznaene i predznaene brojeve u dru om komplementu. Instrukcija I1(; ima isti format kao i 1(;, ali dodaje jo# neke formate. Postoje formati od dva ili tri operanda: imul dest, source$ imul dest, source$, source& 2;. Instruk-ija I7C Instrukcija I3C uveavaju vrijednosti za $. Po#to je X$Y implicitni operant, ma#inski kod za I3C od ekvivalentno za /'' instrukciju. inc ecG S ecG@@

21. Instruk-ija FO! F7O Ima mno o razliiti* uslovni* skokova. !ne tako6er oznaavaju labelu kao nji*ov jedini operand. 3ajjednostavnije od nji* samo posmatraju jedan od bitova =;/TS re istra da odrede da li e se skok obaviti ili ne.
"! skae samo ako je != postavljen na $

"3! skae samo ako je != postavljen na 5

Indikator prekoraenja ,overfloO- se postavlja na $ ako je rezultat operacije neoekivano predznaka ,npr. 3akon sabiranja dva pozitivna broja dobije se ne ativan broj-, ime se do#lo do prekoraenja opse a predznaeni* brojeva. 22. Instruk-ija F>! F7> Ima mno o razliiti* uslovni* skokova. !ne tako6er oznaavaju labelu kao nji*ov jedini operand. 3ajjednostavnije od nji* samo posmatraju jedan od bitova =;/TS re istra da odrede da li e se skok obaviti ili ne.
"C skae samo ako je C= postavljen na $ "3C skae samo ako je C= postavljen na 5

Indikator nule ,zero- se postavlja na $ ako bi rezultat razlike bio 5. 23. Instruk-ija FG! F' "T labelaS ili "/ labela "T se koristi za predznaceno poredjenje I skokove: vrsi skok na labelu ako je je vleft [ vri *t "/ radi isto, samo za nepredznacene brojeve. 2#. Instruk-ija FC! F"! F7'&! ta rade! ima li razlike medu njima Svi rade isto D skok ako je vleft \ vri *t. "C radi skok ako je CarrN =la I $ ,bice $ za vleft \ vri *t-, "8 I "3/. ako je vleft \ vri *t dje su operandi nepredznaceni. 2*. Instruk-ija FC(> "ump if C9 Cero: >rsi skok ako je C9 I 5 2/. Instruk-ija F2P! o+li-i Instrukcija "1P ,skraPeno od jump - ini bezuslovne skokove. 3jen jedini ar ument je obino pro ramska labela na koju se treba skoiti. /sembler ili linker e zamijeniti labelu ispravnom adresom instrukcije. %o je jo# jedna od dosadni* operacija koje asembler ini da pro ramerov :ivot bude jednostavniji. >a:no je zakljuiti da naredba iza "1P se nikada nee izvr#iti ukoliko neka dru a instrukcija ne skoi na nju. Ima vi#e varijanti instrukcija skokova: SW!R% !vaj skok je vrlo o ranieno dometa. !n mo:e napraviti pomak sve a do $&< bajtova u memoriji. Prednost ovo tipa je #to koristi manje memorije ne o ostali. !n koristi jedan predznaeni bajt da smjesti pomak skoka. Pomak predstavlja vrijednost za koliko se bajtova treba pomjeriti naprijed ili nazad. Pomak se sabira sadr:ajem re istra .IP-. 'a se specificira kratki skok, koristi se kljuna rije SW!R% odma* ispred labele unutar instrukcije "1P. 3./R !vaj skok je podrazumijevani tip za bezuslovne i uslovne skokove, pa se mo:e koristiti za skok na bilo koju lokaciju na se mentu. Capravo, <5+<7 podr:ava dva tipa

near skokova. "edan od nji* koristi dva bajta za pomak. %o dopu#ta skokove do pribli:no +&,555 bajtova. 'ru i tip koristi tiri bajta za pomak, #to naravno dopu#ta skok na bilo koju lokaciju unutar kodno se menta. Betvorobajtna verzija je podrazumijevana u +<7 za#tienom re:imu. 'vobajtni tip se mo:e specificirati stavljanjem M!R' kljune rijei prije labele u instrukciji "1P. =/R !vaj skok omo uava kontroli da skoi u dru i kodni se ment. %o je izuzetno rijetka akcija u +<7 za#tienom re:imu. 20. Instruk-ija B&'3& Poetni i krajnji dio potpro rama se mo u pojednostaviti kori#tenjem dvije specijalne instukcije koje su dizajnirane upravo za ovu namjenu. Instrukcija .3%.R realizuje poetni kod, a instrukcija ;./>. realizuje zavr#etak. Instrukcija .3%.R ima dva neposredna operanda. Ca C konvenciju poziva, dru i operand je uvijek 5. Prvi operand je broj bajtova potreban za lokalne varijable. ;./>. instrukcija nema operanada.
subpro ramPlabel: enter ;!C/;P8]%.S, 5 S I ^ bajtova potrebno za lokalne varijable S kod potpro rama leave ret

21. Instruk-ija B&' ;./ ,;oad .ffective /ddress -. Sljedei kod rauna adresu varijable G I smje#ta je u ./9: lea eaG, Eebp ) <F Sada ./9 sadr:i adresu varijable G i mo:e se smjestiti na stek prilikom poziva funkcije pp. 'a se izbje nu zabune, ovo iz leda kao da se itaju podaci sa adrese E.8P)<FS ali to nije sluaj. Instrukcija ;./ nikada ne ita memoriju. !na samo rauna adresu lokacije koja bi bila proitana nekom dru om instrukcijom i smje#ta tu adresu u prvi re istarski operand. Po#to ona ne ita memoriju, nema potrebe ,niti je dopu#teno- za navo6enjem veliine operanda ,npr dOord-. 28. Instruk-ija BODS! BODS"! BODSC 3ajprostije strin instrukcije itaju ili pi#u memoriju ili oboje. !ne mo u itati ili pisati bajt, rije ili duplu rije u trenutku. Instrukcije s kratkim opisom u pseudokodu #ta one rade.
;!'S8 /; I E'S:.SIF .SI I .SI _ $ ;!'SM /9 I E'S:.SIF .SI I .SI _ &

;!'S' ./9 I E'S:.SIF .SI I .SI _ 0 Strin instrukcije za itanjeK

Prvo, .SI se koristi za itanje. %o je lako zapamtiti ako se zna da SI je skraenica od Source IndeG. 'alje, re istar koji uva podatke je fiksni , /;, /9 ili ./9-. 4onano, instrukcije za upis koriste .S za odre6ivanje se menta u koji se pi#e, a ne 'S. ( za#tienom re:imu rada, ovo obino ne predstavlja problem, po#to postoji samo jedan se ment podataka i .S treba biti automatski inicijaliziran da referencira na nje a ,kao i 'S -. Ipak, kod pro ramiranja u realnom re:imu rada, veoma je va:no da pro ramer inicijalizira re istar .S na korektnu vrijednost selektora. 3;. Instruk-ija 2O3S! 2O3S"! 2O3SC 4ombinacija instrukcija ;!'SG i S%!SG je vrlo esta. Capravo, prva kombinacija se mo:e izvesti jednom 1!>SG strin instrukcijom. ;!'S' I S%!S' se mo u zamijeniti jednom 1!>S' instrukcijom s istim efektom. "edina razlika je #to se re istar ./9 uop#te ne bi koristio u petlji.
1!>S8 bNte E.S:.'IF I bNte E'S:.SIF .SI I .SI _ $ .'I I .'I _ $ 1!>SM Oord E.S:.'IF I Oord E'S:.SIF .SI I .SI _ & .'I I .'I _ & 1!>S' dOord E.S:.'IF I dOord E'S:.SIF .SI I .SI _ 0 .'I I .'I _ 0 Instrukcije za pomijeranje memorijeK

31. Instruk-ija 2O3 3ajosnovnija instrukcija je 1!> instrukcija. !na premje#ta podatke s jedne lokacije na dru u ,poput operatora dodjeljivanja u jezicima visoko nivoa-, !na ima dva operanda: mov dest, src Podaci navedeni u src se kopiranju u dest. ! ranienje je da oba operanda ne mo u biti memorijski operandi. %o pokazuje na jo# jednu nez odnu osobinu asemblersko jezika. Besta su ,ponekad proizvoljna- pravila kako se pojedine instrukcije koriste. !perandi moraju tako6e biti iste veliine. >rijednost re istra /9 se ne mo:e smjestiti u 8;. 32. Instruk-ija 2O3>( Ipak, nije mo ue koristiti 1!> instrukciju za konverziju nepredznaene rijei u /9 u nepredznaenu duplu rije u ./9. Ca#toL 3ema naina da se 1!> instrukcijom specificira ornji* $7 bita re istra ./9. Procesor <5+<7 rje#ava ovaj problem uvo6enjem

nove instrukcije 1!>C9. !va instrukcija ima dva operanda. !dredi#ni ,prvi operandmora biti $7 ili +& bitni re istar. Izvorni ,dru i operand- mo:e biti < ili $7 bitni re istar odnosno bajt ili rije memorije. 'ru o o ranienje je da odredi#te mora biti vee od izvora. ,>eina instrukcija za*tijeva da su izvor i odredi#te iste veliine.33. Instruk-ija 7&G Instrukcija 3.T ne ira svoj operand raunajui nje ov dru i komplement. 3jen operand mo:e biti <)bit, $7)bit, ili +&)bit re ister ili memorijska lokacija. 3#. Instruk-ija 7O4 3!% operacija je unarna operacija ,tj. ona radi nad jednim operandom, ne nad dva kao binarne operacije poput /3' -. Primjer:
mov aG, 5C$&+W not aG S aG I +.'CW

(oava se da 3!% eneri#e prvi komplement. Ca razliku od dru i* bit operacija instrukcija 3!% ne mijenja sadr:aj niti jedno bita u re istru =;/TS. 3*. Instruk-ija OR (kljuivo !R dva bita je 5 ako i samo ako su oba bita 5, inae je rezultat $. Primjer:
mov aG, 5C$&+W or aG, 5.<+$W S aG I .`++W

3/. Instruk-ija OU4 'akle, koja to ma#inska instrukcija #tampa slovo na ekranuL Po led na tablicu Pentium) ovi* instrukcija ne otkriva nikakvu specijalnu instrukciju. (mjesto to a, uoava se instrukcija !(%. !ne imaju sljedee oblike:
out osmobitniPbrojPporta, al in al, osmobitniPbrojPporta out osmobitniPbrojPporta, aG in aG, osmobitniPbrojPporta out osmobitniPbrojPporta, eaG in eaG, osmobitniPbrojPporta out dG, al in al,dG out dG, aG in aG,dG out dG, eaG in eaG,dG

Svaki periferijski ure6aj ima neki dodijeljeni broj, koji se zove port. Instrukcija !(% #alje podatak periferijskom ure6aju i ima dva parametra. Prvi parametar predstavlja port ure6aja kome #aljemo podatak, a dru i predstavlja re istar u kome se nalazi sam podatak. 30. Instruk-ija POP

Instrukcija P!P ita duplu rije na E.SPF i zatim dodaje 0 na .SP. .vo primjera kako ova instrukcija radi, koji pretpostavlja da je .SP inicijalno $555W.
pop eaG pop ebG pop ecG S ./9 I +, .SP I 5==<* S .89 I &, .SP I 5==C* S .C9 I $, .SP I $555*

Stek se mo:e koristiti kao po odno mjesto za privremeno uvanje podataka. %ako6er se koristi za realizaciju poziva potpro rama, proslje6ivanje parametara i lokalni* varijabli. 3a <5G<7 postoji i P(SW/ instrukcija koja smje#ta vrijednosti na stek re istara ./9, .89, .C9, .'9, .SI, .'I i .8P re istri ,ne u ovom redoslijedu-. Instrukcija P!P/ se mo:e koristiti da i* pokupi sve sa steka . 3aredbe P(SW, P!P, P(SW/ i P!P/ imaju i #esnaestbitne verzije, ali se one ne koriste u tridesetdvobitnim operativnim sistemima. 31. Instruk-ija PUSH Instrukcija P(SW ubacuje rije ili duplu rije na stek, oduzimajui 0 od re istra .SP i zatim smje#ta duplu rije na adresu E.SPF. .vo primjera kako ova instrukcija radi, koji pretpostavlja da je .SP inicijalno $555W.
pus* dOord $ pus* dOord & pus* dOord + S $ na adresi 5==C*, .SP I 5==C* S & na adresi 5==<*, .SP I 5==<* S + na adresi 5==0*, .SP I 5==0*

Stek se mo:e koristiti kao po odno mjesto za privremeno uvanje podataka. %ako6er se koristi za realizaciju poziva potpro rama, proslje6ivanje parametara i lokalni* varijabli. 3a <5G<7 postoji i P(SW/ instrukcija koja smje#ta vrijednosti na stek re istara ./9, .89, .C9, .'9, .SI, .'I i .8P re istri ,ne u ovom redoslijedu-. Instrukcija P!P/ se mo:e koristiti da i* pokupi sve sa steka . 3aredbe P(SW, P!P, P(SW/ i P!P/ imaju i #esnaestbitne verzije, ali se one ne koriste u tridesetdvobitnim operativnim sistemima. 38. Instruk-ija RCB Postoje dvije dodatne instrukcije rotiranja koje pomjeraju bitove u podacima i carrN indikatoru zvane RC; and RCR. 3a primjer, ako se rotira re istar /9 ovim instrukcijama, rotira se $A bita sastavljeni* od /9 i carrN indikatora.
mov aG, 5C$&+W clc S obrisi carrN indikator ,C= I 5rcl aG, $ S aG I <&07W, C= I $ rcl aG, $ S aG I 50<'W, C= I $ rcl aG, $ S aG I 5`$8W, C= I 5

#;. Instruk-ija R&4 . Instrukcija R.% uzima adresu sa steka i skae na ovu adresu. Prilikom upotrebe ovi* instrukcija va:no je manipulisati s stekom korektno da bi se prava vrijednost preuzela R.% instrukcijomK (potreba instrukcija C/;; i R.% omo uava nije:6enje

potpro rama. 3eka, na primjer potpro ram etPint poziva readPint. !vaj poziv smje#ta na stek adresu iza instrukcije C/;; readPint. 3a kraju koda potpro rama readPint se nalazi R.% koji preuzima povratnu adresu i ponovo skae u kod od potpro rama etPint. !nda, kada se izvr#i instrukcija R.% potpro rama etPint, ona preuzima povratnu adresu pa se ponovo skae u lavni pro ram. !vo radi zbo ;I=! ,;ast In =irst !utsvojstva steka. >rlo je va:no pokupiti sve podatke koji su smje#teni na stek. #1. Instruk-ija ROB! ROR Instrukcije rotiranja rade kao instrukcije lo iko pomijeranja, osim #to se bitovi koji bi bili iz ubljeni na jednoj strani ubacuju na dru u. %ako se podaci kreiraju kao cirkularna struktura. 'vije najprostije instrukcije rotiranja su R!; i R!R koje obavljaju rotiranja u lijevo i desno. 8a# kao i ostala pomijeranja, ova pomijeranja ostavljaju kopiju zadnje kopirano bita u carrN indikator.
mov aG, 5C$&+W rol aG, $ rol aG, $ rol aG, $ ror aG, & ror aG, $ S aG I <&0AW, C= I $ S aG I 50<=W, C= I $ S aG I 5`$.W, C= I 5 S aG I <&0AW, C= I $ S aG I C$&+W, C= I $

#2. Instruk-ija S'B! S'R !ve instrukcije pomijeranja su dizajnirane da omo ue predznaenim brojevima da budu brzo pomno:eni ili podijeljeni stepenima broja &. %o osi urava da se bit predznaka korektno tretira. S/; S*ift /rit*metic ;eft D !va instrukcija je samo sinonim za SW;. !na se prevodi u doslovno isti ma#inski kod kao i SW;. Sve dok se bit predznaka ne mijenja pomijeranjem, rezultat e biti korektan. S/R S*ift /rit*metic Ri *t D !vo je instrukcija koja ne pomjera bit predznaka ,najznaajniji bit- svo operanda. 'ru i bitovi su pomjereni kao i normalno, osim #to su novi biti koji dolaze s lijeve strane kopija bita predznaka ,tj. /ko je bit predznaka jednak $, novi biti su tako6e $-. %ako, ako se bit pomjera ovom instrukcijom, samo donji* A bita se pomjera. 4ao i sa dru im pomijeranjima, zadnji pomjereni bit se smje#ta u carrN indikator.
mov aG, 5C$&+W sal aG, $ S aG I <&07W, C= I $ sal aG, $ S aG I 50<CW, C= I $ sar aG, & S aG I 5$&+W, C= I 5

#3. Instruk-ija S&4&! S&47& S.%.: postavlja odredisni operand na $ ako su vrijednosti koje su bile poredjene jednake, tj. /ko je C= I $. /ko je C= I 5, onda postavlja odredisni operand na 5. S.%3.: postavlja odredisni operand $ ako su vrijednosti koje su bile poredjene razlicite, tj. /ko je C= I 5. /ko je C= I $, onda postavlja odredisni operand na $.

##. Instruk-ija (CHG Razmjenjuje vrijednosti operanada. !perandi mo u biti ili & re istra ili jedan re istar I jedna memorijska lokacija. 1o u biti I $7bitni I +&bitni re istri. #*. Instruk-ija (OR Iskljuivo 9!R dva bita je 5 ako i samo ako su oba bita jednaka u protivnom je rezultat $. Primjer:
mov aG, 5C$&+W Gor aG, 5.<+$W S aG I &`$&W

III DIO 1. Razlika I primjeri memorijski mapirani< I UII mapirani< ure?aja (re6aji kojima se pristupa koristei I3 i !(% instrukcije se zovu ulaznoHizlazno ,(HI mapirani ure6aji-. 3e pristupa se svakom ure6aju na niskom nivou na ovaj nain, uz pomo I3 i !(% instrukcija. Capravo, ako se po ledaju skupovi instrukcija mikroprocesora kao #to je 1otorola 7<555 ili neki* RISC procesora, nee se nai ovakve instrukcije. (mjesto to a, ovi procesori ,a i <5G<7 kod neki* periferijski* ure6aja kao #to je ekran- koriste memorijski mapirane ure6aje. 4od ovakvi* ure6aja, memorijski ipovi na odre6enim adresama se zamijene ure6ajem koji rea uje na upis ili itanje date lokacije. 3a ovaj nain se pristupa periferijskim ure6ajima koristei obine 1!> instrukcije. Prednost (HI mapirani* periferijski* ure6aja je #to ne tro#e adresni prostor koji bi se mo ao puniti memorijskim ipovima ,na <5<7 70 kilobajta je znaajan procenat adresno prostora on jedno me abajta- I #to je u pro ramima lak#e izdvojiti instrukcije koje rade s perifernim ure6ajima. Prednost memorijski mapirani* periferijski* ure6aja je #to mo u koristiti sve adresne re:ime instrukcija koje se koriste i za pristup memoriji, a mo ue im je pristupiti i iz C pro rama bez pisanja asemblerski* rutina. 2. 4eJtualna %ideo memorija! or aniza-ija '!S pro rameri ,u realnom re:imu- veoma esto pristupaju direktno u video memoriju. 3a primjer, ako se raunar nalazi u tekstualnom re:imu rada, i ako je re istar 'S postavljen na vrijednost 58<55* i izmijeni vrijednost na adresi 5555 u 0$*, primjetie se da se slovo / ispisalo na ekranu u ornjem lijevom u lu. 8roj 0$* je /SCII kod slova. !vo jo# uvijek radi pod svim '!S pro ramima kada se izvr#avaju na MindoOs ma#inama ,osim MindoOs 9PH>ista 70 bit edition koji nisu vi#e '!S kompatibilni-. Svaki znak u tekstualnom re:imu zauzima dva bajta, jedan za /SCII kod, a dru i za oznaku boje. !znaka boje je podijeljena u dva nibla, ni:a 0 bita predstavljaju boju samo znaka, a vi#a etiri bita predstavljaju boju pozadine. 'a bi se promijenio znak na poziciji 9,] , dje je pozicija 5,5 ornji lijevi u ao ekrana- prosto se mijenja bajt na adresi , ako je 'S na 58<55*-

9?&@]?$75 !va formula je va:ea ako je ekran #irok <5 znakova. /li ako je #irok 05 znakova, formula bi bila 9?&@]?<5. 3. Upotre+a CriteConsole ,unk-ije Postoje dvije sistemske funkcije bitne za ispis teksta na konzolnom ekranu: TetStdWandle I MriteConsole/. !ne su locirane u kernel+&.dll, i oekuju parametre na steku. /ko se na stek smjesti vrijednost )$$ prije poziva funkcije TetStdWandle ova funkcija e vratiti vrijednost koja predstavlja oznaku konzole u re istru ./9. =unkcija MriteConsole/, prikazuje tekst na konzoli i oekuje redom pet parametara na steku, jednu nulu, adresu lokacije na koju e biti primljen broj ispisani* znakova, broj znakova koje treba ispisati, adresu same poruke koja se ispisuje i na kraju oznaku konzole ,*andle-. !ve funkcije se mo u pozvati i iz asemblersko pro rama i iz C)a. Primjeuje se, me6utim, da ime funkcije koje se poziva iz asemblersko jezika ima dva dodatka, podvlaujuu crticu ispred imena i broj bajtova koje one za*tijevaju na steku naveden iza ampersand ,a- znaka. ( jeziku C, ti* dodataka nema. #. $oja su # osno%na dijela CindoKs 'PI pro rama E3e znam sta bi ovo pitanje trebalo da znaci... /ko je u pitanju samo pro ram koji koristi MI3 /PI, onda on se moze sastojati od samo main)a i jedno poziva funkcije, tako da ni nema sanse da ima 0 dijela :HF /ko je u pitanju event driven T(I aplikacija, onda bi to mo lo biti: Cin2ain ,unk-ija unutar koje se nalazi petlja poruka ,event loop, messa e dispatc*erkoja preusmjerava poruku na od ovarajucu prozorsku proceduru ,C'BB"'C$- koja obradjuje poruku ispitujuci koja je poruka proslijedjena. !bavezno mora imati Lin-lude MKindoKs.<N *. 4ipi@ni iz led petlje poruka O*ile ,Tet1essa e,Jms , 3(;;, 5, 5-- b %ranslate1essa e,Jms -S 'ispatc*1essa e,Jms -S c /. 4ipi@ni iz led prozorske pro-edure int C/;;8/C4 MndProc,WM3' *Ond, (I3% i1s , MP/R/1 OParam, ;P/R/1 lParam- b sOitc* ,i1s - b case M1P'.S%R!]: PostQuit1essa e,5-S breakS case d. .. .. default:

return 'efMindoOProc,*Ond, i1s , OParam, lParam-S c c 0. =ta radi Re isterClass 4ada je prozorska klasa definisana, ona se re istruje, #to se ini proslje6ivanjem reference na klasu JOndclass funkciji Re isterClass. 3akon #to je klasa re istrovana, mo:e se koristiti tekstualno ime klase radi kreiranja instance prozora koji pripada ovoj klasi. 1. $ako se kreira I prikazuje prozor u CindoKsu Prozor se kreira pozivom funkcije CreateMindoO. Prvi ar ument koji CreateMindoO uzima je tekstualno ime prozorske klase. 'ru i ar ument je naslov prozora ) strin koji se pojavljuje na vr*u prozora. %rei ar ument je stil prozora, vrijednost ) MSP!>.R;/PP.'MI3'!M D se odnosi na standardni prozor sa okvirom i osnovnim menijem. Betiri broja 5, 5, &55, &55 specificiraju G i N koordinate , ornje lijevo u la- i #irinu i visinu prozora. Preostali ar umenti predstavljaju oznaku roditeljsko prozora ,u ovom sluaju prazno-, oznaku menija ,trenutno prazno-, oznaku samo pro rama ,*Instance kako je dodijelio operativni sistem i proslijedio ka Min1ain-, i tzv. Podaci o kreiranju, koji se ne koriste u jednostavnijim primjerima. CreateMindoO funkcija vraa oznaku novokreirano prozora ,*andle-. 3akon #to je prozor kreiran na ovakav nain, blok memorije je alociran za prozor. /li prozor nije jo# vidljiv na ekranu. Ca prikaz prozora na ekranu koriste se dvije dru e funkcije, S*oOMindoO I (pdateMindoO. !ve funkcije nose oznaku prozora kao parametar, S*oOMindoO funkcija ima dru i ar ument koji specificira re:im ekrana ,normalni prozor, minimizirani ili maksimizirani- #to obino koristi iCmdS*oO parametar proslije6en Min1ain funkciji. (pdateMindoO #alje M1PP/I3% poruku direktno prozorskoj proceduri, forsira prozor da se odma* crta ,bez nje e M1PP/I3% poruka biti smje#tena u red ekanja, pa crtanje mo:e u nekim pro ramima biti zaka#njelo-. 8. Ulo a poruke C2OP'I74 M1PP/I3% poruka se #alje prozoru kada je potrebno a iscrtati. ,na primjer prilikom prvo kreiranja ili ako a je neki dru i prozor prekrio-. Prvo se poziva 8e inPaint. !va funkcija vraa kontekst ure6aja pridru:en uz prozor. Sve funkcije za crtanje kao parametar ne tra:e oznaku prozora, ne o konteksta ure6aja. Razlo je #to to omo uava upotrebu isti* funkcija za crtanje i na onome #to nije unutra#njost prozor ,papir #tampaa, desktop, okvir prozora-. Prvi ar ument funkcije 8e inPaint je oznaka prozora, a dru i ) Jps D je referenca na P/I3%S%R(C% strukturu. 3eki pro rami iz ove strukture mo u saznati vi#e o samom prozoru, ali u ovom primjeru te informacije nisu potrebne. 1;. 7a@ini komunika-ije s tastaturom na niskom ni%ou

I81 je koristio veoma jednostavan dizajn tastature na ori inalnim PC raunarima, ali je redizajnirao interfejs izme6u raunara i tastature, poev#i od I81 PCH/%, i ovaj standard se prati i danas, promijenjen je u me6uvremenu samo oblik prikljuka. Princip rada I81 /% tastature se zasniva na dva mikrokontrolera, jedan na matinoj ploi raunara, a dru i unutar kui#ta tastature. Slanje komandi kontroleru na matinoj ploi se obavlja slanjem na port 70*e a komandi kontroleru na samoj tastaturi se obavlja slanjem na port 75*. Slino, status kontrolera na matinoj ploi se dobija itanjem s porta 70*, a itanje samo tastera se dobija itanjem porta 75*. 1ana ovo pristupa je postala uoljiva im je prvi PC prodan izvan /merike. Razliite zemlje su navikle na razliite rasporede tastera ,najbolji primjer je polo:aj tastera C na na#oj i en leskoj tastaturi-, a rutina vraa vrijednost tastera koja je fiksna, bez obzira na jezik. 'ru a mana je #to ovakvo oitavanje tastature oduzima procesorsko vrijeme. Sto a je razvijen sistem da pritisak na taster poziva potpro ram ,o tome u po lavlju o interaptima- i zatim se oznaka tastera zapamti, prevede u od ovarajue slovo prema izboru tastature i pro ram nastavi. Prema pravilima operativno sistema se kasnije oitavaju tako zapameni tasteri. 11. BinuJ pozi% Krite PsQsOKriteR Orite pise u file: ssize_t write(int fildes, const void *buf, size_t nbyte); Pise nbNte bNtea iz buffera na ciji pocetak pokazuje buf u file ciji je file descriptor fildes. sNsPOrite je sistemski poziv za ovu funkciju. 12. Ulo a poruke C2O$&SDOC7 Postoje dva osnovna tipa tastaturni* poruka. %astatura se mo:e posmatrati kao skup tastera ili kao ure6aj koji #alje slova. 4ada se pritisne taster, MindoOs #alje poruku M1P4.]'!M3 prozoru kada se taster pritisnuo. Prilikom otpu#tanja tastera, MindoOs #alje poruku M1P4.](P. Pored ovo a, funkcija %ranslate1essa e konvertuje ove poruke u poruke M1PCW/R, uz koju se dobija i slovna oznaka tastera. !znaka tastera, fizika ,za M1P4.]'!M3, M1P4.](P, koja se zove i Scan code-, odnosno slovna ,za M1PCW/R- nalazi se u Oparam dijelu poruke. 13. 7a@in komunika-ije s diskom na niskom ni%ou =loppN diskovi, I'. *ard diskovi, SCSI diskovi i (S8 diskovi imaju dosta razliite principe pristupa, iako interna or anizacija mo:e biti dosta slina. Svi oni imaju slo:ena inte rirana kola na njima ili matinoj ploi raunara koji se zovu disk kontroleri. 3a modernim diskovima oni su esto kompleksniji od centralni* procesora kori#teni* u pret*odnim odinama. Prilikom otvaranja *ard diska primjeuje se da se on sastoji od razliiti* povr#ina i lava. Svaka povr#ina je lo iki podijeljena na staze ,kru:na putanja-, a staze su podijeljene na sektore. Skup isti* staza na svim putanjama se zove cilindar. 8ez operativno sistema mo ue je pristupiti podacima samo direktnim pristupom stazama I sektorima. Svaki disk interfejs, pa ak i razliiti diskovi na istom interfejsu ima svoj skup portova za upravljanje kontrolerom. 3a primjer, najpopularniji sluaj, prvi I'. *ard disk koristi portove izme6u 5$f5* i 5$=$*.

4ao i kod ostali* periferijski* ure6aja, direktni pristup je nu:no zlo, i koristi se prilikom pravljenja operativno sistema. !vdje je razliitost izme6u vrsta diskova samo jedan od problema. Pristup direktno sektorima onemo uava posjedovanje pro rama koji sluajno koriste isti dio diska. 3a primjer, ako imamo dva pro rama koji su napisani da direktno pi#u u isti sektor, oni se ne mo u koristiti jer e pokretanjem jedno pro rama, podaci potrebni u dru om pro ramu e biti obrisani. "asno je da je nivo #tete iz ovo daleko vei od pisanja u tu6i prozor na ekranu ili ovisnost rutine za tastaturu od jezika. Sto a, svi operativni sistemi, pa i oni najtrivijalniji imaju koncept datoteka. 'atoteke omo uavaju uvanje podataka pod jedinstvenim imenom. 1#. CindoKs 'PI ,unk-ija ReadEile 4ada se dobila oznaka datoteke uz pomo Create=ile, dalje se mo:e koristiti ta oznaka u funkcijama Read=ile,- i Mrite=ile,-. !stali parametri za Read=ile,- i Mrite=ile,predstavljaju bafer za smje#tanje podataka, broj bajtova koji se ita ili pi#e, pokaziva na 'M!R' vrijednost u koju se smje#ta broj uspje#no upisani* ili proitani* bajtova. 3avodi se i pokaziva na strukturu !>.R;/PP.' koja omo uava da se prijenos podataka izme6u memorije i diska obavlja bez zaustavljanja rada pro rama. /ko se :eli da pro ram saeka prijenos podataka, za ovaj parametar se proslje6uje 3(;;. !ve funkcije vraaju %R(. ili =/;S. koje indiciraju da li se operacija uspje#no obavila. 1*. Razlika izme?u 3 %rste prekida Wardverski interapti dolaze od fiziki* ure6aja u ma#ini. 3a primjer, kada se od pojavi bajt koji dolazi sa komunikacijsko porta, aktivira se *ardverski interapt broj 58 ili 5C. 4ada se zavr#i ulaznoHizlazna operacija, tako6er se pokree *ardverski interapt. !vo znai da kada se na primjer pritisne taster na tastaturi, kontroler tastature po#alje IRQ$ kontroleru interapta, a onda se natjera procesor da izvr#i instrukciju I3% 5`. !vo e pozvati od ovarajui potpro ram koji smje#ta pritisnuti taster u red neoitani* tastera. Softverski interapti se de#avaju eksplicitnim pozivom I3% nn instrukcije iz aplikacije. /plikacije tipino koriste ovaj me*anizam da dobiju razliite uslu e operativno sistema. ( operativnom sistemu '!S softverski interapti su bili izuzetno znaajni. Sav pristup disku, tastaturi, ekranu za dobro napisane pro rame je bio kori#tenjem neke I3% nn instrukcije. 3aje#e kori#tene su I3% $5* ,video servisi-, I3% $+* ,direktni pristup disku-, I3% $0* ,komunikacijski urePaju-, I3% $7* ,tastatura-, I3% $A* ,funkcije #tampaa-, I3% &$* ,'!S funkcije-, I3% &A* ,instaliranje drajvera i ostali* pro rama koji ostaju u memoriji-, I3% ++* ,funkcije mi#a-. Prije poziva se obino u /W re istar stavi vrijednost koja oznaava podfunkciju, a u ostale re istre dodatni parametri. Izuzeci ,eGceptions- se do a6aju unutar normalni* instrukcija procesora ako je neki do a6aj neuobiajen. "edan takav primjer je unutar 'I> instrukcije ako se dijeli sa nulom. (mjesto uvanja netano rezultata, tada procesor izvr#i I3% 5. 'ru i primjer je pristup memorijskoj lokaciji koja je izvan dopu#teno podruja. ( ovom sluaju procesor skae na potpro ram koji mo:e da prekine lavni pro ram ,poku#aj ometanja dru o pro rama- ili pro lasi lokaciju dopu#tenim podrujem i eventualno uita njen sadr:aj sa

diska. Primjer izuzetka je i izvr#avanje instrukcije koja ne postoji. %ada se u okviru potpro rama koji procesor izvr#i omo ui izvr#avanje ekvivalentno pro ramsko koda ,naravno sporije-. %ipian primjer je izvr#avanje instrukcija koprocesora na <5+<7. 1/. $ako pro-essor ra@una adresu prekidne rutine u realnom I zatiTenom re.imu ( za#tienom re:imu rada, interapti se obra6uju na slian nain kao u realnom re:imu. %ablica prekidni* deskriptora ,Interrupt 'escriptor %able ) I'%- radi u principu ono #to I>% radi u realnom re:imu. I'% je niz <)bajtni* deskriptora se menta koji se zovu kapije , ates-. Interrupt 'escriptor %able Re ister ,I'%R- sadr:i adresu i limit I'%. I'% mora postojati u fizikoj memoriji i nikada ne smije se prebaciti u virtualnu memoriju. .lementi ove tabele mo u biti tri tipa, interapt kapije, trap kapije i task kapije. !vdje e biti spomenute interapt kapije. ( okviru nji* se nalazi vrijednost kodno se menta i pozicije u okviru nje a za izvr#enje ovo prekida, kao i nivo privile ije prekidno deskriptora. 4ada se desi prekid, na6e se pozicija u I'%, sauvaju na steku .=;/TS, CS, i .IP i pozove adresa rutine navedena u I'%. Po zavr#etku rutine, treba izvesti IR.% instrukciju za povratak kontroli. Cavisno od tipa prekida, oznaka re#ke se mo:e smjestiti na stek. Polje 'P; u interapt kapiji kontroli#e softverske interapte. %renutni nivo prava aplikacije mora biti najmanje jednak vrijednosti 'P; da bi se ovi softverski interapti mo li pozvati. /ko nije, tada se poziva Teneral Protection =ault. !vo omo uava operativnom sistemu da odre6ene softverske interapte zadr:i za sebe. Wardverski interapti i izuzeci se izvr#avaju bez obzira na trenutni nivo privile ije. 10. =ta tipi@no radi rutina za o+radu prekida Rutine koje se izvr#avaju za obradu *ardverski* prekida treba da budu brze, kratke i si urne. !ne se esto pi#u u asembleru, mada i jezici visoko nivoa kao #to je C su tako6er popularni. 3a modernim operativnim sistemima rutine za obradu prekida su sastavni dio drajvera periferijski* ure6aja. 3akon #to se desi prekid, CP( nastavlja pro ram u podruju memorije predvi6enom za operativni sistem u sluaju MindoOsa ili ;inuGa, odnosno u dru i se ment u sluaju '!Sa. 'obro napisana prekidna rutina obino radi sljedee: P Sauva sve re istre na stek ili neko dru o privatno memorijsko podruje P !dradi lavni dio rutine P Po#alje ipu kontrolera interapta ,na port &5* ili 5/*- vrijednost &5* ) .nd!fInterrupt P >rati re istre sa steka P >rati se iz potpro rama koristei instrukciju IR.% /ko je cilj lavne rutine da prima podatke sa ulazno ure6aja, nije preporuljivo da se previ#e vremena provede unutar rutine za obradu prekida. 8olje je samo podatke ne dje zapamtiti, a nji*ovu obradu prepustiti pro ramima izvan ove rutine, kako bi se vi#e vremena ostavilo korisnikim pro ramima. 11. >a 'PI ,unk-iju C<e-kDl "utton odredite DBB kome pripada
User32.dll

18. >a 'PI ,unk-iju SetPiJel odredite DBB kome pripada

Gdi32.dll

2;. >a 'PI ,unk-iju CreateEile odredite DBB kome pripada


Kernel32.dll

I3 DIO 1. Razlika izmedu prolaza i ,aze kompila-ije =aza kompilacije nije isto #to i prolaz. 8roj prolaza ovori koliko puta kompajler mora itati isti dio datoteke s izvornim pro ramom ,ili njene kopije u memoriji-. =aza se odnosi na razliite akcije koje se de#avaju nad ovim dijelom izvorno pro rama. Cavisno od kompleksnosti kompajlera, sama kompilacija se mo:e podijeliti u vi#e faza. =aze se dijele na povr#inske i pozadinske. Povr#inske faze su vezane vi#e za izvorni jezik i to su predprocesiranje, leksika analiza, sintaksna analiza ,parsiranje- i semantika analiza. Pozadinske faze su vi#e vezane za odredi#ni jezik i to su kompajlerska analiza, optimizacija i enerisanje koda. 2. =ta se radi u leksi-koj a ta u sintaksnoj analizi ;eksika analiza razbija izvorni kod u male komade koji se zovu tokeni. Svaki token je atomski dio jezika, na primjer kljuna rije, identifikator ili ime simbola. Sintaksa tokena je re ularni jezik, pa se mo:e kreirati konani automat za nji*ovo prepoznavanje. 'ru i naziv za ovu fazu je skaniranje, pa se ovaj dio kompajlera zove leksiki analizator ili skaner. Parsiranje ili sintaksna analiza je proces analize ulazne sekvence ,itanje iz datoteke ili tastature- da se odredi da li se ramatka struktura sla:e s od ovarajom formalnom ramatikom. 'io kompajlera koji obavlja ovu fazu se zove parser ili sintaksni analizator. Postoje dva osnovna metoda sintaksne analize, ;; I ;R metod. 3. Razlika izmedu BB i BR parsiranja Postoje dva popularna al oritma za sintaksnu analizu, ili parsiranje. "edan je baziran na principu fodoz o na doljeX. 4ompajler kree od najkompleksnije jedinice ,na primjer pro ram- i oekuje lavne elemente ove jedinice. 3a primjer, pro ram u Pascalu mora poeti simbolomXpro ramY praenim imenom pro rama i taka)zarezom. 3akon taka) zareza mo:e se nai jedna od kljuni* rijei: XvarY, XtNpeY, XconstY, XlabelY, Xbe inY. /ko se prepozna kljuna rije XvarY, to znai da slijedi deklaracija varijabli i da se sada identifikator varijable oekuje, praen simbolima X,Y ili X:Y. !vaj proces se mo:e nastaviti sve dok se ne dosti ne kraj pro rama ili do6e do situacije da je proitan neoekivani simbol, #to rezultuje sintaksnom re#kom. !vakav al oritam je po odan za runo pisane kompajlere i obino se naziva ;; ili Recursive descent. !n se naje#e realizuje potpro ramima koji implementiraju sintaksne elemente. 'ru a varijanta je da se preuzme simbol i on poredi s najjednostavnijim sintaksnim elementom. 3a primjer, kada se preuzme simbol 220, on se prepozna kao numerika konstanta. Sintaksni analizator je

sada u stanju fprepoznata numerika konstanta /li, numerika konstanta je ujedno i numeriki izraz, pa je sintaksni analizator je sada u stanju fprepoznat numeriPki izrazX. /ko iza slijedi simbol X@Y sada je sintaksni analizator u stanju fnumeriki izraz praen znakom @X. 3aiPe li nova numerika konstanta, mo:e se vratiti u stanje fprepoznat numeriki izrazX ,jer je zbir numeriki* izraza numeriPki izraz-, ali ako naie , npr, simbol XgY prelazi se u stanje re#ke. !vaj nain parsiranja se zove ;R. !n se realizuje uz pomo specijalni* tablica koje su enerirali posebni pro rami, parser eneratori ,najpoznatiji se zove ]acc-. ;R omo uava realizaciju parsiranja neki* jezika koji se ne mo u realizovati preko ;; al oritma. ;; parseri su br:i, razumljiviji i savr#eno prepoznaju prvu re#ku. ;R parseri esto rije#e u prepoznavanju prve re#ke, ali bolje prepoznaju ostale re#ke u odnosu na ;;. 3eke jezike koje je mo ue parsirati ;R parserima nije mo ue parsirati ;; parserima, dok se svaki jezik koji se mo:e parsirati ;; parserom mo:e parsirati i ;; parserom. #. Ulo a operatora U V L WX u EIBD>'7 32 [ \ ^ :I >ee 1anje Razliito 'odjeljivanje

*. $ako razlikujemo lokalnu! lo+alnu! karakter pointer i ,unk-iju u EIBD>'7 32 Postoje lobalne, lokalne i parametarske varijable. Radi lak#e raspoznavanja imena varijabli poinju malim slovom, imena lokalni* varijabli poinju slovom flX , imena parametara slovom fpX. Sve varijable su +&)bitni cijeli brojevi. %a vrijednost mo:e uvati i pokazivae. /ko ime varijable poinje slovom c ona je lobalna i ujedno pokaziva na niz znakova. /ko ime varijable poinje ostalim malim slovima, ona je lobalna. (vo6enje vrijednosti varijable kao pokazivaa omo uava laku realizaciju nizova. /. 7a koji na-in se posti.e prioritet operatora u EIBD>'7 32 kompajleru Razliiti nivoi prioriteta koji se nalaze unutar izraza mo u se lako realizovati uz pomo rekurzivni* funkcija, koji* treba da bude koliko i nivoa prioriteta. !peratori s najvi#im prioritetom se nalaze u sintaksnom elementu i funkciji =aktor . ( ovoj funkciji se najprije provjeri da li je naredni simbol unarni operator. /ko jeste, funkcija =aktor poziva samu sebe, a onda se emituje od ovarajua instrukcija koja smje#ta korektnu vrijednost u re istar ./9. (nutar funkcije Clan vidi se da ona prvo poziva =aktor. Catim se vidi da li slijedi neki od operatora mno:enja, dijeljenja ili ostatka pri dijeljenju. /ko slijedi, eneri#e se P(SW ./9 jer se ./9 mora sauvati na steku, po#to e se ponovo pozivati =aktor za dobivanje dru o faktora u izrazu koji tako6er eneri#e instrukcije koje me6urezultat vraaju u re istru ./9. 3akon poziva dru o faktora, eneri#u se instrukcije da se vrijednost zapamena na steku vrati sa steka i dobije u re istru .89. Sada se jedan faktor

nalazi u ./9, a dru i u .89, te se eneri#u od ovarajue instrukcije mno:enja ili dijeljenja. Slino, Izraz se sastoji od lanova razdvojeni* operatorima sabiranja, oduzimanja, konjunkcije, disjunkcije ili ekskluzivne disjunkcije. I ovdje se prvo pozove Clan, provjeri ima li oekivano operatora, pa ako ima eneri#e P(SW ./9, ponovo pozove Clan, eneri#e P!P instrukcija da se jedan ar ument nalazi u ./9, a dru i u .89, i eneri#e instrukcija koja obavlja operaciju !peratori dodjeljivanja i relacioni operatori su na najni:em prioritetu, u okviru procedure Izraz'odjeljivanja. 0. $ako je realizo%ana kontrolna struktura YdokY Pro ramske strukture : ako ) inace, dok i asembler . 3aredbe akoHinace i dok su ekvivalentne naredbama ifHelse i O*ile u pro ramskom jeziku C, osim #to su za rade XbcY obavezne za pro ramski kod, ali za rade X, -Y za uslovni izraz nisu neop*odne. /semblerska sekvenca poinje kljunom rijeju assembler i zavr#avaju simbolom XhY . ;inije izme6u su u asemblerskom jeziku, tako da se mo u prevesti asemblerom 3/S1. 1. $ako je realizo%ana kontrolna struktura YakoY Pro ramske strukture : ako ) inace, dok i asembler . 3aredbe akoHinace i dok su ekvivalentne naredbama ifHelse i O*ile u pro ramskom jeziku C, osim #to su za rade XbcY obavezne za pro ramski kod, ali za rade X, -Y za uslovni izraz nisu neop*odne. /semblerska sekvenca poinje kljunom rijeju assembler i zavr#avaju simbolom XhY . ;inije izme6u su u asemblerskom jeziku, tako da se mo u prevesti asemblerom 3/S1. 8. >ato se parametri ,unk-ije u EIBD>'7 32 prosljeduju s 2O3 5&SP9nn6!&'( umjesto PUSH &'( Stek se koristi i za uvanje parametara funkcija. 4ori#tena je StdCall konvencija kako bi se pro rami lako mo li pro#iriti o romnim bla om koje pru:a Min+& /PI. 3o, radi lak#e realiziranja redoslijeda parametara na steku koji za*tijeva StdCall konvencija, parametri se ne smje#taju naredbom P(SW ./9 ne o 1!> E.SP@nnF,./9. 1;. Ulo a &'( i &"( re istara u enerisanom kodu u EIBD>'7 32 kompajleru Prilikom rauna aritmetiko izraza, trenutni me6urezultat ,i konani rezultat- se nalazi u re istru ./9, dok re istar .89 slu:i kako adresa podatka ,neop*odna za operatore ? i :I- i kao dru i ar ument prilikom aritmetiki* operacija. Svaki put kada se oekuje sintaksni element koji e pokvariti sadr:aj re istra, trenutna vrijednost re istra se uva na steku. !vo dovodi do dosta neoptimalno koda, jer e se podatak uvati na steku i kada se ne kvari nje ov sadr:aj, ali dodavanje optimizacije koda bi uinilo kompajler znatno veim i manje razumljivim.

11. =ta su to lije%o aso-ijati%ni! desno aso-ijati%ni i neaso-ijati%ni operatori !peratori dodjeljivanja i relacioni operatori su na najni:em prioritetu, u okviru procedure Izraz'odjeljivanja. >eina operatora su tzv. lijevo asocijativni. 3pr a?b?c znai da se a mno:i sa b, pa nakon to a taj proizvod mno:i sa c-. !perator dodjeljivanja mora biti tzv. desno asocijativan ,a:Ib:Ic mora dodijeliti varijablu c varijabli b a zatim varijablu b varijablu a-. Sto a se vi#estruko ponavljanje operatora dodjeljivanja ne realizuje O*ile petljom, ne o rekurzijom. Relacioni operatori imaju smisla samo s dva operanda, pa nisu asocijativni, dakle sa njima nema ni petlji ni rekurzije. !perator dodjeljivanja jeX:IY. Po#to je to operator od dva znaka, on se provjerava funkcijom Slijedi, nakon #to je prepoznat simbol X:Y. !perator dodjeljivanja eneri#e instrukcije koje smje#taju vrijednost re istra ./9 ,ili /; u sluaju upisa karaktera- na adresu na koju pokazuje .89. 12. $ojim redoslijedom linker spaja o+jektne datoteke u iz%rnu ;inkerov zadatak je da spoji !8" datoteke u jedinstvenu izvr#nu datoteku. Ipak, kada bi stvari bile tako jednostavne linker bi bio obiPni pro ram koji spaja omile podataka. 4omplikovani dio linkera je posao fiksiranja, o emu e biti rijei kasnije. 4ao i asembler i linker obavlja zadatak u dva prolaza. ( prvom prolazu linker sastavi skup pravila za povezivanje, a u dru om primjenjujui ta pravila upisuje izvr#nu datoteku. ;inker treba da stavi sav kod i podatke iz svake !8" datoteke u izvr#nu datoteku. /ko se linkeru proslijede tri !8" datoteke tada se kod i podaci iz sve tri !8" datoteke smje#ta u .9.. /li to se ne radi prostim lijepljenjem !8" datoteka jedne na kraj dru e. (mjesto to a linker spaja sve sekcije sa istim imenom u jedinstvenu. 3a primjer, tri !8" datoteke od koji* svaka ima jednu .teGt sekciju e se povezati u jedinstveni .9. sa jednom .teGt sekcijom, koja se sastoji od tri individualne .teGt sekcije kakve su bile u !8" datoteci. "edinstvena sekcija se formira spajanjem istoimeni* sekcija u redoslijedu kako je proslije6eno kroz parametre linkeru. 13. R&B32 i DIR32 popra%ka u linko%anju Popravka R.;+& znai da nova adresa treba da se upi#e relativno od adrese na kojoj se vr#i popravka. ( primjeru sa C/;; naredbom treba zamijeniti ove etiri nule popravkom R.;+&. (koliko su se ove nule nalazile na adresi $555, a nakon spajanja modula P!%PR!TR/1 upadne na adresu &2+5, umjesto nula upisuje se $2+5. Potpro ram se dakle poziva sa relativnom adresom i na taj nain je omo uena relokatibilnost. !vaj tip popravke se ne upisuje u izvr#nu datoteku. Popravka 'IR+& je predviPena za popravku apsolutni* adresa. Po ledati sljedei primjer. 1!> ./9,>RI".'3!S% >RI".'3!S% '' 0+++& 3eka se labela >RI".'3!S% nalazi na adresi 5555&.5+ /sembler e prevesti prvu instrukciju u apsolutnu adresiranje, npr. 8< 5+ &. 55 55. (ita li se pro ram na adresu 55755555, i instrukcija 1!> ./9 se mora mijenjati, na primjer

u 8< 5+ &. 05 55 jer je labela >RI".'3!S% sada na adresi 5575&.5+. 3ova vrijednost koju linker upi#e nakon 'IR+& popravke jednaka je zbiru podrazumijevane startne adrese pro rama i pret*odne vrijednosti koja se nalazila na adresi koja se popravlja. Podrazumijevana startna adresa je 55055555*, pa linker treba u na#em sluaju da primjeni sabiranje konstanti 55055555* I 5555&.5+* i upi#e adresu 5505&.5+*. MindoOsov loader e, ukoliko postoji .reloc sekcija, obaviti ovaj zadatak jo# jednom, ali samo ako se pro ram uitava na nepodrazumijevanu adresu. %ada se za svaki 'IR+& slo sabira vrijednost na adresi koju popravljamo sa razlikom izme6u podrazumijevane i stvarne adrese dje je pro ram uitan. 1#. $ada d%a pro rama koji koriste isti DBB dijele nje o% kod i podatke a kada ne Pro ramski kod unutar ';; se obino dijeli izme6u svi* procesa koji koriste taj ';;S tj. zauzima jedinstveno mjesto u fizikoj memoriji. S dru e strane, podaci unutar ';;)a su privatni. Svaka aplikacija koja pristupa podacima iz ';;)a ima razliitu kopiju ovi* podataka. %o znai da ako je jedna aplikacija postavila internu varijablu biblioteke na vrijednost $5, a dru a na vrijednost &5, i jedna i dru a aplikacija vide samo onu vrijednost te varijable koju je postavila,mada je mo ue to promijeniti da svi pro rami dijele i podatke unutar ';;, no to ima i ne ativnu stranu jer se tada smanjuje izolovanost izme6u pro rama #to predstavlja si urnosnu rupu-. Postoji, me6utim sluaj kada ';;ovi imaju odvojene kopije i koda, ne samo podataka. /ko je ';; kompajlirana tako da njene memorijske adrese dolaze u konflikt s memorijskim adresama dru i* ';; biblioteka u nekim aplikacijama tada MindoOs mora da relocira tu biblioteku na dru u adresu. %o je relativno spor proces i ponekad uzrok sporo startanja neki* aplikacija. 'a bi se taj proces ubrzao, 1icrosoft je za sve svoje ';; biblioteke odredio vlastite me6usobno razliite adrese 1*. Impli-itno i ekspli-itno po%ezi%anje DBB ';; datoteke se mo u eksplicitno uitati za vrijeme izvr#avanja lavno pro rama. %ada se koriste tipino tri sistemske funkcije. =unkcijom ;oad;ibrarN se uita biblioteka u memoriju, funkcijom TetProc/ddress se sazna poziciji simbola unutar biblioteke ,npr. na ovaj nain mo ue je nai poetnu adresu neko potpro rama unutar biblioteke-. 3a kraju se poziva =ree;ibrarN za brisanje ';;a iz memorije. 'ru i nain je implicitno povezivanje. ( samom .9. pro ramu je navedeno koje ';; biblioteke pro ram koristi, koje potpro rame iz nji* i na kojem mjestu. %ada MindoOs loader obavi svo potrebno uitavanje biblioteka, pronala:enje pozicija potpro rama i popravku izvr#no pro rama da pozivi potpro rama iz dinamiki uitane biblioteke budu usmjereni na pravo mjesto. 1/. $ako radi 2'$&

1ake je pro ram koji posmatra koji su pro rami potrebni za prevo6enje pojedini* datoteka i me6uzavisnost datoteka. /ko je neka datoteka sa izvornim promijenjena, njeno sistemsko vrijeme se tako6er promijeni. /ko su dru e datoteke navedene da zavise od nje, i one se navode da budu prevedene. /li one koje nisu mijenjane, niti ovise od promijenjeni*, nee biti posebno prevedene. 1e6usobna ovisnost se smje#ta u specijalnu datoteku koja se zove i1akefilei. 'atoteka makefile se sastoji od linija teksta koji defini#u datoteke ili imena pravila koja zavise od skupa datoteka. Izlazne datoteke se navedu da ovise od izvorni*. 3akon #to je navedena lista vrijednosti mo:e se navesti serija linija uvuena tabovima koja defini#e kako se izvorna datoteka transformi#e u izlaznu, ako je izvorna modifikovana kasnije od izlazne. !snovna struktura iz leda ovako
^ komentari iza znaka *as* cilj: uslovi komanda $ komanda & . . . komanda n

'atoteka makefile tako6er sadr:i i definicije varijabli i ukljuenje dru i* makefile datoteka. >arijable u makefile datoteci se mo u promijeniti ako se pro ramu make proslijede parametri u komandnoj liniji. 3a primjer, varijabla CC se koristi za navo6enje kompajlera i ovom varijablom se mo:e navesti alternativni kompajler. 10. D%oprolazni asem+ler! prin-ip rada ( prvome prolazu asembler pretra:uje tabelu simbola za svaki simbol i ako ne postoji ulaz u tabeli za dati simbol, ubacuje a. ( dru ome prolazu za svaki se element uzima nje ova referenca iz tabele simbola oformljena u prvome prolazu i razrje#ava definisana operacija. 11. Fednoprolazni asem+ler! prin-ip rada /sembliranje se mo:e obaviti i u jednom prolazu, mada nije najpraktinije. Prilikom prevo6enja, svako referenciranje na labelu koja jo# nije definisana se smje#ta u tablicu popravki. 8roja lokacija se uveava I kada se labela zaista defini#e, tada se njena vrijednost zna. Sada se pro6e kroz sve popravke, vrati na danu lokaciju enerisano koda na vrijednost koju treba popraviti i upi#e nova vrijednost labele. !vakvi asembleri su br:i, ali za*tijevaju vi#e memorije, nepraktini su za eksterne module i ne eneri#u najkrae instrukcije. 3a primjer, "1P instrukcija na Intel G<7 procesorima zauzima & do 2 bajtova zavisno od krajnje adrese. "ednoprolazni asembler pretpostavlja naj ori sluaj, pa uvijek eneri#e petobajtnu varijantu, premda nije neop*odno. 18. Razlika izmedu kompajlera i interpretera

Ca razliku od kompajlera, interpreteri ne prevode pro ram u klasini ma#inski kod, ne o a analiziraju I izvr#avaju od ovarajue potpro rame. %ipino treba vi#e vremena da se izvr#ava interpretirani pro ram, ne o da se izvr#ava kompajlirani, ali je ukupno vrijeme cijelo ciklusa potrebno za kompajliranje I izvr#avanje pro rama ponekad vee od vremena potrebno za izvr#avanja interpreterom. Sto a su interpreteri po odnija varijanta u razvojnoj fazi pro rama. Interpretiranje je sporije ne o izvr#avanje kompajlirano pro rama jer interpreter mora analizirati svaku naredbu u pro ramu pri svakom njenom izvr#avanju i pokrenuti akciju dok kompajlirani kod samo pokree akciju. Sporiji je i pristup varijablama, jer mapiranje identifikatora s lokacijama se mora stalno raditi u vrijeme izvr#avanja. Postoje i kompromisne varijante. 3eki interpreteri koriste kompaktniji format od /SCII izvorno koda koji se br:e analizira. Interpreteri mo u da uvaju pro ram u memoriji ili da a stalno itaju sa diska, kakav je sluaj sa interpreterima skripti. 2;. Ulo a sek-ije 2S DOS <eader i Real mode pro ram u &(& .9. pro ram u P. formatu poinje istim za lavljem kao i svaki 1S'!S pro ram. !vo za lavlje se prepoznaje slovima 1C na svom poetku. !no pokazuje na izvr#ni pro ram, koji je tipino izuzetno kratak. %aj pro ram samo ispi#e poruku i%*is pro ram cannot be run in '!S mode.i i zavr#i svoje izvr#enje. Svr*a ovo pro rama je da eventualni start MindoOs .9. pro rama pod operativnim sistemom 1S)'!S ne izazove kra*. Postoje, me6utim i pro rami koji imaju slo:eniji pro ram za izvr#enje u '!S re:imu rada, na primjer, mo ue je spojiti '!S i MindoOs verziju neko pro rama u jedinstveni pro ram. 21. Cemu slu.e sek-ije .teJt! .data! .rdata i .+ss u &(& pro ramu 1a#inske instrukcije pro rama smje#tene su u sekciju .teGt. Sekcija .teGt tako6er sadr:i ulaznu taku u pro ram. ( ovoj sekciji se nalazi i tablica uvezeni* adresa Import /ddress %able ,I/%- neposredno prije ulazne take. !va tablica je smje#tena u .teGt sekciju jer je ona serija jump instrukcija, dje je adresa na koju se skae fiksna. 4ada se MindoOs izvr#ni pro ram uita u adresni prostor procesa I/% se popravlja s lokacijama fiziki* adresa svake uvezene funkcije. 'a bi prona#ao I/% u .teGt sekciji, loader prosto locira ulaznu taku pro rama i zasniva se na injenici da se I/% nalazi odma* prije ulazne take. / po#to je svaki element iste veliine, lako je kretati se unazad po ovoj tabeli da se na6e njen poetak. Sekcija .bss predstavlja neinicijalizirane podatke, ukljuujui i statike varijable definisane unutar funkcije. Sekcija .rdata predstavlja podatke koji se samo itaju, kao #to su tekstualni strin ovi, konstante i neke debu informacije. Tlobalne varijable u pro ramima se smje#taju u sekciju .data. 22. =ta je to I'4 i dje se nalazi Po ledati pret*odno pitanjeKKK 23. 7a-in pozi%anja BinuJ sistemski< ,unk-ija iz asem+lera

8roj sistemsko poziva se smje#ta u ./9. /r umenti se smje#taju u re istre redom: .89, .C9, .'9, .SI, .'I i .8P. Pozove se I3% <5*. Rezultat poziva se dobija u ./9 2#. Cetiri zna-enja pojma 3irtuelna maina Izvorno znaenje pojma virtualna ma#ina, ponekad nazvana i *ardverska virtualna ma#ina je da se vi#e identini* izvr#ni* okru:enja nalazi na istom raunaru, a svaka izvr#ava operativni sistem. %o omo uava da aplikacije pisane za jedan operativni sistem rade na ma#ini s dru im operativnim sistemom ili da se naprave kutije koje prave vei nivo izolacije izme6u procesa ne o koji se posti:e kada se izvr#ava vi#e procesa pod istom instancom operativno sistema. 4orisnici imaju iluziju da posjeduju cijeli kompjuter, izolovan od dru i* korisnika na jednoj fprivatnojX ma#ini, izolovanoj od ostali* korisnika. Pokretanje virtualne ma#ine je relativno brzo, jer je *ardver ve inicijaliziran. >irtualne ma#ine koje opona#aju *ardver se rade na vi#e naina: R .mulacija: virtualna ma#ina opona#a kompletan *ardver, omo uavajui da se nemodifikovani operativni sistem, za potpuno dru i procesor izvr#ava. Primjer su pro rami koji na PC raunarima omo uavaju pokretanje pro rama za raunare iz osamdeseti* ,C9 Spectrum, C70, /mstrad CPC, /mi a-. 1ana emulacije je #to je sporija od dru i* pristupa. R Paravirtualizacija j >irtualna ma#ina ne simulira *ardver, ne o nudi specijalne funkcije koje za*tijevaju modifikaciju operativno sistema koji se instalira. Primjer je izvr#avanje 1S'!S aplikacija pod MindoOs operativnim sistemom. >erzija '!S)a koja se isporuuje uz MindoOs 3% bazirane operativne sisteme je unekoliko modifikovana da bi se uklopila u operativni sistem. R Prirodna virtualizacija D virtualna ma#ina samo parcijalno simulira dovoljno *ardvera da se nemodifikovani operativni sistem izvr#ava u izolaciji, ali operativni sistem mora biti dizajniran za isti tip procesora. 3ajpoznatiji primjer ovakve ma#ine je >1Mare, koji omo uPava da se istovremeno izvr#ava vi#e kopija MindoOs)a ili dru o operativno sistema, bez ubitaka na performansama kakve za*tijeva emulacija. 'ru o znaenje pojma virtualna ma#ina je softver koji izoluje aplikaciju od raunara. 3a ovaj nain se naprave virtualne ma#ine razliiti* verzija za pojedine raunare a aplikacije se pi#u za izvr#avanje na virtualnoj ma#ini. Catim se aplikacija izvr#ava interpreterom ili se prije izvr#enja prevodi u ma#inski kod procesora na kojoj se izvr#ava. 3ajpoznatiji primjer je Sun 1icrosNstemks "ava >irtual 1ac*ine. 2*. POSI( ,unk-ija pt<readO-reate 4reiranje niti nije pretjerano komplikovano. /r umenti za pt*readPcreate su: t*read je pokaziva na pt*readPt tip, u koji pt*readPcreate,- smje#ta identifikator novokreirane nitiS attr je pokaziva na opcionalnu strukturu atributa niti, ili 3(;; ako se atributi ne navodeS startPfunc je funkcija kojom se pokree nova nit, a ar je ar ument za tu funkciju.

>a:no je rei da startPfunc mora biti funkcija koja uzima void pointer kao ar ument i vraa void pointer. Slo:eniji tipovi podataka se mo u dobiti zaobila:enjem ,tNpe castin -. Sve funkcije vraaju 5 ako su uspje#no zavr#ene. 2/. CindoKs 'PI ,unk-ija Create4<read Min+& /PI podr:ava niti, i funkcije za podr#ku niti pozivaju Min+& direktno ili preko neko omotaa koji opet poziva Min+&. .vo Min+& funkcije koja kreira nit. !na se zove Create%*read.
W/3';. Create%*read, ;PS.C(RI%]P/%%RI8(%.S lp%*read/ttributes, HH pointer na si urnosne atribute 'M!R' dOStackSize, HH inicialna veliPina steka za niti ;P%WR./'PS%/R%PR!(%I3. lpStart/ddress, HH pointer na funkciju niti ;P>!I' lpParameter, HH ar ument za novu nit 'M!R' dOCreation=la s, HH kreacijski fle ovi ;P'M!R' lp%*readId HH pointer da se primi oznaka niti -S

20. CindoKs 'PI ,unk-ija CaitEorSin leO+je-t Pod MindoOsom, muteks se kreira funkcijom Create1uteG koja ima tri parametra. Prvi parameter predstavlja si urnosne atribute ,koji se tipino postavljaju na 3(;;-, dru i parametar ima vrijednost %R(. ako je muteks inicijalno zakljuan, =/;S. ako je otkljuan. %rei parametar mo:e biti niz znakova koji predstavlja ime muteksa vidljivo izme6u razliiti* procesa. Povratna vrijednost funkcije Create1uteG je oznaka muteksa. !va oznaka se koristi kao prvi parametar u funkcijama Mait=orSin le!bject i Release1uteG. =unkcija Mait=orSin le!bject do*vata muteks ija je oznaka navedena kao prvi parametar I eka vrijeme navedeno u dru om parametru ,mo:e i beskonanodok se muteks ne oslobodi funkcijom Release1uteG. 21. Prednosti i nedosta-i kasne i rane optimiza-ije Pobornici kasne optimizacije koriste `5H$5 ar ument: `5l izvr#enja pro rama se de#ava u $5l koda. /ko se poku#a optimizovati svaki dio koda koji se pi#e, tj. optimizovati kod prije ne o se uop#te zna da je to potrebno, `5l truda je uzaludno. S dru e strane, ako se kod pi#e na normalan nain, pa onda optimizuje, performanse pro rama se mo u popraviti s manje rada. Cnai, uzimati u obzir normalnu bri u o performansama ,npr. ako postoji izbor izme6u sporije i br:e al oritma, odabira se br:i-, ali ne brinuti o ba# svakoj instrukciji. 4ada cijeli pro ram radi, ulo:iti maksimalni trud da se optimizuje ti* $5l koda ,ako im se udvostrui brzina na &55l, itav pro ram je ubrzan $`5l-. !vaj ar ument je ubjedljiv. !ptimizacija je te:ak i za*tjevan posao. Ponekad se ne zna unaprijed #ta je br:e, jedini nain je isprobati vi#e verzija i usporediti i*. Preveliki je posao raditi to na cijelom pro ramu. /li, limitiranje na $5l koda i optimiziranje nji*, smanjuje rad za `5l. 'ru i ar ument je da malo pro ramera unaprijed zna koliko e se vremena provesti u funkcijama. Rje#enje je da se pro ram napravi, proradi, vrijeme izmjeri, i ubrzaju spori dijelovi.

Problem s ovim ar umentom je #to u stvarnim pro ramima ovi* $5l pro rama #to tro#i `5l vremena se ne nalazi na jednom mjestu u pro ramu . 3a jednom se mjestu dobije $l, na dru om 5.2l , io romni*i &.2l u jednoj funkciji itd. Vtovi#e, optimizacija $l pro rama za*tijeva da se promijeni neki dru i dio koda. 3a primjer, ubrzanje proslje6ivanja parametara funkciji, za*tijeva modifikaciju funkcija koje je pozivaju. .fekat je da se mora popraviti mno o vi#e od $5l koda da bi se ubrzalo $5l koji uzimaju `5l vremena. 'ru i problem s `5H$5 pravilom je #to se on bazira na procentima, a procenti se mijenjaju pri optimizaciji. Canemariv#i prvi problem, neka je ti* $5l koji tro#e `5l vremena u jednoj funkciji. Ca primjer se uzima pro ram ije vrijeme izvr#enja iznosi $5555 sekundi i ako se ta funkcija ubrza & puta, tri puta ili devet puta , dobijaju se razliiti uinci. Pobornici rane optimizacije uoavaju manu procentualne ocjene i zakljuuju da e se na kraju opet optimizovati veina pro rama. Ca#to onda ne uraditi optimizaciju od poetka. Problem sa strate ijom kasne optimizacije je #to se na kraju do6e do duplo dizajna i pisanja pro rama, prvi put da se dobije funkcionalan pro ram, a dru i put da se dobije brz. !sim to a, iako pro rameri nisu dobri u odre6ivanju dje se najvi#e vremena provodi, ima neki* oi ledni* mjesta dje e biti problema s performansama. Ca#to ekati da se otkrije oi lednoL 8olje je te probleme rije#iti ranije kako bi se manje vremena provelo u mjerenju I optimizovanju koda. 'alje, u projektu u kome je definirano da se dizajnira savr#en pro ram bez bri e o performansama, pro rameri e pisati spor kod, jer je tako jednostavnije. Pa i ako je vrijeme to dijela od $5l pro rama kasnije ubrzano stotinu puta, oni* `5l pro ram e i dalje biti katastrofalno sporo. 1ane rane optimizacije su #to se mo:e desiti da pro ram zbo bri e o optimizaciji cijelo pro rama ne bude otov u predvi6enom roku, ili da bude toliko ne#itljiv, pun re#aka i te:ak za odr:avanje. !ptimizacije obino kvare koncept oi ledno koda, i uvode neke re#ke koji* nema u neoptimizovanom pro ramu. Po re#an pro ram je ori od sporo pro rama, pa je ovo lavni ar ument protiv rane optimizacije. 28. Cetiri te<nike tra.enja sporo koda u pro ramu Postoje etiri te*nike: 1etoda uzaludni* poku#aja, !ptimizacija sve a, /naliza pro rama i upotreba profajlera i dru i* mjeraPa performansi. 3akon uoavanja dijela, pro ramer mo:e analizirati tu sekciju. 1etoda uzaludni* poku#aja je, na:alost, naje#a strate ija. Pro ramer ubrzava razliite dijelove pro rama, pravei procjene dje pro ram provodi najvi#e vremena. /ko je pro ramer pravilno po odio, pro ram e se izvr#avati znatno br:e nakon optimizacije. Iskusni pro rameri esto koriste ovu te*niku da brzo lociraju i optimiziraju pro ram. 3a:alost, veina pro ramera pravi po re#ne procjene i zavr#ava u optimizaciji po re#ni* dijelova pro rama. !vakav trud postaje uzaludan, jer optimizacija po re#ni* $5l nee pobolj#ati performanse. "edan od lavni* razlo a za#to ova te*nika pada je #to je ona prvi izbor neiskusni* pro ramera koji ne mo u lako prepoznati spor kod. 3a:alost, oni vjerovatno ne znaju za dru e te*nike, pa umjesto poku#aja sistematsko pristupa, prave nedefinirane poku#aje.

'ru i pristup ubrzanju sporo dijela pro rama je optimizacija sve a. 3aravno, ova te*nika je neupotrebljiva za velike pro rame, ali za krae dijelove ona radi razumno dobro. S ovom metodom se #tedi na vremenu mjerenja performansi, jer je spori dio kod popravljen optimizacijom okoline. 1etoda analize je najte:a od ova etiri. S ovom metodom se analizira pro ram i odredi dje e on provesti veinu svo vremena na bazi podataka koji se oekuju da budu obra6eni. ( teoriji ovo je najbolja te*nika. ( praksi, ljudi ne vole ovakav rad, ili nemaju dovoljno iskustva. Svejedno, ovo je te*nika koja se treba prva koristiti. 3a primjer, veina pro rama najvi#e vremena izvode u tijelu petlje ili rekurzivno poziva. Sto a, treba locirati sve rekurzivne pozive i tijela petlji ,naroPito u nije:Peni*-. >elike su #anse da e pro ram provesti najvi#e vremena u tim podrujima. Premda analitika metoda daje dobar nain za lokaciju sporo koda u pro ramu, analiza pro rama je spor i dosadan proces. ;ako je propustiti najsporiji dio pro rama, po otovo kada ima rekurzivni* poziva funkcije. 1o u se propustiti i u nije:6ene petlje. 3a primjer ako se unutar funkcije nalazi jednostruka petlja, mo:da je ta funkcija pozivana iz tijela neke dru e petlje, ime petlja postaje implicitno u nije:6ena.. Proces analize se mo:e automatizovati. %o rade pro rami koji se zovu profajleri. Profajler je mali pro ram koji mjeri koliki dio koda se provodi u nekom dijelu pro rama. %o se tipino radi prekidanjem pro rama u pravilnim intervalima i itanjem povratne adrese. Iz liste povratni* adresa se sazna koliko je vremena pro ram proveo u kojoj rutini. 3;. Cemu slu.e i koji su pro+lemi s +en-<mark pro ramima 8enc*mark pro rami su pro rami koji mjere vrijeme potrebno da se izvr#i neka aktivnost. !vakvi benc*mark pro rami ponekad tjeraju projektante kompajlera i mikroprocesora da ubrzavaju enerisani kod da br:e izvr#ava benc*mark pro rame ak i ako se dru i pro rami izvr#avaju sporo. Sto a su esto benc*mark pro rami ubili smisao. Cato su esti su i klasiPni pro rami u upotrebi za benc*marke. 3a primjer, esto se koristi i ra Quake da se vidi koliko ekrana u sekundi mo:e da iscrta ili koliko je potrebno u pro ramu 1S Mord vremena da se zamijeni rije u du akom tekstu. 31. 4e<nike optimiza-ije izlaza iz kompajlera Tenerisani ma#inski ili asemblerski kod koji proizvode kompajleri se veoma esto optimizuje. !ptimizacija izlaza iz kompajlera je usmjerena na to da enerisani pro ram bude #to krai, #to br:i ili po mo unosti oboje. Postoji vi#e naina optimizacije, zavisno od faze kompajliranja u kojoj se koristi. Re istarska alokacija pretpostavlja da se neke varijable uvaju u re istrima umjesto u memorijskim lokacijama. %ipini kandidati su cjelobrojne lokalne varijable koje se unutar funkcije naje#e koriste, a nad kojim se ne koristi operator adrese. "ezik C ima i kljunu rije re ister kojom se kompajleru preporuuje da navedene varijable dr:i u re istrima. .liminacija mrtvo koda prosto preskae dio pro rama koji ne obavlja nikakvu funkciju. 3a primjer u rutini
void proba,- b int aI&,iS

for ,iI$Si\&5Si@@- aIa?aS c

vrijednost varijabli koje mijenja petlja ,a,i- se uop#te ne koristi, tako da ova petlja nee uticati na izvr#enje pro rama ak i ako se potpuno ukloni. !va vrsta optimizacije za*tijeva praenje me6uzavisnosti dijelova pro rama, #to topolo#ki predstavlja raf. !dmotavanje petlji je jedna od optimizacija koje poveavaju brzinu ali i veliinu koda. 3pr, petlja for ,iI$Si\+Si@@- a@@ se prevodi kao tri puta ponovljena instrukcija I3C ElokacijavarijableaF, jer je to br:e ne o da se uveava i provjerava broja. Peep*ole optimizacija je naje#i nain optimiziranja izlazno koda. Prilikom enerisanja koda posmatra se okolina ma#inske instrukcije koja se treba enerisati i dobijena rupacija instrukcija se zamijeni jednostavnijom ili br:om. 8ulova optimizacija pri raunanju lo iki* izraza sa operatorima ,u C)u JJ i ZZ- se bazira na prekidu raunanja izraza ako je ve iz prvo dijela rezulta jasan. 3pr aI,bII$- JJ ,cII$-. (koliko je b bilo razliito od $, rezultat izraza e biti 5, bez obzira na vrijednost varijable c. Sto a se taj dio rauna mo:e preskoiti. !ptimizacija dupli* strin ova. /ko se u pro ramu dva ili vi#e puta spominje isti niz znakova ,npr u dijelu pro rama: if ,dos- puts,XWelloKY- else messa e8oG,5,YWelloKY,YWelloKY,$-S poruka Wello se ponavlja tri puta, pa je dovoljno smjestiti je u memoriju na samo jedno mjesto. 32. Ulo a ta+ela komande i ak-ije u %erziji EIBD>'7 32 s optimiza-ijom /semblerske instrukcije koje =I;'C/3 +& kompajler eneri#e navedene su u tabeli komande. /ko neka od ovi* instrukcija sadr:i promjenjivi tekst ,npr. numeriki parametar ili ime labele- nje ovo mjesto je oznaeno sa ls ili ld, #to se lako parsira funkcijom sscanf. !vi promjenjivi tekstovi smje#taju se u tabelu parametri i cjelobrojnu varijablu t. %abela akcije oznaava #ta se treba promijeniti. !va tabela sadr:i naizmjenino zakodirane tra:ene I zamjenjujue sekvence. 8roj `` predstavlja kraj pojedine sekvence. ( svakoj sekvenci se u najni:oj cifri kodira nain pamenja parametra, dok vi#e cifre predstavljaju redni broj u tabeli komande.

You might also like