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