VMS Help  —  MACRO  /ALPHA  Symbols
    You use symbols in MACRO-64 source statements to represent an
    instruction, directive, register name, or value. You can use four
    types of symbols in MACRO-64 source programs: permanent symbols,
    predefined symbols, user-defined symbols, and macro names.

1  –  Permanent Symbols

    Permanent symbols consist of MACRO-64 directives and instruction
    mnemonics. You need not define directives before you use them in
    the operator field of a MACRO-64 source statement. It is also not
    necessary to define instruction mnemonics before using them in
    the instruction statements.

2  –  Predefined Symbols

    Predefined symbols are MACRO-64 register symbols that are not
    permanently reserved. You can delete the definition of any of
    these predefined register symbols. You can also define your own
    register symbols.

    You can express the 32 general registers and the 32 floating-
    point registers of the Alpha processor in a source program as
    follows:

    Register
    Name   Description

    R0     General register 0.
    R1     General register 1.
    .      .
    .      .
    .      .
    R29    General register 29 or frame pointer. If you use R29 as a
    or FP  frame pointer, Digital recommends you use the name FP. If
           you use R29 as a general register, Digital recommends you
           use the name R29.
    R30    General register 30 or stack pointer. If you use R30 as a
    or     stack pointer, the name SP is recommended; if you use R30
    SP     as a general register, the name R30 is recommended.
    R31    General register 31.
    F0     Floating-point register 0.
    .      .
    .      .
    .      .
    F31    Floating-point register 31.

                                   NOTE

       When MACRO-64 operates in /NAMES=AS_IS mode, all of the
       previous register symbols are defined in all uppercase and
       all lowercase.

    To define your own register symbols, use either the .DEFINE_
    FREG or .DEFINE_IREG directive for floating-point or integer
    registers, respectively. For more information about the .DEFINE_
    FREG or .DEFINE_IREG directives, see .DEFINE_FREG and .DEFINE_
    IREG, respectively.

    You can delete a register symbol definition with the .UNDEFINE_
    REG directive. For more information about the .UNDEFINE_REG
    directive, see .UNDEFINE_REG.

    While an identifier is defined as a register symbol, it can only
    be used in those contexts that allow a register.

3  –  User-Defined Symbols and Macro Names

    You can use symbols to define labels, or you can equate them to a
    specific value by a direct assignment statement. You can also use
    these symbols in expressions.

    Use the following rules to create user-defined symbols:

    o  Use alphanumeric characters, underscores (_),  dollar signs
       ($),  and periods (.). Any other character terminates the
       symbol.

    o  The first character of a symbol cannot be a number.

    o  The symbol must be no more than 31 characters long and must be
       unique.

    o  The symbol must not be a register name.

    o  The symbol cannot be one of the following conditional or macro
       directives:

       .ELSE          .ENDC          .ENDM
       .ENDR          .IF            .IF_FALSE (.IFF)
       .IF_TRUE       .IF_TRUE_      .IIF
       (.IFT)         FALSE
                      (.IFTF)
       .INCLUDE       .IRP           .IRPC
       .LIBRARY       .MACRO         .MCALL
       .MDELETE       .MEXIT         .NARG
       .NCHAR         .REPEAT

    In addition, by Digital convention:

    o  The dollar sign ($)  is reserved for names defined by Digital.
       This convention ensures that a user-defined name (that does
       not have a dollar sign) will not conflict with a Digital-
       defined name (that does have a dollar sign).

    o  Do not use the period (.)  in any global symbol name because
       many languages, such as Fortran, do not allow periods in
       symbol names.

    Macro names follow the same rules and conventions as user-defined
    symbols. User-defined symbols and macro names do not conflict;
    that is, you can use the same name for a user-defined symbol and
    a macro.

4  –  Determining Symbol Values

    The value of a symbol depends on its use in the program. MACRO-64
    uses a different method to determine the values of symbols in the
    operator field than it uses to determine the values of symbols in
    the operand field.

5  –  Using Symbols in the Operator Field

    A symbol in the operator field can be either a permanent symbol
    or a macro name. MACRO-64 searches for a symbol definition in the
    following order:

    1. Macro and conditional directives:

       .ELSE      .ENDC          .ENDM
       .ENDR      .IF            .IF_FALSE (.IFF)
       .IF_TRUE   .IF_TRUE_      .IIF
       (.IFT)     FALSE (.IFTF)
       .INCLUDE   .IRP           .IRPC
       .LIBRARY   .MACRO         .MCALL
       .MDELETE   .MEXIT         .NARG
       .NCHAR     .REPEAT

    2. Previously defined macro names

    3. Permanent symbols (instructions and other directives)

    This search order allows most permanent symbols, except
    conditional directives and macro directives, to be redefined
    as macro names. If a symbol in the operator field is not defined
    as a macro or a permanent symbol, the assembler displays an error
    message.

6  –  Using Symbols in the Operand Field

    A symbol in the operand field must be either a user-defined
    numeric symbol, a label, or a register name.

    User-defined numeric symbols and labels can be either local
    (internal) symbols or global (external) symbols. Whether numeric
    symbols and labels are local or global depends on their use in
    the source program.

    You can reference a local numeric symbol or label only in the
    module in which it is defined. If local numeric symbols or labels
    with the same names are defined in different modules, the symbols
    and labels are completely independent. The definition of a global
    numeric symbol or label, however, can be referenced from any
    module in the program.

    MACRO-64 treats all user-defined numeric symbols and labels as
    local unless you explicitly declare them to be global by doing
    one of the following:

    o  Use the double colon (::)  in defining a label.

    o  Use the double equal sign (==) in a direct assignment
       statement.

    o  Use the .WEAK directive.

    You can only use user-defined lexical string symbols with the
    lexical string operators. You can define a macro using the same
    name as a previously defined local numeric symbol, global numeric
    symbol, or a lexical string symbol. However, you cannot define a
    lexical string symbol and a numeric symbol using the same name.

    In addition, you cannot use the same name for both a local and
    global numeric symbol. You cannot use the same symbol name for
    both a numeric symbol (local or global) and a label (local or
    global).
Close Help