*---------------------------------------------------------------------* * * * Copyright (c) 1995, SAS Institute Inc. * * Unpublished - All Rights Reserved * * * * S A S / C S A M P L E * * * * Name: C#ASMA * * * * Language: Assembler * * * * EntryPoint: LOADMAA * * * * Entry Type: Standard OS Linkage with a VL-type plist. The * * parameter list is expected to be variable length * * with at least one argument. All arguments are * * expected to be pointers to int. The high-order * * bit of the last argument should be set on. * * * * Files Note: 'prefix' is the installation defined high level * * qualifier for the SAS/C product. * * * * Function: Sum a list of integers passed as arguments and * * return the sum to the caller in R15. * * * * Purpose: LOADMAA supports LOADMAC by providing an assembler * * program that can be dynamically loaded via loadm. * * * * Attributes: Serially Reusable, NOT reentrant * * * * MVS - See prolog for prefix.SAMPLE.ASM(LOADMAC) * * * * CMS - See prolog for SAMPLASM MACLIB(LOADMAC) * * * * Misc Notes: * * - LOADMAA is not assembler dependent, use either * * Assembler H or High Level Assembler. * * * * - This assembler routine could have used CENTRY/CEXIT, * * there is nothing about LOADMAA that prevents their * * use. See sample prefix.SAMPLE.C#ASM(C#ASMA) for an * * example of using CENTRY/CEXIT. * * * * - LOADMAA is NOT reentrant due to the static savearea. * * * *---------------------------------------------------------------------* SPACE LOADMAA CSECT *---------------------------------------------------------------------* * Standard OS Entry Linkage * *---------------------------------------------------------------------* STM 14,12,12(13) Save entry regs in callers area BALR 9,0 Load Base USING *,9 Tell Assembler LR 14,13 Save callee save area addr LA 13,SAVEAREA Put mine in R13 ST 14,4(13) Save caller save area in mine ST 13,8(14) Setup R14 for my calls SPACE *---------------------------------------------------------------------* * Make sure we actually got a plist address on the call. * *---------------------------------------------------------------------* SR 15,15 Clear 15 for sum'ing LTR 1,1 Is there a plist? BZ DONE Nope, just leave! *---------------------------------------------------------------------* * Sum integers passed via VL-Type parameter list. * *---------------------------------------------------------------------* NEXTADD DS 0H L 4,0(1) Load pointer A 15,0(4) Add integer to sum TM 0(1),X'80' End of VL-Plist? <---Note This Check BNZ DONE Yes, finish up and exit LA 1,4(1) No, bump to next argument B NEXTADD Start again DONE DS 0H Yes, prepare to return SPACE *---------------------------------------------------------------------* * * * Standard OS Exit Linkage with the sum of the integers in R15. * * * *---------------------------------------------------------------------* MAINXT L 13,4(13) Ptr to entry reg save area LM 0,12,20(13) Reload registers 0-12 L 14,12(13) Restore return address to 14 BR 14 Return to caller SPACE *---------------------------------------------------------------------* * Constants * *---------------------------------------------------------------------* LTORG Area for Literal Pool *---------------------------------------------------------------------* * Working Storage * *---------------------------------------------------------------------* DS 0F Force Alignment SAVEAREA DC 18F'0' Standard Save area END LOADMAA