Upload
marija-markovic
View
7
Download
0
Embed Size (px)
DESCRIPTION
as
Citation preview
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
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 )