Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Hasonló dokumentumok
Szemantikai elemzés. konzisztenciájának vizsgálata a szemantikai elemzés feladata lesz.

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

Informatika szigorlat. A lexikális elemző feladatai közé tartozik a whitespace karakterek (a

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozás alapjai. 10. előadás

Programozási nyelvek Java

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Tárgymutató. Typotex Kiadó. Csörnyei Zoltán. akonyv 2007/3/9 6:29 page 315 # , >, 205 <, 96, 108, 115 >, 96, 108, 115 =, 96, 108

Programozási nyelvek (ADA)

Fordítóprogramok felépítése, az egyes programok feladata. A következő jelölésmódot használjuk: program(bemenet)(kimenet)

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Máté: Assembly programozás

Fordítóprogramok. Aszalós László szeptember 7.

Fordító Optimalizálás

Algoritmizálás és adatmodellezés tanítása 1. előadás

Az assembly nyelv sor-orientált nyelv, tehát minden sorba pontosan egy utasítás kerül. Egy sor mezőkből áll a következőképpen:

Assembly Utasítások, programok. Iványi Péter

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Alprogramok, paraméterátadás

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Programozás alapjai. 5. előadás

Programozás alapjai. 7. előadás

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Stack Vezérlés szerkezet Adat 2.

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Máté: Assembly programozás

C++ programok fordítása

Programozás II. 2. Dr. Iványi Péter

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Algoritmizálás + kódolás C++ nyelven és Pascalban

Pénzügyi algoritmusok

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz

A programozás alapjai 1 Rekurzió

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Miről mire fordít a fordítóprogram? Miről mire fordít az assembler? Mi a különbség a fordítóprogram és az interpreter között? Mi a virtuális gép?

Programozási nyelvek (ADA)

Fordítás Kódoptimalizálás

Java programozási nyelv

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

C programozási nyelv

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

PE/COFF fájl formátum

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

A programozás alapjai

Komputeralgebra Rendszerek

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Programozás C és C++ -ban

Programok értelmezése

A C programozási nyelv II. Utasítások. A függvény.

Java II. I A Java programozási nyelv alapelemei

Assembly. Iványi Péter

Bevezetés a C++ programozási nyelvbe

Fordító Optimalizálás

Szkriptnyelvek. 1. UNIX shell

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Rekord adattípus. Egymásba ágyazott rekordok. With utasítás. Változó rekord. Rekord konstans

15. Programok fordítása és végrehajtása

C programozási nyelv Pointerek, tömbök, pointer aritmetika

3D-s technológiák a játékfejlesztésben UDK bevezetés

7. fejezet: Mutatók és tömbök

és az instanceof operátor

Kiterjesztések sek szemantikája

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Pénzügyi algoritmusok

Occam 1. Készítette: Szabó Éva

Programozás I. 5. Előadás: Függvények

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

Oktatási segédlet 2014

Java II. I A Java programozási nyelv alapelemei

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Adatszerkezetek I. 1. előadás

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Apple Swift kurzus 3. gyakorlat

JAVA PROGRAMOZÁS 2.ELŐADÁS

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

1. Alapok. Programozás II

5. Gyakorlat. struct diak {

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Alprogramok fordítása. Kódgenerálás II. (alprogramok, memóriakezelés) Függvény, eljárás. Alprogramok írása assemblyben

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

[cimke:] [feltétel] utasítás paraméterek [; megjegyzés]

Digitális rendszerek. Utasításarchitektúra szintje

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Memóriakezelés, dinamikus memóriakezelés

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

\ _/ / / _ \ ' / _` / ' / _ \ / _` (_) (_ (_) (_ \_ \ / _ \,_\ \ / \, / / 2.1. Alapfogalmak. 1. Mirol mire fordít a fordítóprogram?

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Átírás:

Kódgenerálás Memóriagazdálkodás Kódgenerálás program prológus és epilógus értékadások fordítása kifejezések fordítása vezérlési szerkezetek fordítása Kódoptimalizálás

L ATG E > TE' E' > + @StPushAX T @StPopBX @StAddBX E' e T > FT' T' > * @StPushAX F @StPopBX @StMulBX T' e F > (E) i n @StLoadAX

Kódgenerálás A már elemzett kódból a fordítóprogram különböző módszerek felhasználásával előállítja a tárgykódot. A tárgykódot optimalizálni kell. A kódgenerálás feladatát un.: L ATG grammatikával írjuk le. A generált kódok sok esetben assembly kódok intel 80x86 processzorra.

Memóriagazdálkodás Statikus memóriakezelés fordítási időbe ismerni kell minden programelem méretét a program végrehajtási idejében minden programelem csak egyszer szerepelhet. Dinamikus memóriakezelés ha a statikus memóriakezelés valamelyik feltétele nem teljesül.

Statikus memóriakezelés Már fordításkor meg kell határozni, hogy az adatok és az utasítások kódja hol helyezkedjen el a memóriában. Nem engedhető meg a változó hosszúságú adatok, pl.: dinamikus listák használata. Az egymásba ágyazott eljárások használata nem lehetséges. (nincs rekurzió...)

A program memóriaterülete (((implicit paraméterek)(aktuális paraméterek)(változók))(utasítások)) Implicit paramétermezők szubrutinhívásokra (visszatérési cím, függvéynértékek) Aktuális paraméterek eljárások, függvények aktuális paraméterei Változók a programban definiált változók, tömbök A változók címét könnyen ki lehet számítani, esetleg a frordítóprogram is tartalmazhatja

Dinamikus memóriakezelés <kódszegmens><adatszegmens><heap><stack> Kétfajta dinamikus memória létezhet Tetszőleges élettartamú heap memóriában helyezkednek el. Skatulyázott élettartamú runtime veremben helyezkednek el. (pl.: blokk struktúránál) A blokkból kilépve a memória részlet elveszik.

Aktivációs rekord Az i edik blokkhoz tartozó adatokat AR i vagyis az i edik aktivációs rekordnak nevezzük. A futó blokk rekordját aktiv AR nek. Három részből áll: lokális változók display terület paraméterterület A fordítás és kódgenerálás során a változókat és a memóriát kezelni kell!

Kódgenerálás Assembly nyelvű kódra (egy adat, kód és veremszegmens használata esetén...) az adatszegmensbe kerülnek a globális változók a veremszegmensbe az alprogramok aktivációs rekordjai a kódszegmensbe a lefordított utasítások

Prológus és Epilógus Az ASM program neve a program szó után írt azonosító. A lefordítandó forrásprogram a következő: program program id @Prologue( v) block. @Epilogue A @Prologue az ASM program kezdő sorait generálja, a @Epilogua a zárót. name v ;@Prologue end start ; @Epilogue doseg.modell small.stack 200h

Típusdeklaráció és definíció típusdeklaráció type id = típusdefiníció d @TypeDecl( n,d) @TypeDecl( n,d) szemantikus rutin a szimbólumtáblát kezeli. n- névhez egy bejegyzést készít, majd ehez kapcsolja a d típusdeszkriptort. type a=set of integer; type c=record... end; type class a{...}...

Konstansdeklaráció pl.: constant real pi = 3.1415 A fordító felírja a pi szimbólumot a szimbólumtáblába attribútumként megadja, hogy pi konstans a pi típusa real a pi értéke 3.1415 A konstans deklaráció ekkor a következő:

Konstansdeklaráció konstansdeklaráció constant típus t id n = kifejezés s,v @ConstDecl( n,t,s,v) típus real t integer t boolean t t, és n értékét a lexikális elemző határozza meg v a kifejezés értéke s a kifejezés típusa a @ConstDecl( n,t,s,v) ellenőrzi a t és az s típusok azonosságát, az n,t,s attribútumokból szimbólumtábla írást végez, majd a következő sort generálja (n number típus az ASM-ben): n equ v ; @ConstDecl( n,t,s,v)

Változódeklaráció Változók lehetnek statikusak, vagy dinamikusak Statikus fordításkor, dinamikus futás közben értékelődnek ki. A dinamikus változók fordításakor csak a típus deszkriptorának kell helyet foglalni. Egyszerű predefined változók deklarációja:

Példa típusdeklarációra változódeklaráció típus t,m id n @VarAlloc( n,m,q ) @VarDecl( n,t,m,q) típus t,m real t integer t boolean t karakter t ( darabszám t,m)

Kifejezés fordítása E > TE' E' > + @StPushAX T @StPopBX @StAddBX E' e T > FT' T' > * @StPushAX F @StPopBX @StMulBX T' e F > (E) i n @StLoadAX

Generált kód az L ATG alapján 2+j*(3+k) mov ax,2 ; 2 @StLoadAX push ax ; + @StPushAX mov ax, j ; j @StLoadAX push ax ; * @StPushAX ( mov ax,3 ; 3 @StLoadAX push ax ; + @StPushAX mov ax,word ptr [bp] 2 ; k @StLoadAX pop bx ; @StPopBX add ax,bx ; @StAddBX ) pop bx ; @StPopBX imul bx ; @StImulBX pop bx ; @StPopBX add ax,bx ; @StAddBX

IF fordítása if-utasítás if kifejezés then utasítás1 if-tail if-tail else utasítás2 endif endif az utasításból a következő kódok generálódnak: <kifejezés> <kifejezés> cmp ax,0 cmp ax,0 jz L_001 jz L_001 <utasítás1> <utasítás1> L_001 jmp L_002 L_001 <utasítás2> L_002

Kódoptimalzálás tömörítés : (ha az érték fordításkor ismert) a = b + 1 + c + 3 + 4; > a = 8 + b + c; (tömörítés) a = 6; b = a / 2; c = b + 5 a = 6; b = 3; c = 6; (konstanskiterjesztés) x = a + b; y = x; z = y; > x = a + b; y = x; z = x; (továbterjesztés)

Ciklusok optimalizálása Ciklus kifejtése: for i = 2 to 12 step 2 a[i,1] = 0; > a[2,1] =0; a[4,1] =0; a[6,1] =0; a[8,1] =0; a[10,1] =0; a[12,1] =0; A méret megnő, de a végrehajtás gyorsabb!

Ciklusok optimalizálása Frekvenciaredukálás: for c:= 1 to 100 do a:=b; begin b:=2; a:=b; for c:= 1 to 100 do b:=2; begin...... end; end; A két program nem ekvivalens!