Download pdf - Generisanje Koda

Transcript
Page 1: Generisanje Koda

GENERISANJE KODA - ALGORITAM GENERISANJA KODA:

Skenira postfix izraz 1

Ako je next OPERAND onda – PUSH(S,next) , gde je next trenutni element postfix-a

Ako je next OPERATOR onda – radi se POP(S) x2 ; generiše se odgovarajudi segmenta koda tako

što se O2 = POP(S) –prvi koji se skine sa steak postaje O2 i O1=POP(S)-drugi koji se skine sa steak

postaje O1

Druga instrukcija ovog segmenta koda ( ADD,SUB,MUL,DIV,….. )–realizuje dati operator

Treda instrukcija ovog segmenta koda (STORE)-smešta rezultat operatora primenjenog na operand

u privremenu lokaciju (za svaki operator posebna privremena lokacija)

Međurezultat ide na stek – PUSH(S,rez)

Ovo se sve radi dok IMA OPERATORA

1A mašina; O1@O2: ako je @ = + npr

* LOAD O1 ; Read O1 sa mem add i Write u ACC

ADD O2 ; Read iz ACC i sabiranje sadržaja ACC sa sadržajem reg u kome je O2

STORE O2 ; smeštanje O2 u mem lokaciju

0A mašina; O1@O2: ako je @ = - npr

* PUSH O1 ; Smešta O1 na vrh steka

PUSH O2 ; Smešta O2 na vrh steka

SUB ; Skida sa vrha steaka O2, O1 respektivno i oduzima O1 i O2

ADD :

* Komutativna, asocijativna

SUB :

* NEKomutativna, NEasocijativna

MUL :

* Komutativna, asocijativna

DIV :

* NEKomutativna, NEasocijativna

- Process generisanja koda iz postfix-a je različit za različite računarske mašine( 0A,1ADRESNA, 2A)

STEK MAŠINE:

* Za 0A mašine ne treba optimizacija,

* Operandi se podrazumevano nalaze na vrhu steka

* algoritam generisanja koda je direktan,

* ne zahteva korišdenje korisničkog steak jer ved postoji hardwerski,

* za svaki element izraza generiše se po jedna instrukcija

AKUMULATORSKE MAŠINE: Za 1A mašine mogude su naknadne optimizacije i pri tom vodiš računa

o slededem:

* Komutativnost nekih operatora

* Broj privremeno korišdenih lokacija se može redukovati –ako se prethodno proveri da li se

upotrebljena privremena lokacija kasnije koristi

* Redundatni 2parovi instrukcija – znači tražiš koji su parovi instrukcija suvišni u tvom

segment koda

1 Smer grupisanja: sleva-udesno 2 Redundatni – suvišan,rezerva,zaliha,ponavljanje,višak

Page 2: Generisanje Koda

Primer :

Prvo prevedi u postfix

GENERIŠEMO KOD: BC*DE+F/-

next stek instrukcije komentari

B B PUSH B Na vrh steak smesti B

C BC PUSH C Na vrh steak smesti C

* rezMUL MUL Skini s vrha C,zatim B; rezMUL= B*C baš ovim

redosledom;stavi na vrh steak rezMUL

D rezMUL D PUSH D Na vrh steak smesti D

E rezMUL D E PUSH E Na vrh steak smesti E

+ rezMUL rezADD ADD Skini s vrha E,zatim D; rezADD

= D+E baš ovim

redosledom;stavi na vrh steak rezADD

F rezMUL rezADD F PUSH F

/ rezMUL rezDIV DIV

- rezSUB SUB

PUSH B

PUSH C

MUL

PUSH D

PUSH E

ADD

PUSH F

DIV

SUB

POP A ; na kraju on sa ovom instrukcijom smešta rez sa vrha steak u A (A može da bude adresa memorijske

lokacije ili registar)

PUSH X & POP X su jedine instrukcije s kojima STEK (0A) MAŠINA radi, nema LOAD nema STORE (setite se das

u to instrukcije za prenos data između mem lokacije i registra )


Recommended