× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: RE: *PSSR subroutine and the call stack
  • From: Tim McCarthy <TimM@xxxxxxxxxxxxxxxxxx>
  • Date: Mon, 10 May 1999 11:48:36 -0400

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 thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 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.