[comp.lang.asm370] SAVE area offset zero

TROTH@RICEVM1.RICE.EDU (Rick Troth) (08/21/90)

        In the save area ... registers 14 thru 12 are placed at offset 12,
which means R14 goes to +12, R15 goes to +16, R0 goes to +20, R1 goes to +24,
and so on.  Offset 4 points to the next SAVE area, right?  And offset 8 to
the previous SAVE area, right?

        So what does offset zero refer to?  If you say "R13 goes there",
I won't shoot you.  Pointing to itself would provide validity checking,
but is that what offset zero does?  If not,  then what?

 Rick Troth <TROTH@RICEVM1.RICE.EDU> ------------- Rice ONCS VM Systems Support

PROHVK32@TREARN.BITNET (Cem Turgay) (08/21/90)

>   Offset 4 points  to the next SAVE area, right?   And offset 8
>   to he previous SAVE area, right?

Yes, right.

>   So what  does offset  zero refer  to?  If  you say  "R13 goes
>   there", I won't shoot you.   Pointing to itself would provide
>   validity checking,  but is  that what  offset zero  does?  If
>   not, then what?

The offset zero  used by the PL/1 compiler.  Especially  for PL/1 ! What
does  it ?  May it  used  by spesific  parameter pointers  or link  list
pointers of PL/1.

Also this area will  be used by CMS rel 8.  How can  used ? I will think
it when I write it ! B-D *HAH HAH*


BR-BCT-CLI-DDR-EX-HDR-ICM-ISK-LDR-MVC-NR-PACK-RRB-SIO-TIO-UNPK-ADR-SRDA
X             Cem Turgay                                              L
L student of Ege University Computer Center of Izmir OEYO8729@TREARN  R
E programmer at DAPRO Computer Co. Izmir, TURKEY     PROHVK32@TREARN  S
C IBM 3090 VM/SP Hpo. Rel.5                          OPRJ14  @TREARN  S
L             I know that I don't know                                A
CLRIO-DISCS-EDMK-IVSK-LPSW-MXR-SER-SRDL-STOSM-MVI-CLM-LER-VADR-VST-VLZR

VALDIS@VTVM1.CC.VT.EDU (Valdis Kletnieks) (08/21/90)

On Mon, 20 Aug 90 19:52:36 CDT Rick Troth said:
>        So what does offset zero refer to?  If you say "R13 goes there",
>I won't shoot you.  Pointing to itself would provide validity checking,
>but is that what offset zero does?  If not,  then what?

Offset 0 is used by the PL/I compiler (At least at the F level, I'd have to
read up on what the Optimizing and Version 2 compilers do).  It uses this
area as a pointer to the 'pseudo-register' area.  Since it's 3:30AM, I'll
avoid trying to explain pseudo-registers - the PL/I Programmer's Guide does
it better than I could hope to at this time of night....

Disclaimer: My last serious PL/I work was on a 360/65 running OS/MVT.. ;-)

                                      Valdis Kletnieks
                                      Computer Systems Engineer
                                      Virginia Tech

icking@gmdzi.UUCP (Werner Icking) (08/21/90)

TROTH@RICEVM1.RICE.EDU (Rick Troth) writes:


>        In the save area ... registers 14 thru 12 are placed at offset 12,
>which means R14 goes to +12, R15 goes to +16, R0 goes to +20, R1 goes to +24,
>and so on.  Offset 4 points to the next SAVE area, right?  And offset 8 to
>the previous SAVE area, right?

>        So what does offset zero refer to?  If you say "R13 goes there",
>I won't shoot you.  Pointing to itself would provide validity checking,
>but is that what offset zero does?  If not,  then what?

We - a group of people programming 360-code in the late 60-th and beginning
70-th - used offset zero for the length of the save area when writing re-
enterable programms. The first 18 words of the save area were used for
the length, the chaining and registers 12 to 14, the remainder for the variables
of the programme. With this layout a supervisor programm was able to remove
a programme and all its data from memory by cutting the save area chain in
reverse order and releasing the memory as stated by the length field.

A typical programm entry was like this:

       USING  *,15
       B     BEGIN
       DC    AL1(..),C'name copyright date etc.' .. means length of this
BEGIN  STM   14,12,12(13)
       LA    0,DSA#    
       GETMAIN  ...       allocate memory for the new save area
       ST    0,0(,1)      note the length
       MVC   4(4,1),4(13) propagate forward pointer
       ST    13,8(,1)     set the backward pointer
       ST    1,4(,13)     set new forward pointer
       LR    13,1         activate the new save area
       ...
DSA    DSECT
       DS    18F          standard register save area
TEMP8  DS    D            DW work area
       ...
DSA#   EQU   *-DSA

In reality all this was "hidden" in macros and subroutines. E.g. the GETMAIN
was in a subroutine, doing a conditional GETMAIN, returning to the caller
of the programme (not the subroutine!) a return code of -4  if the GETMAIN
was not successful, ...

-- 
Werner Icking          icking@gmdzi.gmd.de          (+49 2241) 14-2443
Gesellschaft fuer Mathematik und Datenverarbeitung mbH (GMD)
Schloss Birlinghoven, P.O.Box 1240, D-5205 Sankt Augustin 1, FRGermany

icking@gmdzi.UUCP (Werner Icking) (08/21/90)

TROTH@RICEVM1.RICE.EDU (Rick Troth) writes:


>        In the save area ... registers 14 thru 12 are placed at offset 12,
>which means R14 goes to +12, R15 goes to +16, R0 goes to +20, R1 goes to +24,
>and so on.  Offset 4 points to the next SAVE area, right?  And offset 8 to
>the previous SAVE area, right?

>        So what does offset zero refer to?  If you say "R13 goes there",
>I won't shoot you.  Pointing to itself would provide validity checking,
>but is that what offset zero does?  If not,  then what?

We - a group of people programming 360-code in the late 60-th and beginning
70-th - used offset zero for the length of the save area when writing re-
enterable programms. The first 18 words of the save area were used for
the length, the chaining and registers 12 to 14, the remainder for the variables
of the programme. With this layout a supervisor programm was able to remove
a programme and all its data from memory by cutting the save area chain in
reverse order and releasing the memory as stated by the length field.

A typical programm entry was like this:

       USING  *,15
       B     BEGIN
       DC    AL1(..),C'name copyright date etc.' .. means length of this
BEGIN  STM   14,12,12(13)
       LA    0,DSA#
       GETMAIN  ...       allocate memory for the new save area
       ST    0,0(,1)      note the length
       MVC   4(4,1),4(13) propagate forward pointer
       ST    13,8(,1)     set the backward pointer
       ST    1,4(,13)     set new forward pointer
       LR    13,1         activate the new save area
       ...
DSA    DSECT
       DS    18F          standard register save area
TEMP8  DS    D            DW work area
       ...
DSA#   EQU   *-DSA

In reality all this was "hidden" in macros and subroutines. E.g. the GETMAIN
was in a subroutine, doing a conditional GETMAIN, returning to the caller
of the programme (not the subroutine!) a return code of -4  if the GETMAIN
was not successful, ...

--
Werner Icking          icking@gmdzi.gmd.de          (+49 2241) 14-2443
Gesellschaft fuer Mathematik und Datenverarbeitung mbH (GMD)
Schloss Birlinghoven, P.O.Box 1240, D-5205 Sankt Augustin 1, FRGermany

Al_K_Shing@cup.portal.com (08/22/90)

>
>        In the save area ... registers 14 thru 12 are placed at offset 12,
>which means R14 goes to +12, R15 goes to +16, R0 goes to +20, R1 goes to +24,
>and so on.  Offset 4 points to the next SAVE area, right?  And offset 8 to
>the previous SAVE area, right?
>
>        So what does offset zero refer to?  If you say "R13 goes there",
>I won't shoot you.  Pointing to itself would provide validity checking,
>but is that what offset zero does?  If not,  then what?
>

If memory serves, offset zero is used by PL/I for something.  It is not 
generally used in linking Assembler routines.

> Rick Troth <TROTH@RICEVM1.RICE.EDU> ------------- Rice ONCS VM Systems Suppor
t

Al Shing