% sum-pushj-rek.mms LOC #100 % % Dieses Unterprogramm berechnet rekursiv die Summe der Zahlen 1..sum_n % sum_n IS $0 % Laufvariable n wird mit jedem Rekursionsschritt verringert adr_rJ IS $1 % zum Zwischenspeichern der Rücksprungadresse res IS $2 % Ergebnis vom Rekursionsschritt tmp IS $3 % speichert Ergebnis von CMP sum SUB tmp,sum_n,1 % (n-1) für den nächsten Rekursionsschritt vorbereiten BNP tmp,sum_end % falls tmp < 1, beende Rekursion GET adr_rJ,rJ % Adresse der Rücksprungadresse sichern (WICHTIG!!) PUSHJ res,sum % Unterprogramm sum rekursiv aufrufen ADD sum_n,sum_n,res % ergebnis = n + res PUT rJ,adr_rJ % Rücksprungadresse zurückspeichern sum_end POP 1,0 % Wert von $0 zurückliefern % Das Hauptprogramm n IS $1 Main SET n,6 % setze n auf Endwert 6 PUSHJ $0,sum % springe zum Unterprogramm sum und übergebe $1 % hier könnte noch eine Ausgabe von $0 folgen... TRAP 0,Halt,0 % beende Programm