multiplizieren etc. hat nichts mit den Stack direkt zu tun, das ist aufgabe des Programmierss zu wissen was er rechnen will.
Letzendlich ist der Stack ähnlich wie ein Wäschestabel. Man kann nur oben was drauf legen und auch nur von oben was runternehmen.
Wenn eine Procedure aufgerufen wird, so wird auf dem Stack eben die Adresse abgelegt wo es nach dem Aufruf der Procedure weiter geht.
Bsp.:
Delphi-Quellcode:
//Beim Aufruf von ShowMessage wird auf dem Stack "mein Text" abgelegt und die Adresse wo der Befehl "Beep" steht
//Nach dem ShowMessage also fertig ist wird "mein Text" vom Stack runter genommen und dann die Adresse von "Beep" und dort wird dann hinn gesprungen (ist jetzt alles sehr vereinfacht ausgedrückt
ShowMessage('mein Text');
beep;
Bei Rekursion sieht es nicht anders aus
Delphi-Quellcode:
procedure DoSomeThing();
begin
DoSomething();
end;
Das ist eine Endlosrekursion und irgendwann läuft der Stack über weil immer wieder eine Rücksprungadresse etc. auf den Stack gelegt wird aber nie wieder was runter genommen wird.