VMS Help  —  MACRO  /ALPHA  Supplied Library Macros, Programming Examples Using Supplied Macros
    Examples Program Using Supplied Macros and Program Using $CALL
    show how to use the calling-standard macros to define a routine,
    switch control between psects, generate an epilogue sequence, and
    end the routine.

    Example 3  Program Using Supplied Macros

            $ROUTINE MAIN, KIND=STACK, - ; Stack routine kind 1
                SAVED_REGS=<FP>, - ; Saves FP           2
                SIZE=48               ; Stack size is 48   3

            $LINKAGE_SECTION          ; Switch to the linkage psect. 4

    X:      .long 6                   ; X is a constant
    FP1_ADDR:                         ; FP1_ADDR -> FP1
            .address FP1

            $DATA_SECTION             ; Switch to the data section 5

    A::     .blkw 5                   ; $DS points here
    B::     .blkw

            $CODE_SECTION             ; Switch to the code section 6
                                      ; ($CS points here)
                   .
                   .
                   .
            $RETURN                   ; Perform epilogue and return 7

            $END_ROUTINE MAIN         ; Mark the end of the routine 8

    1  $ROUTINE defines the routine MAIN. The routine type is defined
       as a stack routine using the KIND=STACK keyword argument.

    2  The keyword argument SAVED_REGS=<FP> adds the frame pointer
       register to the list of registers saved on the stack by the
       prologue code. The SAVED_REGS keyword is valid only for stack
       procedures. If you do not specify the FP register (R29) with
       this argument, it is assumed.

    3  The keyword argument SIZE=48 defines the stack area in bytes.
       This argument is valid only for register and stack routines.
       If you do not specify a stack size for a stack or register
       routine, $ROUTINE computes the minimum stack size required to
       accommodate the other arguments you specify or leave as the
       default.

    4  The $LINKAGE_SECTION macro switches to the linkage section.
       You can use the $LS symbol created by the $ROUTINE macro
       to point to the address of the current routine's linkage
       section. $ROUTINE creates the procedure descriptor and leaves
       the current location counter within the linkage section just
       beyond the procedure descriptor.

    5  The $DATA_SECTION macro switches to the data section. You can
       use the $DS symbol created by the $ROUTINE macro to point to
       the address of the current routine's data section.

    6  The $CODE_SECTION macro switches to the code section. The $CS
       symbol created by the $ROUTINE macro is used to point to the
       address of the current routine's code section.

    7  The $RETURN macro generates a standard epilogue instruction
       sequence. You can use this macro only with stack or register
       routine defined with the $ROUTINE macro.

    8  The $END_ROUTINE macro marks the end of the routine.
Close Help