Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

5. Aliohjelmien toteutus

Samankaltaiset esitykset


Esitys aiheesta: "5. Aliohjelmien toteutus"— Esityksen transkriptio:

1 5. Aliohjelmien toteutus
5.1 Aliohjelmat ja parametrit 5.2 Aktivointitietue ja aktivointitietuepino 5.3 Esimerkkejä aktiv 5.4. Rekursio 27/12/2018 Liisa Marttinen kevät 2005

2 5.1 Aliohjelmat ja parametrit
Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri parametrit funktio parametrit, paluuarvo metodi parametrit, voi olla myös paluuarvo Näitä vastaavat konekielen käsitteet aliohjelma parametrit, paluuarvot 27/12/2018 Liisa Marttinen kevät 2005

3 Muodolliset ja todelliset parametrit
muodolliset parametrit aliohjelman koodissa määritellyt minkä tyyppisiä parametreja ja missä järjestyksessä kutsussa on annettava paluuarvon tyyppi todelliset parametrit ja paluuarvo kutsuttaessa sijoitetaan todelliset parametrit kutsuun funktio palauttaa paluuarvon int Summa (int x, int y); Tulosta (char *p); Tulosta(Taulu); i=Summa(a,b); 27/12/2018 Liisa Marttinen kevät 2005

4 Parametrityypit arvoparametri viiteparametri
esim. Javassa ja C:ssä kaikki parametrit aliohjelmalle välitetään parametrin arvo eli aliohjelma saa käyttöönsä kopion parametrista parametri voi olla muuttuja, vakio, lauseke, olioviite, osoitin aliohjelma voi lukea ja muuttaa vain kopion arvoa ei todellisen parametrin arvoa viiteparametri Pascalissa, Adassa, C++:ssä myös aliohjelmalle välitetään parametrin osoite muuttujan, osoitinmuuttujan, tietueen, aliohjelman ,... osoite aliohjelma voi lukea ja muuttaa todellisen parametrin arvoa 27/12/2018 Liisa Marttinen kevät 2005

5 Parametrityypit (2) Tätä ei käsitellä jatkossa! nimiparametri
välitetään parametrin nimi (merkkijono) Algol-ohjelmointikielessä merkkijono kuvataan arvoksi kutsuhetkellä ja semantiikka määräytyy vasta kutsuhetkellä muodollinen nimiparametri korvataan todellisella parametrilla eli merkkijonolla joka viittauskohdassa sivuvaikutuksia! makroissa käytössä void Vaihda(name int x,y) { int t; t:=x; x:=y; y:=t; } Vaihda (i, T[i]); ; 2  T[2] t:=i; i:=T[i]; T[i]:=t i=2, T[2]=5; => t=2, i=5, T[5]=2 Vaihda (i,j); t:=i;i:=j;j:=t 27/12/2018 Liisa Marttinen kevät 2005

6 Arvoparametri Aliohjelmalla käytössä vain kopio todellisesta parametrista (sen arvo) => ei voi muuttaa todellisen parametrin arvoa. Jos parametrina on osoitinmuuttuja, niin sen osoittaman muuttujan arvoa voi muuttaa, mutta ei itse osoitinmuuttujan arvoa! 10 Count (a, p ); a=6, p 100 int Summa (int x, int y) { int z; z= x+y; return z; { Summa (a,b); a=3, b=2 x=3 y=2 Count (int x, * Ptrb) { ...... x=10; *Ptrb =10 { x=6 Ptrb 10 27/12/2018 Liisa Marttinen kevät 2005

7 Viiteparametri Välitetään todellisen parametrin osoite.
Add(x,Sum); Välitetään todellisen parametrin osoite. Aliohjelma voi muuttaa parametrin osoittaman muuttujan arvoa. Välitetty viiteparametrina pääohjelman muuttujan A osoite Pa. Aliohjelmassa Ali käskyt Ali LOAD ADD R2, =10 STORE 10 A=100: Ali(Pa); Pa=100: A=100: 20 27/12/2018 Liisa Marttinen kevät 2005

8 Parametrien välitys konekielessä
Parametrit vältetään normaalisti pinon avulla pääohjelmassa ennen aliohjelman kutsua parametrit viedään pinoon arvoparametrista parametrin arvo viiteparametrista parametrin osoite aliohjelmassa (usein alussa) parametrit luetaan pinosta aliohjelman lopussa paluuarvot (’tulosparametrit’) talletetaan pinoon. 27/12/2018 Liisa Marttinen kevät 2005

9 Aliohjelman toteutuksessa tarpeen
paluuosoite aliohjelmasta palattava kutsua seuraavaan käskyyn aliohjelman parametrien välitys paluuarvon (paluuarvojen) välitys rekistereiden käyttö kutsuvalla ja kutsutulla aliohjelmalla käytössä sama rekisterijoukko => kutsuvan arvot talteen tilavaraukset aliohjelman paikallisille muuttujille dynaaminen muistivaraus pinosta 27/12/2018 Liisa Marttinen kevät 2005

10 Aktivointitietue aliohjelman toteutusmuoto (TTK-91)
paluuarvo(t) parametri x parametri y vanha PC vanha FP paikall. m b paikall. m a vanha rek. arvo Ohjelmakoodit ja globaalit muuttujat aliohjelman toteutusmuoto (TTK-91) funktion paluuarvot kaikkien parametrien arvot paluuosoite kutsujan aktivointitietueen osoitin (vanha FP) aktivointitietueen osoitin FP kutsuhetkellä paikalliset muuttujat talteen laitettuja rekistereiden arvoja 27/12/2018 Liisa Marttinen kevät 2005

11 Osoittimet SP ja FP SP osoittaa pinon huipulle eli pinon päällimmäiseen alkioon ohjelman suorituksen alussa pino on tyhjä ja SP osoittaa kääntäjän varaaman koodille ja globaaleille muuttujille varaaman alueen loppuun FP osoittaa (ali)ohjelman ympäristön pinossa osoittaa (ali)ohjelman aktivointitietuetta edeltävän muistipaikan eli edellisen aktivointitietueen osoitteeseen ohjelman alussa viimeiseen ohjelman käskyyn ens. globaalimuuttujan tilanvaraus paikkaan FP+1 27/12/2018 Liisa Marttinen kevät 2005

12 …. Pääohjelma: CALL SP, Alia Alia: CALL SP, Alib Alib: EXIT SP, 2
aliohjelma Alia Pääohjelma aliohjelma Alib CALL SP, Alia CALL SP, Alib …… EXIT SP, 1 EXIT SP, 2 92: CALL SP, Alia 85: Pinoon talletetaan aliohjelmaan siirtymiseen ja sieltä palaami- seen liittyvää tietoa Pääohjelma: mennään suorittamaan aliohjelman Alia 1. käskyä 100: Alia: 132: CALL SP, Alib mennään suorittamaan aliohjelman Alib 1. käskyä 210: Alib: EXIT SP, 2 palataan aliohjelmaan Alia, kutsun jälkeiseen kohtaan (= mp 133)

13 Aliohjelmaan siirryttäessä on:
varattava tilaa pinosta paluuarvoa varten vietävä parametrit pinoon talletettava paluuosoite pinoon (= vanha PC) talletettava pinoon FP:n vanha arvo asetettava FP osoittamaan uuden paikallisen tilanvarauksen alkuun PC:n arvoksi aliohjelman 1. käskyn osoite rekisterien talletus pinoon CALL-käsky hoitaa Kutsuva rutiini hoitaa

14 Alia:n aktivointitietue
koko ohjelman viimeinen käsky FP ohjelman alussa tilanvaraukset valekäskyillä Alia:n aktivointitietue - funktion palautusarvo - parametrit - paluuosoite - edellinen aktivointitietue - Alian omat tilanvaraukset FP > Alib:n aktivointitietue - funktion palautusarvo - parametrit - paluuosoite - edellinen aktivointitietue - Alib:n omat varaukset SP > Pinon tila ennen Alib:sta poistumista

15 Kutsujan toiminnot varaa tilaa paluuarvo(i)lle
PUSH SP, =0 vie pinoon parametrit (arvot tai osoitteet) PUSH SP, =200 ; arvo 200 PUSH SP, =Taulu ; Taulu:n osoite kutsu aliohjelmaa CALL SP, Alia 27/12/2018 Liisa Marttinen kevät 2005

16 CALL-käskyn toiminnot
CALL SP, ’aliohjelma’ tallettaa pinoon paluuosoitteen (PC: arvo) ympäristöosoitteen (FP:n arvo) asettaa uudet arvot PC:lle (= aliohjelman 1.käskyn osoite, joka on käskyn 2. operandina) FP:lle (= pino-osoittimen SP arvo)

17 Aliohjelmassa varataan pinosta tilaa paikallisille muuttujille
talletetaan pinoon aliohjelman käyttämien rekisterien arvot (suoritetaan aliohjelman varsinaiset toiminnot) palautetaan rekisterien arvot vapautetaan paikallisten muuttujien tilat aliohjelman koodin alussa alkutoiminnot (prologi) ja lopussa lopetustoiminnot (epilogi) 27/12/2018 Liisa Marttinen kevät 2005

18 Paluu takaisin pääohjelmaan
talteen laitetun paluuosoitteen arvo PC:n uudeksi arvoksi FP-osoitin osoittamaan taas kutsuneen ohjelman aktivointitietuetta parametrien varaaman tilan vapauttaminen paluuarvon ottaminen pinosta EXIT-käsky hoitaa kutsuva ohjelma hoitaa 27/12/2018 Liisa Marttinen kevät 2005

19 EXIT-käsky EXIT SP, ’param. lkm’ palauttaa
paluuosoitteen (PC: arvo) ympäristöosoitteen (FP:n arvo) vähentää pino-osoitinta parametrien määrällä 27/12/2018 Liisa Marttinen kevät 2005

20 Kutsuva ohjelma ottaa paluuarvon pinosta
POP SP, R2 ; 2. operandi aina rekisteri STORE R2, Tulos ; paluuarvon talteen OUT R2, =CRT; tulostetaan 27/12/2018 Liisa Marttinen kevät 2005

21 Esimerkki: Yksinkertainen aliohjelma
Aliohjelma KulutaAikaa void KulutaAikaa(int Lkm) { int i; for (i=0; i <= Lkm; i++) Tulosta (i); } Aliohjelmalla on yksi arvoparametri Pääohjelma kutsuu aliohjelmaa kahdesti arvoilla 1000 ja 5.

22 0: PUSH SP, =1000 1: CALL SP, KulAi 2: PUSH SP, =5 3: CALL SP, KulAi
Pääohjelma 0: PUSH SP, =1000 1: CALL SP, KulAi 2: PUSH SP, =5 3: CALL SP, KulAi 4: SVC SP, =HALT Ei staattisia tilanvarauksia Parametrin arvo välitetään pinossa Rekistereiden talletusta ei tarvita

23 Aliohjelma KulAi: 5: KulAi LOAD R1, =1 6: Viela COMP R1, -2(FP)
7: JGRE Pois 8: OUT R1, =CRT 9: ADD R1, =1 10: JUMP Viela 11: Pois EXIT SP, =1 Aliohjelma ei tarvitse paikallisia tilanvarauksia

24 Tilanne ennen suorituksen alkamista
Pääohjelma 0: PUSH SP, =1000 1: CALL SP, KulAi 2: PUSH SP, =5 3: CALL SP, KulAi 4: SVC SP, =HALT PC = 0 5: KulAi LOAD R1, =1 6: Viela COMP R1, -2(FP) 7: JGRE Pois 8: OUT R1, =CRT 9: ADD R1, =1 10: JUMP Viela 11: Pois EXIT SP, =1 Aliohjelma KulAi SP =11 FP =11 Pino

25 0: PUSH SP, =1000 Pääohjelma 0: PUSH SP, =1000 1: CALL SP, KulAi
4: SVC SP, =HALT PC = 1 5: KulAi LOAD R1, =1 6: Viela COMP R1, -2(FP) 7: JGRE Pois 8: OUT R1, =CRT 9: ADD R1, =1 10: JUMP Viela 11: Pois EXIT SP, =1 Aliohjelma KulAi FP =11 SP =12 Pino 12:

26 1: CALL SP, KulAi Pääohjelma 0: PUSH SP, =1000 1: CALL SP, KulAi
4: SVC SP, =HALT 5: KulAi LOAD R1, =1 6: Viela COMP R1, -2(FP) 7: JGRE Pois 8: OUT R1, =CRT 9: ADD R1, =1 10: JUMP Viela 11: Pois EXIT SP, =1 Aliohjelma KulAi PC = 5 Pino 12: 13: (PC) 14: (FP) FP =14 SP =14

27 6: Viela COMP R1, -2(FP) Pääohjelma 0: PUSH SP, =1000
1: CALL SP, KulAi 2: PUSH SP, =5 3: CALL SP, KulAi 4: SVC SP, =HALT 5: KulAi LOAD R1, =1 6: Viela COMP R1, -2(FP) 7: JGRE Pois 8: OUT R1, =CRT 9: ADD R1, =1 10: JUMP Viela 11: Pois EXIT SP, =1 Aliohjelma KulAi PC = 7 verrataan tähän Pino Parametri on paikassa FP-2 12: 13: (PC) 14: (FP) FP =14 SP =14

28 11: Pois EXIT SP, =1 Pääohjelma 0: PUSH SP, =1000 1: CALL SP, KulAi
4: SVC SP, =HALT PC = 2 5: KulAi LOAD R1, =1 6: Viela COMP R1, -2(FP) 7: JGRE Pois 8: OUT R1, =CRT 9: ADD R1, =1 10: JUMP Viela 11: Pois EXIT SP, =1 Aliohjelma KulAi FP = 11 SP = 11 Pino

29 Arvo- ja viiteparametri aliohjelmassa
Laadi aliohjelma Laske, joka suorittaa laskutoimituksen x=n+10. Luku n annetaan aliohjelmalle arvoparametrina ja tulos x palautetaan pääohjelmalle viiteparametrina. Pääohjelma kutsuu aliohjelmaa kerran parametreina n=15 ja M, joka on se pääohjelman muuttuja, johon tulos halutaan. Pääohjelma tulostaa näytölle tuloksen.

30 Pääohjelman koodi M DS 00: Main LOAD R1, =15 ensin parametrit pinoon: 01: PUSH SP, R luku 15 pinoon 02: PUSH SP, =M muuttujan M osoite 03: CALL SP, Laske aliohjelmakutsu 04: LOAD R2, M R2<= tulos 05: OUT R2, =CRT tulostus näytölle 06: SVC SP, =HALT

31 Aliohjelman koodi n EQU -3 x EQU -2 k EQU 10
07:Laske PUSH SP, R3 ; rekisterin R3 arvo talteen 08: LOAD R3, n(FP) ; R3<= arvoparametri 09: ADD R3, =k ; R3<= R3+10 10: STORE ; talletus viiteparametriin 11: POP SP, R ; palautetaan R3 ennalleen 12: EXIT SP, = ;paluu: 2 parametria

32 Muistin sisältö ohjelmakutsun jälkeen
0: Ohjelma + aliohjelma 10: varattu muuttujalle, M = 11 11: (M) arvoparametri -3(FP) 12: 15 -2(FP) 13: 11 (=M) viiteparametri 14: 4 (= vanha PC) 15: 10 (= vanha FP) SP, FP

33 Muistin sisältö aliohjelmasta paluun jälkeen.
0: Ohjelma + aliohjelma PC = 4 FP 10: varattu muuttujalle, M = 11 SP 11: 25 12: 15 13: 11 (=M) Pinoon jäänyttä ’roskaa’. 14: 4 (= vanha PC) 15: 10 (= vanha FP)

34 Monipuolinen esimerkki
pääohjelma kutsuu aliohjelmia ja tulostaa niiden laskemia arvoja kaksi aliohjelmaa proseduuri laskee summaa käyttäen pääohjelman globaaleja muuttujia, funktion palauttamaa arvoa ja arvoparametria, summa talletetaan viiteparametrina annettuun muuttujaan funktio palauttaa arvoparametrina annetun luvun neliön

35 X = Sqr(X) + Y +Z+5; funktio Sqr(int n) int Sqr(int n) { return n*n; }
proseduuri Summa (int &X, int Y) void Summa (int &X, int Y) { int Z; Z = A + B; // A ja B globaaleja muuttujia X = Sqr(X) + Y +Z+5;

36 Pääohjelma: int A, B; lue luku A; B = Sqr(2); tulosta B; Summa(B,A);

37 Pääohjelma: A DS 1 B DS 1 00: Main IN R3, =KBD 01: STORE R3, A 02: PUSH SP, =0 ;paluuarvolle paikka 03: PUSH SP, =2 ; arvoparametri 04: CALL SP, Sqr 05: POP SP, R2 ; paluuarvo muuttujaan B 06: STORE R2, B

38 07: OUT R2, =CRT 08: PUSH SP, =B 09: PUSH SP, A 10: CALL SP, Summa
Pääohjelma jatkuu: 07: OUT R2, =CRT 08: PUSH SP, =B 09: PUSH SP, A 10: CALL SP, Summa 11: LOAD R2, B 12: OUT R2, =CRT 13: SVC SP, =HALT

39 n EQU -2 Aliohjelmat Sqr_Ret EQU -3 14: Sqr LOAD R3, n(FP)
15: MUL R3, R3 16: STORE R3, Sqr_Ret(FP) 17: EXIT SP, =1

40 X EQU -3 Y EQU -2 Z EQU 1 18: Summa PUSH SP, =0 ;tilaa Z:lle
19: LOAD R1,A 20: ADD R1, B 21: STORE R1,Z(FP) ;Z= A+B 22: PUSH SP, = ;paluuarvo 23: PUSH ;arvoparametri 24: CALL SP, Sqr

41 25: POP SP, R3 26: ADD R3, Y(FP) 27: ADD R3, =5 28: ADD R3, Z(FP)
Proseduuri Summa jatkuu: 25: POP SP, R3 26: ADD R3, Y(FP) 27: ADD R3, =5 28: ADD R3, Z(FP) 29: STORE 30: EXIT SP, =2

42 pääohjelma Sqr CALL Sqr SVC SP, =HALT Summa CALL SP,Sqr EXIT SP, =1
CALL SP, Summa CALL Sqr SVC SP, =HALT EXIT SP, =2 Summa

43 Pino ohjelman alussa Ohjelma + aliohjelmat 0: 30: FP 31:
(A) eli paikka A:lle (B) eli paikka B:lle 32: SP

44 Pino ohjelman suoritettua käskyt
PUSH SP, =0 ja PUSH SP, =2 Ohjelma + aliohjelmat 0: 30: FP 31: (A) eli paikka A:lle 32: (B) eli paikka B:lle SP 33: 0 (paluuarvolle) 34: (arvoparametri)

45 Pino ohjelman suoritettua aliohjelma-
kutsun CALL SP, Sqr Ohjelma + aliohjelmat 0: 30: FP 31: (A) eli paikka A:lle 32: (B) eli paikka B:lle SP 33: 0 (paluuarvolle) 34: (arvoparametri) 35: 5 (vanha PC) 36: (vanha FP) -2(FP) -3(FP)

46 Pino aliohjelman Sqr suoritettua
käskyn STORE R3, Sqr_Ret(PF) Ohjelma + aliohjelmat 0: 30: FP 31: (A) eli paikka A:lle 32: (B) eli paikka B:lle SP 33: 4 (paluuarvo) 34: (arvoparametri) 35: 5 (vanha PC) 36: (vanha FP) -2(FP) -3(FP)

47 Pino aliohjelmasta Sqr paluun jälkeen (EXIT SP, =1)
aliohjelmat 0: 30: FP 31: (A) eli paikka A:lle 32: (B) eli paikka B:lle SP 33: 4 (Sqr:n paluuarvo) 34:

48 Pino pääohjelman käskyjen POP SP, R2 ja STORE R2,B jälkeen:
aliohjelmat 0: (A) eli paikka A:lle (B) eli paikka B:lle: 4 30: FP 31: 32: SP 33: 34:

49 Pino pääohjelman käskyjen PUSH SP,=B, PUSH SP, A ja CALL SP, Summa jälkeen
aliohjelmat 0: 30: FP 31: (A) eli paikka A:lle 32: (B) eli paikka B:lle: 4 SP 33: 32 (viiteparametri) 34: A (luettu luku) 35: 11 (vanha PC) 36: (vanha FP) -2(FP) -3(FP)

50 Pino aliohjelman Summa alussa: PUSH SP,=0
0: Ohjelma + aliohjelmat 30: (A) eli paikka A:lle 31: (B) eli paikka B:lle: 4 32: 33: 32 34: A 35: 11 (vanha PC) FP 36: 30 (edell. FP) 37: 0 (Z:n tilanvaraus) SP

51 Ohjelma + aliohjelmat Pino aliohjelman Summa alussa: STORE R1, Z(FP)
0: 30: FP 31: (A) eli paikka A:lle 32: (B) eli paikka B:lle: 4 SP 33: 32 34: A 35: 11 (vanha PC) 36: 30 (edell. FP) 37: A+B

52 Ohjelma + aliohjelmat Pino Summan kutsuttua Sqr:ää: CALL SP, Sqr 32 0:
30: @X(FP) = MEM[MEM[33]] = MEM[32] = 4 (A) eli paikka A:lle 31: (B) eli paikka B:lle: 4 32: 33: 32 X(FP) = -3(FP) = 36-3 = 33 34: A 35: 11 (vanha PC) 36: 30 (edell. FP) PUSH 37: (Z): A+B arvoparametri aliohjelman itse viiteparametrina saamasta 38: 0 (paluuarvolle) 4 39: 40: 25 (PC) FP 41: SP 36 (FP)

53 Ohjelma + aliohjelmat Pino kun Summaan palattu Sqr:stä: EXIT SP, =1 0:
30: (A) eli paikka A:lle 31: (B) eli paikka B:lle 32: 33: 32 34: A 35: 11 (vanha PC) 36: 30 (edell. FP) FP 37: A+B 38: 16 (paluuarvo) SP 39: 40: 41:

54 Pino kun Summassa suoritettu POP SP, R3
0: Ohjelma + aliohjelmat 30: (A) eli paikka A:lle 31: (B) eli paikka B:lle 32: 33: 32 34: A 35: 11 (vanha PC) 36: 30 (edell. FP) FP 37: A+B SP 38: 39: 40: 41:

55 Ohjelma + aliohjelmat Pino kun Summassa suoritettu STORE R3, @X(FP) 0:
30: (A) eli paikka A:lle 31: MEM[MEM[33]] = MEM[32] <= R3 (B) eli paikka B:lle 32: 33: 32 X(FP) = -3(FP) =36-3 = 33 34: A 35: 11 (vanha PC) 36: 30 (edell. FP) FP 37: A+B SP 38: 39: 40: 41:

56 Ohjelma + aliohjelmat Summasta palattu pääohjelmaan: EXIT SP, =2 0:
30: FP (A) eli paikka A:lle 31: Summan saama arvo 32: SP 33: 34: 35: 36: 37: 38: 39: 40: 41:

57 5.4. Rekursiivinen aliohjelma
aliohjelma kutsuu itseään jatkuvasti muuten toiminta ei eroa mitenkään joka kutsukerralla muodostuu uusi aktivointitietue johon varataan tilat paikallisille muuttujille parametreille ja paluuarvoille Joka kutsukerralla suoritetaan sama koodi, mutta kunkin suorituksen dataa varten on oma aktivointitietue. 27/12/2018 Liisa Marttinen kevät 2005

58 Esimerkki rekursiosta: kertoman laskeminen
Kutsu: K DC ; koodataan k=fPow(4) PUSH SP,=0 ; paluuarvo PUSH SP, =4 ; parametri CALL SP, fPow; POP SP, R1 STORE R1, K int fPow(int n) { if (n==1) return (1); else return (n*fPow(n-1)); void main () { …. k = fPow(4);

59 Rekursion toteutus parRet EQU -3 parN EQU -2
fPow PUSH SP, R1 ; talteen LOAD R1, parN(FP) COMP R1, =1 JEQU One ; return fPow(N-1)*N SUB R1, =1 PUSH SP, =0 PUSH SP, R1 CALL SP, fPow POP SP, R1 MUL R1, parN(FP) One STORE R1, parRet(FP) POP SP, R1 EXIT SP,=1 int fPow(int n) { if (n==1) return (1); else return (n*fPow(n-1)); void main () { …. k = fPow(4); paluuarvo parametri n vanha PC vanha FP vanha R1 FP SP

60 KJ-palvelun kutsu toimii samalla tavalla kuin aliohjelman kutsu
PUSH SP, =0 PUSH SP, =FileBuffer PUSH SP, CharCount PUSH SP, FilePtr SVC SP, ReadFile POP SP, R1 JNZER R1, FileTrouble …. toimii samalla tavalla kuin aliohjelman kutsu SVC SP, =ReadFile, IRET Paluuarvo (OK =0, virhe >0) 27/12/2018 Liisa Marttinen kevät 2005


Lataa ppt "5. Aliohjelmien toteutus"

Samankaltaiset esitykset


Iklan oleh Google