Example of using the linkage stack

In this example, an AR mode target program receives control from another program, either in primary ASC mode or AR mode. The calling program can make the call through the following two instructions:
L     15,=V(PGM)
BASR  14,15
The target program uses the linkage stack to save the calling program's registers. It uses the STORAGE macro to obtain storage for its own save area. The code is in 31-bit addressing mode and is reentrant.
PGM   CSECT
PGM   AMODE  31
PGM   RMODE ANY
      BAKR   14,0                   SAVE CALLER'S ARS AND GPRS
*                                   AND ASC MODE ON LINKAGE STACK
      SAC    512                    SWITCH TO AR ADDRESSING MODE
      LAE    12,0(15,0)             SET UP PROGRAM BASE REGISTER
*                                   AND ADDRESSING REGISTER
      USING PGM,12
      STORAGE OBTAIN,LENGTH=72      GET MY REENTRANT SAVEAREA
      LAE   13,0(0,1)               PUT MY SAVEAREA ADDRESS IN AR/GPR13
      MVC   4(4,13),=C'F1SA'        PUT ACRONYM INTO MY SAVEAREA BACKWARD
*                                   POINTER INDICATING REGS SAVED ON STACK
*   END OF ENTRY CODE, BEGIN PROGRAM CODE HERE
⋮
*   BEGIN EXIT CODE
      LR   1,13                     COPY MY SAVEAREA ADDRESS
      STORAGE RELEASE,ADDR=(1),LENGTH=72 FREE MY REENTRANT SAVEAREA
      SLR   15,15                   SET RETURN CODE OF ZERO
      PR                            RESTORE CALLER'S ARs AND GPRS 2-14
*                                   AND ASC MODE AND RETURN TO CALLER
      END