2
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 2 parovi 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

Generisanje Koda

Embed Size (px)

DESCRIPTION

as

Citation preview

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 )