Tarkastellaan seuraavaa ohjelmaa ja pinon tilaa ohjelman eri suoritusvaiheissa:
int itseisarvojen_summa(int x, int y); void itseisarvo(int *z); void main(void) { int a=-8; int b=-10; int s=0; ... s = itseisarvojen_summa (a,b); ... } int itseisarvojen_summa(int x, int y) { int sum; itseisarvo (&x); itseisarvo (&y); sum=x+y; return sum; }
void itseisarvo(int *z) { if (*z<0) { *z=-*z; } }
Pinon tila ennen itseisarvojen_summa()-funktion kutsua:
|
|
|
|
|
Pinon tila itseisarvojen_summa()-funktion kutsun jälkeen:
|
|
|
|
|
|
|
|
|
|
|
|
|
Pinon tila ensimmäisen itseisarvo()-funktion kutsun jälkeen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pinon tila itseisarvo()-funktion 1. suorituskerran jälkeen:
|
|
|
|
|
|
|
|
|
|
|
|
|
Pinon tila itseisarvo()-funktion 2. suorituskerran jälkeen:
|
|
|
|
|
|
|
|
|
|
|
|
|
Pinon tila juuri ennen itseisarvojen_summa()-funktiosta paluuta:
|
|
|
|
|
|
|
|
|
|
|
|
|
Pinon tila itseisarvojen_summa()-funktion suorituksen jälkeen:
(Paluuarvo 18 siirretään AX-rekisterin kautta pääohjelman s-muuttujan arvoksi.)
|
|
|
|
|
|
|
Ohjelma on palannut muistinkäytön kannalta lähtötilaansa. Kun ohjelmasta poistutaan, käyttöjärjestelmä poistaa ohjelman loputkin tilanvaraukset.