Actual Call Basics
- Push actuele parameters
- Push PC
- Push BP
- Copy SP to BP
- Allocate local space
Return Basics
- Copy BP to SP
- Pop old BP to BP
- Pop Returnaddress to PC
- Pop parameter space
Dit is wat je zeker moet begrijpen.
Bij een functie oproep zal vanalles op de stack gezet worden. Bij het returnen van de functie, zal alles van de stack gehaald worden, zodat je terug op het vorige niveau zit.
Bij een oproep zal je dus eerst alle actuele parameters pushen. Hierdoor zal de functie die opgeroepen wordt, aan de waarden van de actuele parameters kunnen raken.
Als er by reference wordt doorgegeven zal er een pointer op de stack gezet worden in plaats van een kopie van de waarde.
Na deze actuele parameters wordt de PC (Program Counter) op de stack gepushed. Dit is nodig om bij het returnen te weten waar je zat.
Ook de huidige BP (Base Pointer) wordt op de stack gezet. Dit om te zien waar het vorige niveau staat op de stack. (Dit zorgt voor oneigenlijk stackpeecking omdat je dan niet meer enkel push/pop doet). Door deze BP kan je dus naar hogere niveau's springen en dus globale variabelen steeds blijven zien.
Dan wordt de SP (Stack Pointer) gekopieerd naar de BP. Om het nieuwe niveau aan te duiden.
En dan worden alle lokale variabelen ook op de stack geplaatst. Dit omdat je anders bij een functie oproep in deze functie, de lokale variabelen niet zou kunnen zien.
Bij het terugkeren van de functie wordt dit alles natuurlijk omgekeerd, en terug naar voor de functie oproep hersteld.
Je haalt lokale variablen van de stack aangezien je die niet meer nodig hebt.
Je hersteld BP naar waarde voor oproep, hetzelfde voor SP.
En je haalt alle parameters die op de stack gepushed werden om de functie oproep tot stand te brengen, er terug af.
Je kreeg zo'n oefeningen blad daarbij. (Wij kregen dat toch vorig jaar)
Je moet dat eens goed bezien, met wat hier staat in het achterhoofd. Zie dat je alles wat daar gebeurd, goed begrijpt. En voor de rest staat alles wat je moet weten wel in de cursus.