5.3.3 Koodin generointi Koodin generointi tarkoittaa objektikoodin eli konekielisen ohjelman tuottamista. Generointi jakautuu kolmeen osatehtävään: 1.Muistin.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

15. Loogiset operaatiot.
@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
Tietokonetekniikka 5 Operandien osoittaminen ja tietokoneen käskykanta
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
Tietokonetekniikka 3 Tietokoneen Rakenteen ja toiminnan perusteet
JavaScript (c) Irja & Reino Aarinen, 2007
5. Systeemiohjelmisto Jotta tietokoneesta saadaan käyttökelpoinen, tulee ratkaista seuraavat ongelmat: Miten ohjelma tallennetaan tietokoneen muistiin?
Rakenteinen ohjelmointi
Rakenteinen ohjelmointi
Ohjelma on kokoelma toimintaohjeita annetun tehtävän ______________________. Ohjelmassa on peräkkäisten toimintojen lisäksi yleensä valintaa ja _____________.
Sovellusohjelman suunnittelu & toteutus
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
TyyppimuunnoksettMyn1 Tyyppimuunnokset Joskus kääntäjän on tehtävä itse päätöksiä, jos ohjelmoija ei ole ajatellut yksityiskohtia: int arvo1=10; long arvo2=25;
Konekieli.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
Muistinhallinta. 2 Teknisiä kehitysaskelia §Muisti- ja osoiteavaruuden erottaminen toisistaan l virtuaaliosoitteiden avulla muistin koko voi olla suurempi.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
Pseudokoodi Tietokoneohjelmien perusidea:
© Lammi-Niskala-Kossarev ADT:n toteutus Imperatiivinen paradigma Imperatiivinen paradigma toimenpiteet aktiivisia, tiedot passiivisia toimenpiteet.
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Ohjelmointi.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Visual Basic -ohjelmointi
Tietokoneohjelman suoritus opintojakso Olioajattelu ja –ohjelmointi, osa I Hans Nieminen Syksy 2013.
C-ohjelmoinnin perusteet
2.8 TIETO- JA TALLETUSRAKENTEET
Tietotyypit Tietotyyppi määrittää muuttujan sisältämän datan luonnetta, muistista tarvittavaa tilaa ja sitä, millaisia operaatioita siihen voidaan kohdistaa.
© Lammi-Niskala-Kossarev 1 Kertausta (lu 05-06) Algoritmin perusvaatimukset Miksi ei luonnollista kieltä ohjelmointiin Syntaksi, semantiikka ja pragmatiikka.
Muuttujat ja vakiottMyn1 Muuttujat ja vakiot PHP-kielen syntaksi on lainattu suurimmaksi osaksi C- kielestä. PHP on erityisesti HTML-dokumenttien sisään.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
3.2 Kompleksisuus Vain pieni osa kaikista tehtävistä on laskettavissa tai edes osittainkaan laskettavissa. Laskettavien osalta saattaa olla tarpeellista.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Visual Basic -ohjelmointi
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Visual Basic -ohjelmointi
Visual Basic -ohjelmointi
Osoittimen määrittely ja alustus tMyn1 Osoittimen määrittely ja alustus Osoitin (pointer) on muuttuja, joka voi sisältää keskusmuistiosoitteen. Osoitinmuuttujan.
Valintarakenne valintarakenne alkaa aina kysymyksellä eli ehdolla ehto tarkoittaa, että muuttujan sisältöä verrataan toisen muuttujan sisältöön tai vakioon.
FOR i := 0...N-1 DO summa := summa + A[i] tulo := tulo * A[i] ENDFOR.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Symbian ohjelmointi Ti Symbian ohjelmointi 2.2 harjoitus Juha Turunen
Ohjelma Mikro-ohjelmointi Symbolinen konekieli Osoitustavat.
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Mikro-ohjelmoitava tietokone
Aiheet ● Ohjelmointikielten kääntäminen ● Kieliopin määrittely ● Kääntäjän toiminta.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembler.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli.
String-vertailusta ja Scannerin käytöstä (1/2)
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op
13. Loogiset operaatiot.
10. Javan ohjausrakenteet
14. Hyvä ohjelmointitapa.
11. Javan valintarakenteet
4. Ohjelmointi konekielellä (TTK-91 ja Titokone)
Tietokoneen toiminta (2 ov)
Tietokoneen toiminta (2 ov)
Luento 10 Käännös, linkitys ja lataus
11. Käännös, linkitys ja lataus
2. TTK-91 –tietokone 2.0 Mikä TTK-91? Ja mitä hyötyä siitä on?
Luku 12 Java-ohjelmien suoritus
3. TTK-91-käskykanta Symbolisen konekielen tavalliset käskyt
4. Ohjelmointi konekielellä (TTK-91 ja Titokone)
13. Loogiset operaatiot.
3. TTK-91-käskykanta Symbolisen konekielen tavalliset käskyt
Jakso 4 Aliohjelmien toteutus
Esityksen transkriptio:

5.3.3 Koodin generointi Koodin generointi tarkoittaa objektikoodin eli konekielisen ohjelman tuottamista. Generointi jakautuu kolmeen osatehtävään: 1.Muistin varaaminen (memory allocation) ohjelman käyttämille tiedoille. 2.Lähdekielistä ohjelmaa vastaavien konekielisten käskyjen muodostaminen. 3.Koodin optimointi.

5.3.3 Koodin generointi 1.Muistin varaaminen: symbolitaulun perusteella lasketaan, montako muistipaikkaa ohjelman data-alue (= muuttujat, muut tunnukset ja tietorakenteet) tarvitsee symbolitaulussa ilmoitetaan tunnuksen (ja vastaavien) nimen lisäksi sen tietotyyppi ja muistiosoite

5.3.3 Koodin generointi Esimerkki. MODULE Pythagoras (INTEGER x INTEGER y INTEGER z) RETURNS BOOLEAN RETURN x 2 + y 2 = z 2 ENDMODULE SYMBOLITAULU (oletus: INTEGER varaa 32 bittiä eli 4 tavua, BOOLEAN 1 tavun) TunnusTyyppiOsoite PythagorasBOOLEAN9 xINTEGER10 yINTEGER14 zINTEGER18

2.Konekielisten käskyjen muodostaminen: ohjelma jäsennetty => sen rakenne on jäsennyspuussa käydään jäsennyspuun alkiot esijärjestyksessä läpi ja tuotetaan konekieltä, joiden käskyt toteuttavat syntaksiluokkien toiminnan yleensä generoidaan symbolista konekieltä muistipaikkoihin viitataan muuttujanimillä, ei todellisilla muistiosoitteilla muuttujanimet korvataan muistiosoitteilla, kun ohjelma käännetään objektikoodiksi MODULE Generoi(jäsennyspuu P) Olkoon P = N(P 1,..., P k ) CASE N OF : generoimoduuli(P 1,..., P k ) : generoiasetuslause(P 1,..., P k ) : generoijoslause(P 1,..., P k ) : generoijosmuutoin(P 1,..., P k ) : generoiwhilelause(P 1,..., P k )... ENDCASE ENDMODULE

Esimerkki. Asetuslause x:=y o z, missä o on jokin operaattori (esim. yhteenlaskuoperaattori +). → := → → + | - | * / → | → a | b | c |... Jäsennetään lause → jäsennyspuu ( (x),:=, ( (y), (o), (z))) Esitystä voidaan sieventää: (x,y,o,z)

5.3.3 Koodin generointi Esimerkiksi asetuslause x:=y o z puurakenteena: ( (x),:=, ( (y), (o), (z))) x y o z

5.3.3 Koodin generointi Esimerkiksi asetuslause x:=y o z sievennettynä puurakenteena (koodingenerointia varten): (x y o z) x z y o

Käännösmoduuli: MODULE Generoiasetuslause(x, y, o, z) TulostaLOAD y CASE o OF '+' : Tulosta ADD z '-' : Tulosta SUBTRACT z '*' : Tulosta MULTIPLY z '/' : Tulosta DIVIDE z ENDCASE Tulosta STORE x ENDMODULE Muuttujat x, y ja z korvataan symbolitaulusta saatavilla osoitteilla ennen suoritusta

5.3.3 Koodin generointi Esimerkki ehtolauseesta: → > | < | = | ≠ → IF-THEN-ELSE -rakenteen jäsennyspuu: (IF, (...), THEN, (...), ELSE, (...))

Käännösmoduuli IF-lauseelle: MODULE Generoijosmuutoin(ehto-osa E, niin-osa P,muutoin-osa Q) Olkoon E = ( (x), (o), (y)) määrää nimiöt(tunnukset) a ja b (*jos ehto x o y on epätosi, ehto-koodista hypätään nimiöön a, muuten jatketaan seuraavasta:*) generoiehto(x,o,y,a) generoi(P) (*generoi niin-osa*) tulostaJUMP b (* ohita muutoin-osa*) tulostaa: NOP (* tyhjä käsky-jatketaan seuraavasta*) generoi(Q) (*generoi muutoin-osa*) tulostab: NOP (* tyhjä käsky-jatketaan seuraavasta*) ENDMODULE muuttujat x, y ja z korvataan symbolitaulusta saatavilla osoitteilla

MODULE generoiehto(x, o, y, a) (* hypätään aina nimiöön a (muutoin-osaan), jos ehto ei toteudu *) CASE o OF '>',’>=’:tulostaLOADx SUBTRACT y (*jos y>x:*)JUMPNEG a IF o = ’>' THEN tulosta(*jos y=x:*)JUMPZERO a ENDIF ’ y:*)JUMPNEG a IF o =’<’ THENtulosta(*jos x=y:*)JUMPZERO a ENDIF '=':tulostaLOADx SUBTRACTy (*jos y>x:*)JUMPNEG a LOAD y SUBTRACT x (*jos x>y:*) JUMPNEG a ‘<>’: tulosta LOADx SUBTRACTy (*jos y=x:*)JUMPZERO a ENDCASE ENDMODULE

3. Koodin optimointi mekaanisesti generoitua koodia voidaan yleensä parantaa poistetaan ne konekielen pätkät, jotka eivät vaikuta senhetkiseen ohjelman tilaan esim. IF x>y THEN x:= x-y ELSE x:=0 ENDIF LOAD x SUBTRACT y (y>x)JUMPNEG a (y=x)JUMPZERO a (niin)LOAD x SUBTRACTy (x:=x-y)STOREx (ulos)JUMPb a: NOP (muutoin)LOADI0 STOREx b:NOP turhia!

5.3.4 Symbolinen konekieli jos ohjelmoi konekielellä on helpompaa käyttää nimiöitä hyppyosoitteina kuin muistipaikkojen numero-osoitteita esim. LOAD b2, ei LOAD 15 helpompaa käyttää käskysanoja kuin käskykoodeja LOAD b2: (0001=LOAD:in käskykoodi, loput-operandi) nimiöt (tunnukset) kerätään symbolitauluun assembleri (eng. to assemble = koota, kerätä): helpottaa konekielellä ohjelmointia kääntää symbolisen konekielen oikeaksi konekieleksi sijoittaa nimiöiden tilalle oikeat numeeriset osoitteet korvaa käskysanat käskykoodeilla käännösprosessi on suoraviivainen: jokainen symb.konekielen rivi vastaa oikean konekielen riviä tuotetussa objektikoodissa osoitteet suhteellisia kuvitellaan, että ohjelma datoineen alkaa osoitteesta 0 kaikki osoitteet lasketaan siitä osoitteesta lataaja: korvaa suhteelliset osoitteet todellisilla osoitteilla: esim. ohejlmalle varataan muistialue suht. osoitteet muutetaan todellisiksi lisäämäällä niihin arvo 2000 => muistinhallinta lataaja on käyttöjärjestelmän osa