|
O.K. since there seems to be interest in seeing how this works here's what happens from the MI level. When you create a subroutine you actually create an entry point (a tag) and an instruction pointer. When you execute a subroutine, the instruction pointer for that routine is set to the current instruction +1and you branch to the entry point. At the end of the routine you branch to the instruction set when you called the routine. (This branching is really a CALLI instruction but that's what it does.) The instruction pointer is set at run time not compilation. *PSSR is not really a subroutine at all; it is not defined with a entry point but it does have it's own return instruction pointer. When you execute PSSR in a calc line you 1) set an indicator to tell PSSR to return to the IP address 2) you set the IP to a tag that's created immediately following the branch instruction 3) you branch. If you don't specify a return point and PSSR is invoked by an exception it branches to the RPG .ERR point otherwise it branches to *DETC *CANCL or whatever. > -----Original Message----- > From: John Hall [SMTP:jhall@hillmgt.com] > Sent: Monday, May 10, 1999 6:16 AM > To: MIDRANGE-L@midrange.com > Subject: Re: *PSSR subroutine and the call stack > > Pete Hall wrote: > > > > At 12:07 05/09/1999 , Albert York wrote: > > >Now I'm curious. In my experience, a subroutine call involved > saving the > > >current address (usually on a stack), branching to the subroutine, > and > > >branching back to the saved address ( plus 1 instruction) at the > end of the > > >subroutine. If RPG doesn't do it this way, how does it do it? > > > > Several years ago, I had a program that did something like this: > > > > mainline calls Sub A > > Sub A calls Sub B > > Sub B calls Sub C > > Sub C calls Sub A > > Sub A returns to mainline (not Sub C) - this was not the desired > behavior > > > > >From this experience, I surmise that subroutine returns are > implemented as > > branches to a program counter address which is set at the time the > > subroutine is first invoked. RPG doesn't complain about recursion > either. > > It just doesn't work. > > Pete Hall > > From everything written here I think the "RETURN" or branch statement > is > probably resolved at compile time. > So that the exsr was implemented strictly as a pair of goto statements > and is used for readability only. > > ex > > exsr subA +--- | This is the Midrange System Mailing List! | To submit a new message, send your mail to MIDRANGE-L@midrange.com. | To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com. | To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: david@midrange.com +---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.