When you use the macros listed in Assembler macros to
write your Language Environment-conforming
assembler routines, the macros generate code that follows the required
register conventions.
On entry into the
Language Environment-conforming
non-
XPLINK assembler
main routine, registers
must contain the following values because they are passed without
change to the CEEENTRY macro:
- R0
- Undefined
- R1
- Address of the parameter list, or zero if no parameters are passed
- R13
- Caller's standard register save area
- R14
- Return address
- R15
- Entry point address
On entry into the
Language Environment-conforming
assembler subroutine, these registers must
contain the following values when NAB=YES is specified on the CEEENTRY
macro:
- R0
- Reserved
- R1
- Address of the parameter list, or zero
- R12
- Common anchor area (CAA) address
- R13
- Caller's DSA
- R14
- Return address
- R15
- Entry point address
- All others
- Undefined
On entry into a Language Environment-conforming
assembler routine, CEEENTRY loads the caller's registers (R14 through
R12) in the DSA provided by the caller. After it allocates a DSA (which
sets the NAB field correctly in the new DSA), the first halfword of
the DSA is set to hex zero and the backchain is set properly.
At all times while the Language Environment-conforming
non-XPLINK assembler
routine is running, R13 must point to the routine's DSA.
At call points, R12 must contain the common anchor area (CAA) address,
except in the following cases:
- When calling a COBOL program
- When calling an assembler routine that is not Language Environment-conforming
- When calling a Language Environment-conforming
assembler routine that specifies NAB=NO on the CEEENTRY macro
On exit from a
Language Environment-conforming
assembler routine, these registers contain:
- R0
- Undefined
- R1
- Undefined
- R14
- Undefined
- R15
- Undefined
- All others
- The contents they had upon entry