Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

4. Ohjelmointi konekielellä (TTK-91 ja Titokone)

Samankaltaiset esitykset


Esitys aiheesta: "4. Ohjelmointi konekielellä (TTK-91 ja Titokone)"— Esityksen transkriptio:

1 4. Ohjelmointi konekielellä (TTK-91 ja Titokone)
4.1 Tiedon sijainti ja viittaaminen suoritusaikana muuttujat, tietorakenteet, symbolit, muistitilan käyttö 4.2 Ohjelmoinnin peruskäsitteiden toteutus konekielessä ohjelman kontrolli 4.3 Koodin optimointi ja tarkistukset 22/09/2018 Liisa Marttinen kevät 2005

2 4.1 Tiedon sijainti ja viittaaminen suoritusaikana
Suoritusaikana tiedon on sijaittava joko keskusmuistissa tai rekisterissä levy yms on aivan liian hidas! muisti iso (256 MB -1 GB 32 bitin sanaa), mutta suhteellisen hidas (hakuaika 10 ns) ei oikeastaan kovin hidas, mutta prosessori on niin paljon nopeampi rekisteri nopea (1 ns), mutta pieni ( bitin sanaa) välimuisti (prosessorin sisällä oleva 1.tason välimuisti) lähes yhtä nopea kuin rekisteri (1-2 ns), kooltaan suurempi (8-64 KB) 22/09/2018 Liisa Marttinen kevät 2005

3 Miten tietoon viitataan ?
Tieto on muistissa suoraan muistiosoitteella (0xA49F37, ) symbolista konekieltä käytettäessä symbolilla (Taulu, luku, Y) symbolin arvo on muistiosoite LOAD R1,Taulu osoite voidaan välittää rekisterissä tai ’epäsuorasti’ jossain muistipaikassa ADD LOAD suoritusaikana laskettavan osoitteen avulla heksadesimaaliluku 22/09/2018 Liisa Marttinen kevät 2005

4 Miten tietoon viitataan? (2)
Tieto välimuistissa samalla tavalla kuin muistissa olevaan tietoon ei siis suoraa viittausta välimuistiin mutta tieto saattaakin löytyä nopeammin välimuistista viittaushetkellä ei tiedetä, saadaanko tieto välimuistista vai joudutaanko se hakemaan keskusmuistista 22/09/2018 Liisa Marttinen kevät 2005

5 Miten tietoon viitataan? (3)
Tieto on rekisterissä konekielessä rekisterin osoitteen avulla (3 tai 7) symbolisessa konekielessä rekisterin nimen avulla (R2, SP, FP) Tieto on konekäskyssä yleensä konekäskyssä on vain yksi paikka tiedolle 22/09/2018 Liisa Marttinen kevät 2005

6 Tieto ja sen osoite Muistissa olevaan tietoon liittyy sekä arvo että osoite osoite = muuttujan sijaintipaikka muistissa osoite = 125 ja arvo =10 LOAD R1, =10 STORE R1,125 10 125: 22/09/2018 Liisa Marttinen kevät 2005

7 Symbolit ja muuttujat Symbolisen konekielen kääntäjä pitää viitteitä ja muuttujia vastaavia tunnuksia symboleina. Symbolin arvoksi tulee sen käskyn sijaintiosoite, jonka viitteenä se on Taas ADD R2,100(R1) muuttujalle varatun muistipaikan osoite Y DC 12 ; Y:lle tilaa yksi muistipaikka ja Y:n arvoksi 12 Taulu DS 100 ; varataan 100 muistipaikkaa symbolit yleensä olemassa vain käännösaikana virheilmoituksia varten voidaan symbolitaulu tallettaa ’ADD’ Taas= 1134: 22/09/2018 Liisa Marttinen kevät 2005

8 Muuttujien arvot ja osoitteet
Ohjelman osoiteavaruus valekäsky DC . 23 olkoon ohjelman koko 23 käskyä X DC 200 LOAD R2, =X LOAD R2, X …. ohjelman konekielliset käskyt X X:lle varataan tilaa ohjelman käskyjen jälkeen LOAD R2, =X => R2 = 23 eli muuttujan X:n osoite = symbolin X arvo LOAD R2, X => R2 = 200 eli muuttujan X arvo

9 Osoitimuuttujat Samanlaisia muuttujia kuin muutkin muuttujat
on osoite ja arvo Arvo on nyt jonkin tiedon osoite muistissa globaalin muuttuja, taulukko, tietue, olio pinosta tai keosta tiedolle dynaamisesti (suoritusaikana) varatun alueen osoite Javan ’new’-operaatio palauttaa muistialueen osoitteen (tai virhekoodin, jos varaus ei onnisti) käskyn aliohjelman tai metodin osoite osoite ohjelmakoodiin dataosoite dataosoite koodiosoite 22/09/2018 Liisa Marttinen kevät 2005

10 Osoitinmuuttujat Ohjelman muistiavaruus Oletus: ohjelman koko on 123 konekäskyä! 123 124 125 126 127 128 129 130 Xptr DC tbl DS X DC LOAD R1, =X STORE R1, Xptr LOAD R2, X LOAD 128 200 1000 4500 Muuttujan X osoite on Muuttujan X arvo on Osoitinmuuttujan Xptr osoite on Osoitinmuuttujan Xptr arvo on 128 (eli toisen muuttujan, nyt X:n, osoite). LOAD R2, X ; R2<- 200 LOAD ; R3 <-200

11 Yhden ohjelman muistitilan käyttö TTK91:ssä
ohjelmakoodi globaalit muuttujat ja tietorakenteet BASE LIMIT ohjelman P muistitila pino aliohjelmien toteuttamista varten sekä tilat paikallisille muuttujille SP vapaa alue HP Keko dynaamisesti varattavia muistialueita varten (esim. Java ’new’). TTK 91:ssä ei ole toteutettu kekoa! Keskusmuisti

12 Globaali data TTK-91:ssä
Globaaleille muuttujille ja muille globaaleille tieto-rakenteille varataan tilaa heti ohjelman käskyjen jälkeen muuttujat tilan varaus viittaaminen int K=1; int Tau[8] ; short X; boolean B; char C char mjono[] =’TTK-91’ K DC ; alkuarvo 1 Tau DS ; 8 sanaa B DC ; 1=true, 0 = false Alku LOAD R1, K STORE R2, TAU(R1) 22/09/2018 Liisa Marttinen kevät 2005

13 Ohjelman osoiteavaruuden käyttö aliohjelmaa Alioh1 suoritettaessa:
Paaohj Alioh Alioh2 ... Aliohn... Apu, Bee, K X,Y, P1,P2 Isotaulu Pääohjelman ja aliohjelmien koodit globaalit, kaikkialle näkyvät muuttujat Bee ja K sekä taulukko Apu Aliohjelman omat paikalliset muuttujat X ja Y sekä parametrit P1 ja P2 vapaa muistitila Aliohjelman suoritusaikana varaama suuri taulukko Isotaulu[0:9999]. Käytössä myös aliohjelman suorituksen jälkeen, kunnes erikseen vapautetaan (’free’). (Ei ole toteutettu TTK-91:een!) SP HP 214 316 516 20999 21999

14 Datan tilavaraukset muistista
Globaalille datalle varataan ohjelman latauksen yhteydessä kaikkialla viitattavissa nimen (osoitteen) avulla Dynaamiselle datalle varataan keosta suorituksen aikana vapautetaan kun ei enää tarviat viittaus varauksen jälkeen osoitteen avulla Aliohjelmien paikalliselle datalle varataan pinosta kutsuhetkellä vapautetaan aliohjelmasta poistuttaessa viittaus aliohjelman sisällä suhteellisen osoitteen avulla int I; function Check(); Struct n = new Struct(); parametrit, paikalliset muuttujat 22/09/2018 Liisa Marttinen kevät 2005

15 Tiedon sijainti suoritusaikana
Rekisterissä (nopein) kääntäjä päättää milloin ja minkä muuttujien arvot pidetään rekisterissä konekäskyssä oleva tieto on myös (käsky) rekisterissä Välimuistissa (nopea) laitteisto hoitaa automaattisesti jollekin muistialueelle käyttäjä ei tiedä, milloin on muistissa, milloin välimuistissa (muistista haku on paljon hitaampaa!) 22/09/2018 Liisa Marttinen kevät 2005

16 Tiedon sijainti suoritusaikana (jatkuu)
Muistissa (hidas) kääntäjä valitsee sijaintipaikan globaali data datasegmenttiin, joka varataan ja alustetaan ohjelman latauksen yhteydessä pienet vakiot voidaan sijoittaa konekäskyjen vakio-osaan koodisegmentissä ohjelma sijoittaa suoritusaikana aliohjelmien paikalliset muuttujat, parametrit ohjelmointikielen tai käyttöjärjestelmän palveluohjelma sijoittaa suoritusaikana dynaaminen data keossa Levy, levypalvelin (liian hidas ohjelman suoritukseen) vaatii käyttöjärjestelmän varausohjelmien apua 22/09/2018 Liisa Marttinen kevät 2005

17 4.2. Ohjelmoinnin peruskäsitteiden toteutus konekielellä
Aritmeettinen lause miten toteutetaan laskutoimitukset Yksinkertaiset tietorakenteet yksiulotteiset taulukot, tietueet Ohjelman kontrolli – mikä käsky seuraavaksi valinta: if – then – else, case toisto: for-silmukka, while-silmukka aliohjelmat, virhetilanteet Monimutkaiset tietorakenteet listat, moniulotteiset taulukot pinot, keot 22/09/2018 Liisa Marttinen kevät 2005

18 LOAD R1, 100 R1 <- MEM[100] ADD R1, 101 R1 <- R1 + MEM[101]
Lasketaan muistipaikkojen 100 ja 101 sisältö yhteen, jaetaan summa muistipaikan 102 sisällöllä ja viedään tulos muistipaikkaan 100. LOAD R1, R1 <- MEM[100] ADD R1, R1 <- R1 + MEM[101] DIV R1, R1<- R1/MEM[102] STORE R1, MEM[100] <- R1 22/09/2018 Liisa Marttinen kevät 2005

19 Aritmeettinen lause tilan varaus koodi: LOAD R1, =46 tai LOAD R1, =5
A DC B DC C DC int a, b, c=5; ... b=46; a=5*b + c; .... koodi: LOAD R1, =46 STORE R1, B ... LOAD R1, B MUL R1, =5 LOAD R2, C ADD R1, R2 STORE R1 tai LOAD R1, =5 MUL R1, B ADD R1, C STORE R1, A

20 Globaalin taulukon tilan varaus ja käyttö
I DC X DC Table DS …. LOAD R1, =10 STORE R1, I LOAD R1, I LOAD R2, Table(R1) STORE R2, X int i, X; int Table[20]; ... i=10; X =Table[i]; I X Table Optimoiva kääntäjä osaisi jättää pois tämän ”LOAD R1, X” –käskyn!

21 Kontrolli - valinta konekielellä
Ehdoton hyppy JUMP, CALL ja EXIT, SVC ja IRET Hyppy laiterekisterin arvon perusteella (verrattuna nollaan) JZER, JPOS, ... Hyppy tilarekisterin arvon perusteella COMP JEQU, JGRE, … Ongelma vai etu: ttk-91:ssä kaikki ALU käskyt asettavat tilarekisterin ADD, SUB, MUL, DIV, NOT, AND, OR, XOR, SHL, SHR COMP R2, RAJA JEQU POIS 22/09/2018 Liisa Marttinen kevät 2005

22 If-then-else -valinta
? ? LOAD R1, A COMP R1, B JNLE Else LOAD R1, =5 STORE R1, X JUMP Done Else LOAD R1, Y Done NOP if (a<b) x = 5; else x = y;

23 Kirjoita konekielinen ohjelma, joka lukee näppäimistöltä luvun muuttujaan a ja tallettaa muistipaikkaan b luvun 1, jos luettu luku on suurempi kuin 5. Muuten b:n arvoksi tulee 2. a DS varataan tilat muistipaikoille b DS 0 …. IN R1, =KBD STORE R1, a if COMP R1, =5 if ( a == 5 ) JNGRE else a!=5, niin else-haaraan LOAD R2, =1 b=1 STORE R2, b JUMP ohi else LOAD R2, =2 b=2 STORE R2, b ohi …..

24 Case-lause LOAD R1, Lkm Vrt4 COMP R1,=4 JNEQ Vrt0 LOAD R2, =11
STORE R2, X JUMP Cont Vrt0 COMP R1, =0 JNEQ Def JUMP Cont Def LOAD R2,=0 Cont NOP Case-lause Switch (lkm) { case 4: x = 11; break; case 0: break; default: x = 0; } Onko järjestyksellä väliä? 22/09/2018 Liisa Marttinen kevät 2005

25 Toistolauseet For-step-until -silmukka Do-until -silmukka
Do-while -silmukka While-do –silmukka …. 22/09/2018 Liisa Marttinen kevät 2005

26 Esim. alkuehtoinen toisto lue a; while (a >0) {a = a-1;}
Millä a:n arvoilla vähennys tehdään? Esim. alkuehtoinen toisto lue a; while (a >0) {a = a-1;} Esim. loppuehtoinen toisto do {a= a-1;} until (a < 0) ? ehto silmukan alussa ehto silmukan lopussa ? 22/09/2018 Liisa Marttinen kevät 2005

27 Alkuehtoinen toisto konekielellä
IN R1, =KBD while COMP R1, =0 JNGRE R1, endwhile SUB R1, =1 OUT R1, =CRT JUMP while endwhile …. Mitä ohjelma tulostaa, kun sille syötetään luku 10?

28 Loppuehtoinen toisto konekielellä
IN R1, =KBD do SUB R1, =1 OUT R1, =CRT JPOS R1, do SVC SP, =HALT Mitä ohjelma tulostaa, kun sille syötetään luku 10?

29 For-lause I DC 0 … LOAD R1, =20 STORE R1, I Loop LOAD R2, =0
LOAD R1, I STORE R2, T(R1) LOAD R1, I ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop For-lause for (int i=20; i < 50; ++i) T[i] = 0; Voiko koodia optimoida? 22/09/2018 Liisa Marttinen kevät 2005

30 Loop STORE R1, 0(R2) MEM[R2] <-0 ADD R2, =1 seurava paikka
Nollataan peräkkäiset muistipaikat. Ensimmäisen muistipaikan osoite on R2:ssa ja viimeisen R3:ssa LOAD R1, = R<- 0 Loop STORE R1, 0(R2) MEM[R2] <-0 ADD R2, = seurava paikka COMP R2, R joko mentiin yli? JNGRE Loop jos ei, niin jatketaan 22/09/2018 Liisa Marttinen kevät 2005

31 While-do -lause LOAD R1, =12345 STORE R1, X X = 12345;
LOAD R3, =1 ; R3=Xlog LOAD R2, =10 ; R2=Y While COMP R2, R1 JNLES Done ADD R3, =1 MUL R2, =10 JUMP While Done STORE R3, Xlog ; talleta tulos STORE R2, Y X = 12345; Xlog = 1; Y = 10; while (Y < X) { Xlog++; Y = 10*Y } 22/09/2018 Liisa Marttinen kevät 2005

32 Summan laskeminen: Lasketaan muistipaikoissa olevien lukujen summa rekisteriin R1. LOAD R2, =100 LOAD R1, =0 Summaa ADD R1, 0(R2) MEM[0+R2] ADD R2, =1 COMP R2, =201 JLES Summaa SVC SP, =HALT 24/05/2005

33 LOAD R2, =100 indeksirekisteri
Lasketaan muistipaikoissa olevien lukujen summa rekisteriin R1 lähtien lopusta. LOAD R2, =100 indeksirekisteri LOAD R1, = lukujen summa Alku JNEG R2, Loppu kaikki laskettu? ADD R1, 100(R2) summataan SUB R2, = seuraava muistipaikka JUMP Alku laskemaan lisää Loppu SVC SP, =HALT lopetetaan 24/05/2005

34 . LOAD R2, =100 indeksirekisteri
Lasketaan muistipaikoissa olevien lukujen summa rekisteriin R1 lähtien lopusta LOAD R2, =100 indeksirekisteri LOAD R1, = lukujen summa Alku ADD R1, 100(R2) summataan SUB R2, = seuraava muistipaikka JNNEG R2, Alku laskemaan lisää SVC SP, =HALT lopetetaan

35 Koodin generointi Kääntäjän viimeinen työvaihe Koodin optimointi
voi olla jopa puolet kääntäjän työstä tuottaa alustukset, konekieliset lauseet, kontrollirakenteet Koodin optimointi käännös paljon hitaampaa suoritus paljon nopeampaa milloin muuttujan arvo rekisterissä, milloin muistissa ja jos rekisterissä, niin missä rekisterissä? 22/09/2018 Liisa Marttinen kevät 2005

36 Optimointia: for-silmukka
for (int i=20; i < 50; ++i) T[i] = 0; Optimointia: for-silmukka I DC 0 LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I STORE R2, T(R1) ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop I DC 0 LOAD R1, =20 LOAD R2, =0 Loop STORE R2, T(R1) ADD R1, =1 COMP R1, =50 JLES Loop 22/09/2018 Liisa Marttinen kevät 2005

37 Monimutkaisemman summan laskeminen
Lasketaan lukujen 1, …, neliöiden summa eli Si=120 i2 Javalla tämä käy seuraavasti: s=0; for (i = 1; i < 21; i++) s= s + i*i;

38 Konekielellä kääntäjän tyyliin:
s DC i DC Taas LOAD R1, i ;luvut väliltä [1, 20] MUL R1, R1 ;luvun neliö ADD R1, s ;lisätään summaa STORE R1, s ;summa talteen LOAD R1, i ;luvun ADD R1, =1 ; kasvatus yhdellä STORE R1, i ;luku talteen COMP R1, =21 ;joko luku 21? JLES Taas ; jos ei vielä SVC SP, =HALT

39 Konekielellä (fiksun) opiskelijan tyyliin:
käytetään rekistereitä LOAD R1, =20 ;luku i LOAD R2, =0 ;summalaskuri s Taas LOAD R3, R1 ;lasketaan luvun i MUL R3, R3 ;neliö i2 ADD R2, R3 ;lisätään se summaan SUB R1, = ; i =i-1 JPOS R1, Taas ;i > 0 ? SVC SP, =HALt

40 Virhetilanteisiin varautuminen
Prosessori tarkistaa käskyn suoritusaikana automaattisesti nollalla jaon (divide by xero) luvun ylivuodon (interger overflow) Muita tarkistuksia varten on generoitava konekielisiä käskyjä, jotka virhetilanteen havaitessaan aiheuttavat keskeytyksen tai käyttöjärjestelmän palvelupyynnön liian suuri tai liian pieni taulukon indeksi virheellinen metodi tai virheellinen operandi tai mitä tahansa haluaakin testata 22/09/2018 Liisa Marttinen kevät 2005

41 Taulukon indeksitarkistus
Tkoko EQU 100 Taulu DS Tkoko COMP R1, Tkoko ; indeksin tarkistus JLES Goodind ; indeksi kunnossa SVC SP, =Badind ;KJ hoitaa virhetilanteen Goodind LOAD R2, Taulu(R1) ; nyt voidaan lukea 22/09/2018 Liisa Marttinen kevät 2005

42 Taulukon indeksitarkistus
I DC 0 LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I JNNEG R1, ok1 SVC SP, =Badind ok1 COMP R1, Tkoko JLES ok2 SVC SP, = Badind ok2 STORE R2, T(R1) ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop for (int i=20; i < 50; ++i) T[i] = 0; Optimoiva kääntäjä osaa yhdistää silmukan ehdon ja indeksitarkistuksen!

43 Entä, jos taulukon indeksi ei alakaan nollasta?
for (int i=20; i < 50; ++i) T[i] = 0; T[20] T[21] T[22] T[49] T[48] …. T: T+1: T+2: T+28: T+29: I DC 0 T DS 30 ylaR DC 50 ; yläraja+1 alaR DC 20; alaraja Miten nyt hoidetaan indeksitarkistukset? 22/09/2018 Liisa Marttinen kevät 2005

44 Taulukonosan nollaus eli kun indeksi ei ala nollasta.
LOAD R1, =20 STORE R1, I Loop LOAD R2, =0 LOAD R1, I SUB R1, alaR STORE R2, T(R1) ADD R1, =1 LOAD R3, I COMP R3, =50 JLES Loop for (int i=20; i < 50; ++i) T[i] = 0; I DC 0 T DS 20 ylaR DC 50 ; yläraja+1 alaR DC 20; alaraja 22/09/2018 Liisa Marttinen kevät 2005

45 Moniulotteiset taulukot
Ohjelmakielessä määritellyt moniulotteiset taulukot toteutetaan konekielitasolla useimmissa arkkitehtuureissa aina yksiulotteisina koska käytössä on yleensä vain yksi indeksirekisteri Moniosainen toteutus laske alkion osoite yksiulotteisessa taulukossa ja käytä indeksoitua tiedon osoitusmoodia TAI laske alkion osoite muistissa ja käytä epäsuoraa tiedonosoitusmoodi 22/09/2018 Liisa Marttinen kevät 2005

46 2-ulotteiset taulukot int[][] T = new int[4][3] Y =T[i][j] T[0][0]
fyysinen rakenne T[0][0] T[0][1] T[0][2] T[1][0] T[1][1] …… T[3][2] Looginen rakenne 0, ,1 0,2 1, ,1, 1,2 2, , ,2 3, , ,2 22/09/2018 Liisa Marttinen kevät 2005

47 2-ulotteisen taulukon tarkistukset
T DS Trows DS Tcols DS LOAD R1, I MUL R1, Tcols ADD R1, J STORE R2, Y Esimerkki:I=1, J=2 22/09/2018 Liisa Marttinen kevät 2005

48 Moniulotteiset taulukot
Talletus riveittäin C, Pascal, Java? Talletus sarakkeittain Fortran 3- tai useampi ulotteiset samoin kuin 2-ulotteiset 22/09/2018 Liisa Marttinen kevät 2005

49 Linkitetty lista DATA 1 DATA 2 DATA 3 L P
Lista on tietorakenne, johon voidaan tallettaa tietoa. Koostuu solmuista, joissa tietoa ja viite seuraavaan solmuun. Viite solmuun on solmun ensimmäisen muistipaikan osoite

50 Lista muistiin talletettuna
100: 625: 727: 510: 510 data1 625 data2 727 data3 -1 P = 100 …. 510 511 625 626 727 728 510 data 1 625 data 2 727 data 3 -1

51 Listan alkioiden summan laskeminen
Käytetään epäsuoraa osoitusta summa DC 0 Sum LOAD R1, ;listan alku JNEG R1, Loppu ;tyhjä lista? LOAD R2, = ;summalaskurin nollaus Loop ADD ;data ADD R1, = ;seuraava muistipaikka LOAD ; seuraavan osoite JNNEG R1, Loop Loppu STORE R2, summa ; summa talteen SVC SP, =HALT

52 LOAD R1, 100 ADD R2, @R1 ADD R1, =1 R1<= MEM[100] = 510 R2= 0
100: 510 R1<= MEM[100] = 510 R2= 0 ADD R2<= R2 + MEM[R1] = MEM[510] = = 10 510: : 10 625 ADD R1, =1 R1 <= R1 +1 = 511

53 LOAD R1, @R1 Loop ADD R2, @R1 R1 = 511 R1 <= MEM[511] = 625 10 625
= 625 510: : 10 625 R2<= R2 + MEM[R1] = 10 + MEM[625] = =30 Loop ADD 625: 20 727

54 ADD R1, =1 LOAD R1, @R1 Loop ADD R2, @R1 R1 = 625 R1 <= R1+1 = 626
= 626 625: : 20 727 R1<= MEM[R1] = MEM[626] = 727 LOAD Loop ADD R2 <= R2 + MEM[R1] = 30 + MEM[727] = = 60 727: : 30 -1

55 ADD R1, =1 LOAD R1, @R1 R1 = 727 R1 <= R1+1 = 728 30 -1
= 728 727: 30 -1 R1<= MEM[R1] = MEM[728] = -1 LOAD JNNEG R1 Loop Loppu STORE R2, summa SVC SP, =HALT Summa: 60

56 Monimutkaiset tietorakenteet
2-ulotteinen taulukko Opisk, jonka jokainen alkio on tietue, jossa on kentät opiskelijan nimi opiskelijatunnus kurssin 6 harjoituskerralla tehdyt tehtävät kurssin 3 kokeesta saadut pistemäärät kurssin lopullinen arvosana kurssin suorituspäivä Miten tämä pitäisi tallettaa? Miten tietoihin viitataan? Mitä tarkistuksia pitäisi tehdä? 22/09/2018 Liisa Marttinen kevät 2005


Lataa ppt "4. Ohjelmointi konekielellä (TTK-91 ja Titokone)"

Samankaltaiset esitykset


Iklan oleh Google