DECAVMACRO64, +=AB-2 AccessingMemoryviaBase AddressesB- 2 Accessing Memory via Base AddressesuSl##=@B-3ProgramCallChainB- 3 Program Call Chain|8 +TABLESTABLES)?/=@2-1UsingTabStopsin StatementFields2- 1 Using Tab Stops in Statement FieldsX4J,=A2-2Special CharactersUsedinMACRO-64 Statements2- 2 Special Characters Used in MACRO-64 Statementsudl ,,=@2-3SummaryofUnary Operators2- 3 Summary of Unary Operatorsfl!--=@2-4SummaryofBinary Operators2- 4 Summary of Binary Operatorsp"6$=A3-1SummaryofMACRO-64Lexicals3- 1 Summary of MACRO-64 Lexicals!N\  =A3-2%TYPE Attributes3- 2 %TYPE Attributesq-B.=A5-1SummaryofGeneral Assembler Directives5- 1 Summary of General Assembler Directivesfl!--=A5-2SummaryofMacro Directives5- 2 Summary of Macro Directives-B%=A5-3.ENABLEand.DISABLESymbolic Arguments5- 3 .ENABLE and .DISABLE Symbolic ArgumentsI9O1=A5-4 ConditionTestsfor ConditionalAssembly Directives5- 4 Condition Tests for Conditional Assembly Directivescl ++=A5-5ProgramSection Attributes5- 5 Program Section Attributes|(<(=A5-6DefaultProgramSection Attributes5- 6 Default Program Section Attributes*?"=@5-7.SHOWand.NOSHOWSymbolic Arguments5- 7 .SHOW and .NOSHOW Symbolic ArgumentsJl=A6-1ARGS Arguments6- 1 ARGS Argumentsp0F0=AA-1RegisterUsage ConventionsforOpenVMSAXPA- 1 Register Usage Conventions for OpenVMS AXPgl"--=@A-2 InstructionOperandNotationA- 2 Instruction Operand Notation%k\$//=@A-3 Instruction QualifierNotationA- 3 Instruction Qualifier Notation+}(=-=@A-4F-PControlRegister(FPCR)FormatA- 4 F-P Control Register (FPCR) Format-dl!++=AA-5 DecodablePseudo-OperationsA- 5 Decodable Pseudo-Operations/4J,=AA-6Common ArchitectureOpcodesin NumericalOrderA- 6 Common Architecture Opcodes in Numerical Order5/C$=@A-7OpenVMS UnprivilegedPALcode InstructionsA- 7 OpenVMS Unprivileged PALcode Instructions?-A+=AA-8OpenVMS PrivilegedPALcode InstructionsA- 8 OpenVMS Privileged PALcode InstructionsD}(=.=@A-9PALcodeOpcodesin NumericalOrderA- 9 PALcode Opcodes in Numerical OrderJy':$=AA-10Common Architecture InstructionsA- 10 Common Architecture InstructionsQN\  =@B-1Frame AttributesB- 1 Frame Attributes*>+=@B-2 DirectivesUsing Automatic AlignmentB- 2 Directives Using Automatic AlignmentT/ CONTENTSCONTENTS8 E[TitlePageTitle Page@E\ CopyrightPageCopyright Page1xE\PrefacePreface @g$L1 Introduction1 IntroductionOl!!$A1.1LanguageFeatures1.1 Language Features)?)$A1.1.1AlphaAXPNativeModep Instructions1.1.1 Alpha AXP Native Mode Instructionsjl#//$A1.1.2Direct Assignment Statements1.1.2 Direct Assignment StatementsY\&&$A1.1.3 Assembler Directives1.1.3 Assembler Directivesn\%11$@1.1.3.1General Assembler Directives1.1.3.1 General Assembler DirectivesU\$$$@1.1.3.2Macro Directives1.1.3.2 Macro Directives)?.$@1.2InvokingMACRO-64onOpenVMS&Systems1.2 Invoking MACRO-64 on OpenVMS Systems`\**$@1.2.1CommandLine Qualifiers1.2.1 Command Line Qualifiers$+A%$K2 ComponentsofMACRO-64 Source Statements2 Components of MACRO-64 Source StatementsR\\(($@2.1Source StatementFormat2.1 Source Statement FormatUG\$A2.1.1LabelField2.1.1 Label Field]Ml  $A2.1.2OperatorField2.1.2 Operator FieldcKl$@2.1.3OperandField2.1.3 Operand FieldgK\$@2.1.4CommentField2.1.4 Comment FieldnG\$@2.2 CharacterSet2.2 Character Setr:\ $@2.3Numbers2.3 Numbersw@l$A2.3.1Integers2.3.1 Integersx]l(($A2.3.2Floating-PointNumbers2.3.2 Floating-Point Numbers~K\$A2.4QuotedLiterals2.4 Quoted Literals:l $A2.5Symbols2.5 SymbolsSl##$@2.5.1 PermanentSymbols2.5.1 Permanent Symbols+A2$@2.5.2 User-DefinedSymbolsandMacropNames2.5.2 User-Defined Symbols and Macro Namesdl ,,$@2.5.3 DeterminingSymbolValues2.5.3 Determining Symbol Values,C4$@2.5.3.1UsingSymbolsintheOperatorField2.5.3.1 Using Symbols in the Operator Field+B3$@2.5.3.2UsingSymbolsintheOperandField2.5.3.2 Using Symbols in the Operand Field~(>0$A2.6 TemporaryLabelsWithinSource&Code2.6 Temporary Labels Within Source CodeK\$@2.7Label Addresses2.7 Label Addresses8O1$@2.7.1Label Addresses, Optimization,pandCode Alignment2.7.1 Label Addresses, Optimization, and Code Alignment3J1$@2.7.2Label Addressesand AutomaticpData Alignment2.7.2 Label Addresses and Automatic Data AlignmentXl&&$A2.8Termsand Expressions2.8 Terms and Expressions.E0$A2.9Unary OperatorsforTermsand& Expressions2.9 Unary Operators for Terms and Expressions`l**$@2.9.1RadixControl Operators2.9.1 Radix Control Operatorshl"..$A2.9.2Numeric ComplementOperator2.9.2 Numeric Complement OperatorOl!!$A2.10Binary Operators2.10 Binary Operatorsfl!--$A2.10.1 ArithmeticShiftOperator2.10.1 Arithmetic Shift Operator\l(($@2.10.2LogicalANDOperator2.10.2 Logical AND Operatorol%22$@2.10.3Logical InclusiveOROperator2.10.3 Logical Inclusive OR Operatorol%22$A2.10.4Logical ExclusiveOROperator2.10.4 Logical Exclusive OR Operatorhl"..$A2.11Direct Assignment Statements2.11 Direct Assignment Statements`\**$A2.12CurrentLocationCounter2.12 Current Location Counter\w(($K3MACRO-64LexicalOperator3 MACRO-64 Lexical Operatorql&33$@3.1 ProcessingwithLexical Operators3.1 Processing with Lexical Operators\l(($@3.2LexicalOperatorSyntax3.2 Lexical Operator Syntax/F5$@3.3NumericSymbolsandLexicalString&Symbols3.3 Numeric Symbols and Lexical String Symbols hl"..$A3.4Lexical SubstitutionOperator3.4 Lexical Substitution Operator\l(($A3.5LexicalEscapeOperator3.5 Lexical Escape Operator\l(($A3.6UsingLexical Operators3.6 Using Lexical OperatorsOl!!$A3.7Lexical Operators3.7 Lexical Operators -gEL%EDIT%EDIT"3g EK%ELEMENT%ELEMENT-3g EK%EXTRACT%EXTRACT63g EK%INTEGER%INTEGER?1gEK%LENGTH%LENGTHF1gEK%LOCATE%LOCATEM1gEK%REPEAT%REPEATU1gEL%STRING%STRING]-gEK%TIME%TIMEe-gEK%TYPE%TYPEkGw$L4Macro Arguments4 Macro ArgumentsxXl&&$A4.1UsingMacro Arguments4.1 Using Macro ArgumentsVl%%$A4.2UsingDefaultValues4.2 Using Default Values\l(($A4.3UsingKeyword Arguments4.3 Using Keyword ArgumentsZl''$A4.4UsingString Arguments4.4 Using String ArgumentsYl&&$A4.5Argument Concatenation4.5 Argument Concatenationrl&44$A4.6PassingNumericValuesofSymbols4.6 Passing Numeric Values of Symbolskl#00$A4.7UsingCreated TemporaryLabels4.7 Using Created Temporary LabelsM4 $L5MACRO-64 Assembler  Directives`l**$@5.1ProgramSections(Psects)5.1 Program Sections (Psects)^l))$@5.2 AutomaticData Alignment5.2 Automatic Data Alignment@\$@5.3 Directives5.3 Directives3g EK.ADDRESS.ADDRESS/gEL.ALIGN.ALIGN/gEK.ASCIC.ASCIC/gEK.ASCID.ASCID/gEL.ASCII.ASCII/gEK.ASCIZ.ASCIZ-gEK.BASE.BASE;w EL .BEGIN_EXACT.BEGIN_EXACT8gEK.BLK Kx.BLK x-gEK.BYTE.BYTE!=wEK .CODE_ADDRESS.CODE_ADDRESS(9w EL .D_FLOATING.D_FLOATING/3g EK.DISABLE.DISABLE6-gEK.ELSE.ELSE<1gEL.ENABLE.ENABLED+gEK.END.ENDW-gEK.ENDC.ENDC^-gEL.ENDM.ENDMc-gEK.ENDR.ENDRj7w EK .END_EXACT.END_EXACTp/gEK.ERROR.ERRORu-gEK.EVEN.EVEN}5g EK .EXTERNAL.EXTERNAL9w EK .F_FLOATING.F_FLOATING9w EL .G_FLOATING.G_FLOATING/gEK.IDENT.IDENT)g  EK.IF.IF-wEL.IF_x.IF_x+gEK.IIF.IIF3g EK.INCLUDE.INCLUDE;g EL .INSTRUCTION.INSTRUCTION+gEK.IRP.IRP-gEK.IRPC.IRPC3g EK.LIBRARY.LIBRARY=wEK .LINKAGE_PAIR.LINKAGE_PAIR-gEK.LIST.LISTIwEK.LOCAL_CODE_ADDRESS.LOCAL_CODE_ADDRESS IwEL.LOCAL_LINKAGE_PAIR.LOCAL_LINKAGE_PAIRYw%%EK.LOCAL_PROCEDURE_DESCRIPTOR.LOCAL_PROCEDURE_DESCRIPTOR-gEK.LONG.LONG#/gEL.MACRO.MACRO*/gEK.MCALL.MCALL?3g EK.MDELETE.MDELETEG/gEL.MEXIT.MEXITN-gEK.NARG.NARGX-gEK.NCHR.NCHRb/gEK.NLIST.NLISTm1gEL.NOSHOW.NOSHOWs-gEK.OCTA.OCTAy+gEK.ODD.ODD1gEL.PACKED.PACKED-gEK.PAGE.PAGE/gEK.PRINT.PRINTMwEL.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTOR/gEK.PSECT.PSECT-gEK.QUAD.QUAD1gEL.REPEAT.REPEAT?wEK.RESTORE_PSECT.RESTORE_PSECT9w EK .SAVE_PSECT.SAVE_PSECT9w EK .S_FLOATING.S_FLOATING-gEL.SHOW.SHOW;w EK .SIGNED_BYTE.SIGNED_BYTE;w EK .SIGNED_WORD.SIGNED_WORD5g EL .SUBTITLE.SUBTITLE9w EK .T_FLOATING.T_FLOATING/gEK.TITLE.TITLE -gEL.WARN.WARN-gEK.WEAK.WEAK-gEK.WORD.WORD Zw''$L6MACRO-64SuppliedMacros6 MACRO-64 Supplied Macros'`l**$A6.1MACRO-64SuppliedLibrary6.1 MACRO-64 Supplied Library)cl,,$A6.2RoutinesandLexicalScope6.2 Routines and Lexical Scope.ml$11$A6.2.1RoutinesandProgramSections6.2.1 Routines and Program Sections1-D2$A6.3UsingMacrostoControlProgram&Sections6.3 Using Macros to Control Program Sections6dl ,,$A6.3.1DefiningProgramSections6.3.1 Defining Program Sections7kl#00$A6.3.2UsingMacroSpecificSymbols6.3.2 Using Macro Specific Symbols;`l**$@6.3.3Defining ProcedureType6.3.3 Defining Procedure Type?~(>,$A6.3.4UsingMacrosinProloguepSections6.3.4 Using Macros in Prologue SectionsBvl(66$@6.3.5UsingMacrosinEpilogueSections6.3.5 Using Macros in Epilogue SectionsE^E+$A6.4 ProgrammingExamplesUsing&SuppliedMacrosGYl''$@6.5Usingthe$CALLMacro6.5 Using the $CALL MacroJhl!//$@6.5.1Using$CALLinSourceCode6.5.1 Using $CALL in Source CodePal**$A6.6 ProgrammingConsiderations6.6 Programming ConsiderationsS2J3$A6.6.1MakingMultipleCallsFromthepSameRoutine6.6.1 Making Multiple Calls From the Same RoutineTYl&&$@6.6.2 Non-StandardLinkage6.6.2 Non-Standard LinkageWY\&&$A6.6.3Routine Restrictions6.6.3 Routine RestrictionsXQl""$A6.7Macro Descriptions6.7 Macro DescriptionsZIl$A6.7.1SyntaxRules6.7.1 Syntax Rules\AwEL$BEGIN_EPILOGUE$BEGIN_EPILOGUE^-rEK$CALL$CALLf=wEL $CODE_SECTION$CODE_SECTION=wEK $DATA_SECTION$DATA_SECTION=wEK $END_EPILOGUE$END_EPILOGUE=wEK $END_PROLOGUE$END_PROLOGUE;w EK $END_ROUTINE$END_ROUTINE=wEK $LINKAGE_PAIR$LINKAGE_PAIRCwEK$LINKAGE_SECTION$LINKAGE_SECTION/rEL$OPDEF$OPDEF1gEK.PACKED.PACKEDMwEL$PROCEDURE_DESCRIPTOR$PROCEDURE_DESCRIPTOR1rEK$RETURN$RETURN3r EL$ROUTINE$ROUTINE2I!$\AMMACRO-64AlphaAXP( ArchitectureQuick ReferenceA MACRO-64 Alpha AXP Architecture Quick Referencebl++$@A.1RegisterUsage ConventionsA.1 Register Usage Conventionsfl!--$@A.2 InstructionOperandNotationA.2 Instruction Operand Notation#j\#//$@A.3 Instruction QualifierNotationA.3 Instruction Qualifier Notation*tl'55$@A.4F-PControlRegister(FPCR)FormatA.4 F-P Control Register (FPCR) Format,cl ++$@A.5 DecodablePseudo-OperationsA.5 Decodable Pseudo-Operations.3J0$@A.6Common ArchitectureOpcodesin& NumericalOrderA.6 Common Architecture Opcodes in Numerical Order4}(=,$AA.7OpenVMSPALcode Instruction&SummaryA.7 OpenVMS PALcode Instruction Summary>|'=.$@A.8PALcodeOpcodesin Numerical&OrderA.8 PALcode Opcodes in Numerical OrderIn\%11$AA.9Common Architecture InstructionsA.9 Common Architecture InstructionsP\(($\BM ProgrammingwithMACRO-64B Programming with MACRO-64]^l))$@B.1OpenVMSCallingStandardB.1 OpenVMS Calling Standarda)?,$@B.2 AccessingMemorywithBase& RegistersB.2 Accessing Memory with Base RegisterseK\$AB.3Data StructuresB.3 Data StructuresYl&&$AB.3.1 Procedure DescriptorB.3.1 Procedure DescriptorOl!!$@B.3.2 SignatureBlockB.3.2 Signature BlockIl$@B.3.3LinkagePairB.3.3 Linkage PairPl""$AB.4TypesofRoutinesB.4 Types of RoutinesYl&&$AB.4.1Routine CapabilitiesB.4.1 Routine Capabilities1H5$AB.4.2EntryPrologueandExitEpiloguep SequencesB.4.2 Entry Prologue and Exit Epilogue SequencesKl$AB.5ExampleProgramB.5 Example Programml%00$AB.6 EstablishingSelf-AddressabilityB.6 Establishing Self-Addressabilitywl)66$AB.7 Optimizationand Automatic AlignmentB.7 Optimization and Automatic Alignmentbl++$AB.7.1 AutomaticData AlignmentB.7.1 Automatic Data Alignmentjl#//$AB.7.1.1 ControllingData AlignmentB.7.1.1 Controlling Data Alignment0F3$@B.7.1.2 Directivesfor AutomaticData AlignmentB.7.1.2 Directives for Automatic Data Alignmentol%22$AB.7.2 AutomaticCodeLabel AlignmentB.7.2 Automatic Code Label Alignment_l))$@B.7.3 Scheduling OptimizationB.7.3 Scheduling Optimization[l''$@B.7.4Peephole OptimizationB.7.4 Peephole Optimizationol%22$AB.7.5UsingMACRO-64for PerformanceB.7.5 Using MACRO-64 for Performancejl#//$AB.7.6Viewing OptimizationResultsB.7.6 Viewing Optimization ResultsY''$\CNUsingLSEwithMACRO-64C Using LSE with MACRO-64El$@C.1InvokingLSEC.1 Invoking LSESl##$@C.2Running DiagnosticsC.2 Running Diagnostics_x**$\DN DifferencesfromVAXMACROD Differences from VAX MACROk\#00$AD.1 AssemblerFeaturesinMACRO-64D.1 Assembler Features in MACRO-64/G1$AD.2VAXMACROFeaturesNotPresent&inMACRO-64D.2 VAX MACRO Features Not Present in MACRO-64E$[EMErrorMessagesE Error Messages/ EXAMPLESEXAMPLES4J0=A3-1Lexical ProcessingWithouttheEscapeOperator3- 1 Lexical Processing Without the Escape Operator-B0=A3-2Lexical ProcessingWithEscapeOperator3- 2 Lexical Processing With Escape Operator]l((=A3-3UsingLexical Operators3- 3 Using Lexical Operators-B/=A3-4Source StatementsAfterMacro Expansion3- 4 Source Statements After Macro Expansionjl#//=@6-1ProgramUsingSuppliedMacros6- 1 Program Using Supplied MacrosHUl$$=@6-2ProgramUsing$CALL6- 2 Program Using $CALLQjl#//=@B-1RoutineWithoutLinkagePairsB- 1 Routine Without Linkage Pairsdl ,,=@B-2RoutineWithLinkagePairsB- 2 Routine With Linkage Pairsfl!--=@B-3 EstablishingaBaseAddressB- 3 Establishing a Base AddressY@-=AB-4Enablingand DisablingData Alignment-FIGURESFIGURESL\=@A-1Data StructuresA- 1 Data StructuresT\##=@A-2 InstructionFormatsA- 2 Instruction Formatsz';%=@B-1BaseRegisterMemory DisplacementB- 1 Base Register Memory Displacementh)>+=AB-2 AccessingMemoryviaBase AddressesB- 2 Accessing Memory via Base AddressesuSl##=@B-3ProgramCallChainB- 3 Program Call Chain|+TABLESTABLES)?/=@2-1UsingTabStopsin StatementFields2- 1 Using Tab Stops in Statement FieldsX4J,=A2-2Special CharactersUsedinMACRO-64 Statements2- 2 Special Characters Used in MACRO-64 Statementsudl ,,=@2-3SummaryofUnary Operators2- 3 Summary of Unary Operatorsfl!--=@2-4SummaryofBinary Operators2- 4 Summary of Binary Operatorsp"6$=A3-1SummaryofMACRO-64Lexicals3- 1 Summary of MACRO-64 Lexicals!N\  =A3-2%TYPE Attributes3- 2 %TYPE Attributesq-B.=A5-1SummaryofGeneral Assembler Directives5- 1 Summary of General Assembler Directivesfl!--=A5-2SummaryofMacro Directives5- 2 Summary of Macro Directives-B%=A5-3.ENABLEand.DISABLESymbolic Arguments5- 3 .ENABLE and .DISABLE Symbolic ArgumentsI9O1=A5-4 ConditionTestsfor ConditionalAssembly Directives5- 4 Condition Tests for Conditional Assembly Directivescl ++=A5-5ProgramSection Attributes5- 5 Program Section Attributes|(<(=A5-6DefaultProgramSection Attributes5- 6 Default Program Section Attributes*?"=@5-7.SHOWand.NOSHOWSymbolic Arguments5- 7 .SHOW and .NOSHOW Symbolic ArgumentsJl=A6-1ARGS Arguments6- 1 ARGS Argumentsp0F0=AA-1RegisterUsage ConventionsforOpenVMSAXPA- 1 Register Usage Conventions for OpenVMS AXPgl"--=@A-2 InstructionOperandNotationA- 2 Instruction Operand Notation%k\$//=@A-3 Instruction QualifierNotationA- 3 Instruction Qualifier Notation+}(=-=@A-4F-PControlRegister(FPCR)FormatA- 4 F-P Control Register (FPCR) Format-dl!++=AA-5 DecodablePseudo-OperationsA- 5 Decodable Pseudo-Operations/4J,=AA-6Common ArchitectureOpcodesin NumericalOrderA- 6 Common Architecture Opcodes in Numerical Order5/C$=@A-7OpenVMS UnprivilegedPALcode InstructionsA- 7 OpenVMS Unprivileged PALcode Instructions?-A+=AA-8OpenVMS PrivilegedPALcode InstructionsA- 8 OpenVMS Privileged PALcode InstructionsD}(=.=@A-9PALcodeOpcodesin NumericalOrderA- 9 PALcode Opcodes in Numerical OrderJy':$=AA-10Common Architecture InstructionsA- 10 Common Architecture InstructionsQN\  =@B-1Frame AttributesB- 1 Frame Attributes*>+=@B-2 DirectivesUsing Automatic AlignmentB- 2 Directives Using Automatic Alignment&*,dOYMACRO-64 AssemblerOfor OpenVMS AXPOxSystemsO ReferenceManualc_ONovember1992GOJThisdocument describestheMACRO-64assembly language.tJ'ORevision/Update Information:#^Thisisanewmanual. ,kOSoftwareVersion:+^MACRO-64 AssemblerforOpenVMS$^AXPSystemsVersion1.0{*O OperatingSystemandVersion:$^OpenVMSAXPVersion1.0)O%Digital Equipment Corporation!ObMaynard, Massachusetts Y f/ OONovember1992eOxThe informationinthisdocumentissubjecttochangewithoutnoticeandshould^Onotbe construedasa commitmentbyDigital Equipment Corporation.-DigitalfO Equipment CorporationassumesnoresponsibilityforanyerrorsthatmayappearinO?this document.fOThesoftware describedinthisdocumentis furnishedunderalicenseandmaybeVOusedorcopiedonlyin accordancewiththetermsofsuchlicense.lONoresponsibilityisassumedfortheuseor reliabilityofsoftwareon equipmentthataOisnotsuppliedbyDigital Equipment Corporationorits affiliated companies.3ODigital Equipment Corporation1992. O0AllRights Reserved.bOThe followingare trademarksofDigital Equipment Corporation:!AlphaAXP,AXP,ZODEC,DEC4000,DECchip, DECwindows,Digital,OpenVMS,OpenVMSAXP,VAX,IOPVAX DOCUMENT,VMS,theAXPlogo,andtheDIGITALlogo.7OThe followingare third-party trademarks:fOAdaisa registered trademarkoftheU.S. Government,AdaJointProgramOffice.MOMThisdocumentwaspreparedusingVAX DOCUMENT,Version2.1.*S  9 O 1.2 IntroductionAOMACRO-64 AssemblerforOpenVMSAXPSystemsisanFOassemblylanguagefor programmingAlphaAXP computers.HOBSourceprogramswritteninMACRO-64are translatedintoJOobject(orbinary)codebytheMACRO-64 assembler,whichQOproducesanobjectmoduleand, optionally,alistingfile.*TheNOLfeaturesofthelanguageare introducedinthischapter,as=Owellas instructionstoinvokethe assembler.tXJ?OTable2-1:7UsingTabStopsin StatementFields O OField4FColumnin4Which64FieldBeginsjTabStopstoReachColumn O OE Label 4E 1 E 0O Operator9  1O8 Operand17 8 2O Comment41  5 O R r.O 2.A Components(of(MACRO-64)SourceOr StatementsOOAsourceprogramconsistsofasequenceofsource statementsNOOthatthe assembler interpretsand processes,oneatatime,JO generatingobjectcodeor performingaspecific assembly-NOtimeprocess.(Asource statementcanoccupyonesourceline8OYorcanextendontoseveralsourcelines.SuKOThischapter describestheformatofthesource statement*Oandthe following components:gTd= `  Characterset `O ONumbers ` Symbols `N NLocallabels ` !Termsand expressions `L 'LUnaryandbinary operators ` (Direct assignment statements `K $KCurrentlocationcounter quh  GJOTable2-2:7Special CharactersUsedinMACRO-64 Statements O  CharacterF CharacterName-Function O   _3 Underscore Characterinsymbolnames. q $5q Dollarsign Characterinsymbolnames.  . PeriodZ- Characterinsymbolnames,currentlocationcounter,anddecimalpoint. e :e Colon#-e Locallabel terminator.  ::3 DoublecolonGloballabel terminator. X =cX EqualsignLocaldirect assignmentoperatorandmacrokeywordargumenttermina-- tor.  = =  Doubleequalm sign/-  Globaldirect assignment operator.  Tab- Field terminator.a Space-a Field terminator.  #2 NumbersignxLiteralvalue indicator. T @T Atsign&-T Arithmeticshift operator.  , Comma1- Field,operand,anditem separator. H ;/H SemicolonCommentfield indicator.  +R PlussignUnaryplus operator,and arithmeticaddition operator. ; -; Minussignor hyphenZ-; Unaryminus operator, arithmetic subtraction operator,andlinecontinu-- ation indicator. * Asterisk/- Arithmeticmultiplication operator. | /| Slash)-| Arithmeticdivision operator. &, AmpersandLogicalAND operator. p !p Exclamation point2-p Logical inclusiveORoperatorpoint. 7 \b7 BackslashLogical exclusiveORandnumeric conversion indicatorinmacroargu-- ments. ^H CircumflexUnary operatorsandmacroargument delimiter.(v_ / O + Character Character+Name-+Function OF  ()c Parentheses Displacementandregisterfield delimiterinan instructionoperand.8- Argument delimitertoalexical operator.  <>J AnglebracketsCArgumentor expressiongrouping delimiters.  ?Q QuestionmarkCCreatedlocallabel indicatorinmacro arguments.  '@ ApostropheMacroargument concatenation indicator.  "4 DoublequoteQuotedliteral delimiter. t %Lt PercentsignDelimitsthe beginningofalexical operator. (space); (tab)i Spaceortab Separatessource statementfields.#Spaceswithin expressionsareother--; wiseignored.  , CommaY- Separatessymbolic argumentswithintheoperandfield."Multipleexpres-J- sionsintheoperandfieldmustbe separatedbycommas. O) [rw1O2.2B CharacterSetIOUWhencodingsource statements,youneedtobeawareofJOwhat charactersare acceptabletothe assembler,andhowIOthe assembler interpretsthem.*The followingnumbersand8O^ charactersareacceptedbythe assembler.Gs ` KThelettersofthe alphabet,AtoZ, uppercaseandlow-I(ercase.)Bydefault,the assemblerconvertsall lowercaseHlettersto uppercase.*Thismeansit considers lowercase6letters equivalentto uppercaseletters.t*HWThe assemblercanoperateinacase-sensitivemode.)InJcase sensitivemode,the assemblerdoesnotconvertlow-Dercaselettersto uppercaseletters.,OnOpenVMSandEaOpenVMSAXPsystems,case sensitivemodecanbese-Clectedfromthecommandlinewiththe /NAMES=as_is qualifier. `  Thedigits0to9. ` .Thespecial characterslistedin@Table2-2.*t@a?uO2.4BQuotedLiteralsQOUAquotedliteralisastringof charactersenclosedindoublePOquotes( "" ).+Usethe following guidelineswhen specifying-O charactersinaquotedliteral:B!  ` KAny characterexceptnull,carriagereturn,andformfeed+(canappearwithinthestring. ` KToincludeadoublequoteor backslashinastring,you9mustprecedeitwitha backslash( \ ). ` CTospecifyan arbitrary character,youcanspecify " \xhh ",whereeach  h, representsasingle hexadecimal-1digit.&Forexample,thestring:"AB\\CD\"EF\x47"lB/Wcontainsthe following characters: AB\CD"EFGMOAlsonotethatthe assemblerdoesnotconvertthecaseof=O alphabetic characterswithinaquotedliteral.& OOQuotedliteralscanbe continuedoverseverallines.*UsetheOOhyphen( - )astheline continuation characteranddelimit;O5thestringwithdoublequotes.'Forexample:AO.ASCII%"Strings%are& delimited%with&double-quotes.">O.ASCII%"The% backslash%is%an%escape& character."XOI.ASCII%"Use%two% backslashes%(\\)%to% represent%the& back-slash%itself."]O.ASCII% "Hexidecimal&escape% sequences%use&lower&or&upper&X:&\x00%or%\X00"_O.ASCII%"Precede%a%double%quote%with%a& backslash%(\")&to&embed&the%quote."HO!.ASCII%"Strings%can&be& continued%onto&multiple&lines&-&Oijust&as&any%other%line." 4OTable2-3:7SummaryofUnary Operators O OFUnaryOOperatorFOperatorNameExample Operation O  O + Plussign+A3r ResultsinthepositivevalueofA. Oq -q Minussign-AHrq Resultsinthenegative(two's complement)valueofA. O \ Valueof8 EscapeY \symbol Indicatesthatthevalueofthesymbolshouldbeused.&InaKr8 stringliteral, indicatesanescape sequence.!Forexample:r "Bob\X0A"O ^Aor^aRASCII3 ^A/ABCD/v SpecifiesanASCII constant.Oz ^Bor^bbBinaryGz ^B11000111l Specifiesthat11000111isabinarynumber.O ^Dor^dWDecimal ^D1277r Specifiesthat127isadecimalnumber.Om ^Oor^o]Octalm ^O345rm Specifiesthat34isanoctalnumber.]O ^Xor^xW Hexadecimal~^XFCF9 SpecifiesthatFCF9isa hexadecimalnumber.&Oa ^Cor^c] Complement^C24Era Producestheone's complementvalueof24 (decimal). O 5OTable2-4:7SummaryofBinary Operators O FBinary6OperatorOperatorNameExampleO Operation O   + Plussign[ A+BAddition q -q Minussign[q A-B Subtraction  * Asterisk [ A  * BMultiplication e /e Slash[e A/BDivision @Atsign [ A@B ArithmeticshiftX & Ampersand&[X A&BLogicalAND (product)  ! Exclamation  point![ A!BLogicalOR(sum)  \ Backslash)[ A\BLogicalXOR (difference) O   & 2=O2.9BUnary OperatorsforTermsand ExpressionsOOUAunaryoperatormodifiesatermoran expressionandindi-POcatestheactiontobe performedonthattermor expression.IO Expressionsmodifiedbyunary operatorsmustbeenclosedJO^inangle brackets.,Youcanuseunary operatorstoindi-MOcatewhetheratermor expressionispositiveor negative.ROIfunaryplusorminusisnot specified,thedefaultvalueisLOhplus.)In addition,unary operatorsperformradix conversionOOandnumericcontrol operations,as describedinthe followingO sections.Table2-3, summarizestheunary operators.*a?b )8*O2.9.1BRadixControl OperatorsPORadixcontrol operators determinetheradixofatermorex-HO_ pression.*MACRO-64acceptstermsor expressionsinfourKO differentradixes:+binary,decimal,octal,and hexadecimal.+OThedefaultradixisdecimal.[B1OFormats O)^Bnn^Dnn^Onn^Xnn  OnnUOAstringof charactersthatislegalinthe specifiedradix.(TheCOq followingarethelegal charactersforeachradix:T! * O0OFormatyRadixNameLegal Characters OOA ^BnnBinaryA 0and1O ^DnnDecimal 0to9O4 ^OnnOctal4 0to74O ^Xnn Hexadecimal~0to9andAtoF OMOjRadixcontrol operatorscanbeincludedinthesourcepro-OOgramanywhereanumericvalueislegal.'Aradixcontrolop-POeratoraffectsonlytheterm immediately followingit,causingCOtthattermtobe evaluatedinthe specifiedradix.OForexample:O<.WORDp ^B00001101<;%Binary&radixO.WORDp^D123&;%Decimal%radix% (default)O.WORDp^O47;%Octal%radixOODonotplacespacesortabsbetweenthe circumflex(^),theJOradix specifier(B,D,O,orX),orthenumericvalue..O2.9.2BNumeric ComplementOperatorLO4The complementoperator( ^C )producestheone'scomple-*Omentofthe specifiedvalue.JB OFormatO)^Cterm)OtermRO#Anytermor expression.(Ifan expressionis specified,itmust,O|beenclosedinangle brackets.HOMACRO-64 evaluatesthetermor expressionasan8-byte+Oovaluebefore complementingit.OForexample:5O.LONG^C^XFF;%Produces%FFFFFF00%(hex)OP.LONG^C25%P;%Produces% complement%of!;p25%(dec)%which%is;pFFFFFFE6%(hex)  k!O2.10CBinary OperatorsGOUIncontrasttounary operators,binary operatorsspec-KOifyactionstobe performedontwotermsor expressions.JO Expressionscanbeenclosedinanglebracketstospecify%O^theorderof evaluation.^Table2-4!:^ summarizesthebinaryO operators.*!c?! LOAllbinary operatorshaveequal priority.*Termsorexpres-KOsionscanbegroupedfor evaluationby enclosingtheminNO<angle brackets.&Theenclosedtermsand expressionsareeval-OOuatedfirst,and remaining operationsare performedfromleft#Otoright.'Forexample:$O.LONG1+2*3;%Equals%9&O.LONG1+<2*3>;%Equals%7! PONotethata64-bitresultisreturnedfromallbinaryopera-TOtions.)Ifyouusethe64-bitresultinacontext requiringlessUO5than64bits,onlythelowerorderbitsoftheresultareused.VOIfthe truncationcausesalossof significanceinadatastorageCO directive,the assemblerdisplaysanerrormessage.! NOThe followingsectionsdescribethe arithmeticshift,logicalPOAND,logical inclusiveOR,andlogical exclusiveOR operators. -O2.10.1C ArithmeticShiftOperatorPO4Usethe arithmeticshiftoperator( @ )toperformleftandQOright arithmeticshiftsof arithmetic quantities.(Thefirstar-SOgumentisshiftedleftorrightbythenumberofbit positionsNO=thatyouspecifyinthesecond argument.*Ifthesecondar-ROgumentis positive,thefirstargumentisshiftedleftandtheSO low-orderbitsaresettozero.'Ifthesecondargumentisneg-POGative,thefirstargumentisshiftedrightandthe high-orderRObitsaresettothevalueoftheoriginal high-orderbit(the$Osignbit).'Forexample:z}.LONGp^B101@4&};%Yields%1010000%(binary)z.LONGp1@2";%Yields%100&(binary)O A&=%4zU.LONGp1@A$U;%Yields%10000%(binary)z.LONGp ^X1234@-A;%Yields%123(hex)((O2.10.2CLogicalANDOperatorQO4ThelogicalANDoperator( & )takesthelogicalANDoftwo"O operands.'Forexample:OA&=%^B1010OYB&=%^B1100z.LONGpA&B#;%Yields&1000%(binary)I2O2.10.3CLogical InclusiveOROperatorUO4Thelogical inclusiveORoperator( ! )takesthelogicalinclu-5OsiveORoftwo operands.'Forexample:OA&=%^B1010OYB&=%^B1100z.LONGpA!B#;%Yields&1110%(binary)G2O2.10.4CLogical ExclusiveOROperatorMO4Thelogical exclusiveORoperator( \ )takesthelogical;O exclusiveORoftwo arguments.'Forexample:OA&=%^B1010OYB&=%^B1100z.LONGpA\B#;%Yields&0110%(binary) !o)O 3.2MACRO-64!Lexical"OperatorFOThischapter describestheMACRO-64lexical operators.! " 3O3.1B ProcessingwithLexical OperatorsNOULexicaloperator processingis performedonallsourcelinesNOandmacro expansionlinespriortoanyother assemblerpro-KOcessing.)Thus,macro invocations, assembler directives,andRO^ instructionsaresubjecttolexicaloperator processingpriorto(Onormal assembler processing.F! MOLexical operatorsare recognizedand processedwithinstringJO literals.,Lexicaloperator processingis suppressedduringMO5macro registrationinorderthatlexicaloperator evaluationJOmayoccurduringmacro expansion.'Lexicaloperatorevalu-WOationisalso suppressedforarangeoftextthatis conditionallyPO>excludedwithoneofthe.IF directives.+In addition,lexicalGOoperator processingisnot performedwithinacomment.#"$S )>O3.3BNumericSymbolsandLexicalStringSymbolsNOULexicalstringsymbolsaresimilarinconceptandsyntaxtoAOnumericsymbols.+MACRO-64supportsnumericsymbols(Ousingthe followingsyntax:4Onumeric_symbol_name=numeric_expression  KOMACRO-64supportslexicalstringsymbolsusingthefollow-Oingsyntax:>Olstring_symbol_name="anystringof characters" GOThe assemblerdifferentiatesbetweennumericsymbolas-JOsignmentandlexicalstringsymbol assignmentasfollows:&  ` HInalexicalstringsymbol assignment,aquotedstring9(literalmustappearaftertheequalsign. ` KAlexicalstringsymbolvalueis specifiedbythequotedstringliteral.NNONotethatthequotesarenotincludedinthevalueoftheMOlexicalstringsymbol.*Youcannotusethesamenamefora?O5lexicalstringsymbol,numericsymbolorlabel.A! JOLikenumericsymbols,lexicalstringsymbolsareassemblyNOtime variables.*OnceyouhaveassignedastringvaluetoaTO5lexicalstringsymbol,youcanreassigna differentvaluetothe+Osymbollaterinthe assembly.! MOYoucanuselexicalstringsymbolsas argumentstolexicalNO operators.*In particular,youcanusealexicalstringsym-VO5bolasanargumenttothelexical substitutionoperator( % )orNOthe%STRINGlexicaloperatorto substitutethevalueoftheTOlexicalstringsymbolatanypointinthetextofyourprogram.z&`6LOExample3-1:7Lexical ProcessingWithouttheEscapeOperator%BCODE_PSECT_NAME&=%"CODE1"A.macro& CODE_PSECT%#PSECT_NAME=%string(CODE_PSECT_NAME) .psect% PSECT_NAME.endm% CODE_PSECTb CODE_PSECT%CODE_PSECT_NAME&=%"CODE2" CODE_PSECTs'Y/DOExample3-2:7Lexical ProcessingWithEscapeOperator%BCODE_PSECT_NAME&=%"CODE1"B.macro& CODE_PSECT%$PSECT_NAME=%%string(CODE_PSECT_NAME).psect% PSECT_NAME.endm% CODE_PSECTb CODE_PSECT%CODE_PSECT_NAME&=%"CODE2" CODE_PSECTP$#%d:.O3.4BLexical SubstitutionOperatorQOUYoucanusethelexical substitutionoperatoratanypointinNOyourprogramtocausethe assemblerto substitutethevalueOOofalexicalstringsymbolforthenameofthesymbol.*TheNO^lexical substitutionoperatoristhepercentsign(%).+PlaceROthelexical substitutionoperatortotheleftandrightoftheQOnameofthelexicalstringsymbolthatyouwishto subsitute,Ohasfollows:O %lexsym_name%OForexample:/ HORSES=&"All%the&king's%horses" PMEN$P=&"all%the&king's%men"( .print% "%HORSES%%and&%MEN%"  FOTheaboveexampledefinestwolexicalstringsymbols:EOHORSESandMEN.Thethird statementdisplaysames-QO5sageatassemblytime.(Thetextofthemessage specifiesthatIOthevalueoftheHORSESandMENlexicalstringsymbolsQObe subsitutedas indicated.)Afterlexical processing,thethird!O> statementappearsas:H .print%"All&the%king's%horses&and%all%the&king's%men") 2OExample3-3:7UsingLexical Operators@zB;%Macro%to%load%a&general%or%floating%register%z.macro%LOAD&REG%LOCATIOND;&If&the%location%doesn't&specify%a%base& register,D;;&load%relative%to%the& procedure% descriptor&PD&off;&of&R27.?.if%lt,& %locate(<(>,% LOCATION),&%length(LOCATION)&;%base&register& specified[LOC&=% "LOCATION".else+;%base&register&not% specified$3LOC&=%"LOCATION-PD(R27)"{.endc>;&Use%LDQ%if%a%general&register&is& specified8,.if%ne,& <%type(REG)&&%MACRO64$TYPE_GENREG>tLDQpREG,%string(LOC).else?%;%Use%LDx&if&a%floating%register%is% specified7m.if&ne& <%type(REG)&&%MACRO64$TYPE_FLTREG>7:;%Use&the% appropriate%LDx%floating%load7:;% depending&on&the%first%letter%of%the :E;%location%to%load.:FTYPES%=&"FGST"9:.if%ge,%"%locate(%extract(0,1,LOC),FTYPES),%-%length(FTYPES)e.error%-="Unknown%floating%data&type:&%extract(0,1,LOC)".mexit:< .endc4: LD%extract(0,1,LOCATION)%REG,%string(LOC) .else: .error%-I\ "First%argument%must%be%a&general%or%floating% register" .endc .endcz4 .endm&LOADz| .psect%D,noexe9O pd:.procedure_descriptor%my_routine,my_entry8z ;%Fill%in% procedure% descriptor% details...OT  BUILD_TIME:z .asciz_  "%time()"O K:.quad_ %repeat(9,<42,>)42$O, GPI: .g_floatingK3.14159'Ot CIRCLE:&.address FAC_CIRCLEO TX=%0OTY=%8OLTRADIUS&=%16z.psect%X,exeO MY_ENTRY:z#LOADKR1,KzkLOADK R2,CIRCLEzLOADKF13,TRADIUS(R2)zLOADKF11,GPIzCLOADKF10,KzLOADKKA*' DOExample3-4:7Source StatementsAfterMacro Expansionz.psect%D,noexe9OXpd:.procedure_descriptor%my_routine,my_entry8z;%Fill%in% procedure% descriptor% details...O BUILD_TIME:z0.asciz"_0"& 9-JUL-1992% 17:56:20"OxK:.quad'_x42,42,42,42,42,42,42,42,42,42$OGPI: .g_floatingK3.14159'OCIRCLE:&.address FAC_CIRCLEOOTX=%0OTY=%8OTRADIUS&=%16z'.psect%X,exeOo MY_ENTRY:zLDQp R1,K-PD(R27) zLDQpR2,CIRCLE-PD(R27)zGLDTpF13,TRADIUS(R2)zLDG%F11,GPI-PD(R27)5z.error%"Unknown%floating%data&type:&K"Qz.error%"First%argument%must%be%a&general%or%floating% register";% $( 2(O3.5BLexicalEscapeOperatorVOUItispossibletodeferthe processingofalexicalstringopera-ROtorbyusingthelexicalescape operator,whichisthepercentVOsign( % ).(Sincealllexicalstring operatorsbeginwithaper-QO^centsign,theeffectofplacingtwopercentsignsbeforetheOOnameofthelexicalstringoperatordefersthe evaluationofOOthelexicalstring operator.*Ifyouwanttodefer processingQOhofalexical substitution operator,placetwopercentsignstoWOtheleftandtwopercentsignstotherightofthelexicalstringOsymbolname.8 QOThiscanbeusefulwhenyouwantthe evaluationofalexicalOOstringoperatorthatyouhaveusedinadefaultmacroargu-JO5menttooccurduringmacro expansion,ratherthanduringKOmacro definition.*Lexicaloperator processingis suppressedKOduringmacro registration.* Therefore,lexicaloperatorpro-PO>cessingis automaticallydeferredwithinthebodyofamacro.JOHowever,the.MACRO directivelinethatbeginsthemacroMO definitionissubjecttonormallexicaloperator processing.POH SometimesyoumayneedtousethevalueofalexicalstringLOsymbolasthedefaultforamacro argument,butyouneedROtousethevalueofthelexicalstringsymbolthatiscurrentIORwhenthemacroexpands,notwhenthemacroisdefined.OExample3-1?Dshowsanexampleofthis,thoughnotusinganOescape operator:*OmOdOExample3-1the PSECT_NAME7argumentwillbesettoCODE1,; not%string(CODE_PSECT_NAME).,Thisisbecause<c%string(CODE_PSECT_NAME)is evaluatedwhentheB CODE_PSECTmacroisdefined,notwhenitexpands.OExample3-2Hissimilarto Example3-1exceptitusesthe$Olexicalescape operator:*OFO* FO}SOExample3-2=C processes correctlyforthe followingreasons:*OMO$ # ` FLexicaloperator processingof%%string(CODE_PSECT_NAME)B(isdeferredwhenthe CODE_PSECTmacroisdefined.AThedefaultvalueforthe PSECT_NAMEargumentis/storedas%string(CODE_PSECT_NAME). `Y =YDuringmacro expansion,%string(CODE_PSECT_NAME)Eis evaluated, resultinginthecurrentvalue ofthe@ CODE_PSECT_NAMElexicalstringsymbolasdesired.,!k 6OTable3-1:7SummaryofMACRO-64Lexicals O OLexicalFReturnTypeFunction O HO %EDITStringLexicaloperatorforeditingtextstrings.iOq %ELEMENT1StringLexicaloperatorfor extractinganelementfromalistof elements.vO %EXTRACT6StringLexicaloperatorfor extractingarangeof charactersfromastringofcharac-8 ters.sO %INTEGERADecimalLexicaloperatortoconvertthevalueofan expressiontoadecimalvalue.\O, %LENGTH[DecimalLexicaloperatorfor determiningthelengthofastring.xO %LOCATEfDecimalLexicaloperatorforlocatingastringoftextwithinaanotherstringoftext.RO  %REPEATkStringLexicaloperatorfor repeatinga specifiedstring  x  numberoftimes.iO %STRINGqStringLexicaloperatorfor obtainingthevalueofalexicalstringsymbol.jO %TIMEStringLexicaloperatorfor obtainingthedateandtimeoftheassemblyunit.YO %TYPEDecimalLexicaloperatorfor obtaining informationaboutaname. O S(%+9w(O3.6BUsingLexical OperatorsCOUThissectioncontainsa programmingexampleshowingGOsource statementsusinglexical operatorsandthesameKO statementsaftermacro expansionandlexicaloperatorpro-O^cessing.+(-  !O3.7BLexical OperatorsMO(Thissection describestheMACRO-64lexical operators,their1Oreturnvalues,andtheir arguments.Table3-1liststhelexi-OOcalsandgivesabriefsummaryoftheir function.)AdecimalLO1returnvalueresultsinthedecimaldigitsofthenumericAOvaluebeing substitutedforthelexical operator.* Ca?!m - +.9"O%EDIT*#c$99OLexicaloperatorforeditingtextstrings.\%2OFormat"Os%EDITN(string1,string2)&=O ArgumentsOsstring1ROThefirst argument,oftypestring, specifiesthestringtobeO$edited.' Ostring2VO(Thesecond argument,oftypestring, specifiesalistofeditsto*Operform, separatedbycommas.( O DescriptionGOs%EDITismodeledaftertheOpenVMSDCLF$EDITlexicalRO function.)Itisusedtoperformoneormoreeditsonaspec-LO$ifiedstring.)%EDIT processesthestringof argumentsfromNO|lefttoright.)%EDITgives precedencetothelast argument.CO%EDITgives precedenceto uppercaseover lowercase.ROpThelistofeditsmaycontainany combinationofthe followingO elements:)!  OOElementbFunction O4OACOLLAPSEhRemovesalltabsandspaces.JOCOMPRESSNReplacesmultipletabsandspaceswithasinglebspace.CO LOWERCASEChanges uppercase charactersto lowercase.OTRIM=bRemovesleadingandtrailingspacesandtabs.@OUPCASEChanges lowercase charactersto uppercase. O<*OExamples+ Example1E#.PRINT%"%EDIT(<%Fred&Smith&>,&)"FAfterlexical processing,the statementapearsasthe following:.PRINT% "FREDSMITH",! )Example26#.PRINT%$"%EDIT(,)6k.PRINT%$"%EDIT(,)IThefirstsource statementproducesthestring "abcdefg"D_andthesecondsource statementproducesthestringN "ABCDEFG".&Eachoftheeditsintheeditlistis performed)in sequence,lefttoright.x. -/<-O%ELEMENT*./A_OOLexicaloperatorfor extractingelementsfromalistofele-O(ments.g0=OFormat-Os%ELEMENTN(integer,string1,string2)1 =O ArgumentsOsintegerQOThefirst argument,oftypeinteger,istheelementnumberto:O$extract.'Thefirstelementisnumberzero.2Ostring1KO(Thesecond argument,oftypestring,isthe delimiteror/O delimitersthatseparate elements.3AaOstring2PO(Thethird argument,oftypestring,isthelistof elements.4S O DescriptionAOs%ELEMENTismodeledafterOpenVMSDCL's F$ELEMENTNOlexical function.,ItisusedtoextractoneelementfromaIO$stringof elements.(Notethatunlike F$ELEMENT,youmayQO|specifymultiple delimiters.)Theresultisthe specifiedstringOOelement.(Ifthe specifiedelementnumberisgreaterthantheLO-numberofelementsinthelist,the delimiterargumentisO returned.5{ OExamplesC.PRINT% "%ELEMENT%(2,&<+-*/>,%JOE+FRED-TOM*BILL/ERIC)"COAfterlexical processing,the statementappearsas:.PRINT%"TOM"/ .0<6O%EXTRACT*78ApOOLexicaloperatorfor extractingarangeof charactersfroma!O(stringof characters.h9>OFormat.Os%EXTRACTN(integer1,integer2,string):=O ArgumentsOsinteger1SOThefirst argument,oftypeinteger,istheoffsetatwhichtoOO$beginthe extraction.'Thefirst characterisatoffsetzero.;}Ointeger2IO(Thesecond argument,oftypeinteger,isthenumberof"O characterstoextract.<OstringPO(Thethird argument,oftypestring,isthestringfromwhich'Otoextractthe characters.:=O Description>Os%EXTRACTismodeledafterVAXMACRO's%EXTRACTAOmacrostringoperatorandOpenVMSDCL's F$EXTRACTKO$lexical function.*%EXTRACTisusedtoextracta specified1O|rangeof charactersfromastring.>OExamples2b.PRINT% "%EXTRACT(3,4,ABCDEFGHIJKLMNOP)"COAfterlexical processing,the statementappearsas:.PRINT%"DEFG"0/1<?O%INTEGER*@AAlPOLexicaloperatorfor convertingthevalueofan expressiontoO(adecimalvalue.WB-OFormatOs%INTEGERM (integer)C=O ArgumentsOsintegerQOThesingle argument,oftypeinteger,isthe expressiontobeO$ converted.D eO DescriptionAOs%INTEGERismodeledafterOpenVMSDCL's F$INTEGERPOlexical function.,Itisusedtoconvertthevalueofanex-QO$pressiontoadecimalvalue.)Theresultisitsdecimalvalue.LO|%INTEGERcanalsobeusedconverta relocatable expression"Otoanabsolutevalue.EOExamples)b.PRINT% "%INTEGER% (<*17>)QOAfterlexical processing,ifXhasthevalue3,the statementOVwouldappearas:.PRINT%"170"U102;FO%LENGTH*GtHJJOLexicaloperatorfor determiningthelengthofastring.UI+OFormatOs%LENGTHN(string)J =O ArgumentsOsstringQOThesingle argument,oftypestring,isthestringfromwhich,O$thelengthistobe computed.yK OO Description)"COAfterlexical processing,the statementappearsas:.PRINT%"19"213;MO%LOCATE*NOAkPOLexicaloperatorforlocatingastringoftextwithinanotherO(stringoftext.^P4OFormat$Os%LOCATEN(string1,string2)Q=O ArgumentsOsstring1OOThefirst argument,oftypestring,isthestringforwhichO$%LOCATE searches.ROstring2OO(Thesecond argument,oftypestring,isthestringinwhich%Othesearchis performed.sS! IO Description)touch&that%button!"COAfterlexical processing,the statementappearsas:E.PRINT%"Never,&ever,&ever,&ever,&touch&that%button!"4 35;]O%STRING*^_A`OOLexicaloperatorfor obtainingthevalueofalexicalstringO(symbol.U`+OFormatOs%STRINGM(string)Ma #O ArgumentsOsstringROThesingleargumentisoftypestring.'IftheargumentistheRO$nameoflexicalstringsymbol,thevalueofthelexicalstringHO|symbolis returned., Otherwise,theargumentisreturnedO unchanged.bO Description?Os%STRINGismodeledafterOpenVMSDCL'sF$STRINGKOlexical function.+%STRINGis generallyusedtoobtaintheSO$valueofalexicalstringsymbol,butitcanbeusedwithanyO|string argument.=OThelexical substitutionoperator describedinSection3.4)Opperformsasimilar function.*b?c^OExamples,bFOO%=&"All%the&king's%horses" .PRINT%"%STRING(FOO)"dUoCOAfterlexical processing,the statementappearsas:,<.PRINT%"All&the%king's%horses"7q jh(OTable3-2:8%TYPE Attributes O OFSymbolicNameF Attribute Ob BOMACRO64$TYPE_SYMBOLNameisanumericsymbolname.O$MACRO64$TYPE_PROC_O|DESC3$Nameisa procedure descriptorname.OMACRO64$TYPE_LABELNameisalabel.OMACRO64$TYPE_GENREGNameisageneral register.?O>MACRO64$TYPE_FLTREGNameisafloating register. Od 5469eO%TIME*fgAcJOLexicaloperatorfor obtainingthedateandtimeoftheO(assemblyunit.Oh%OFormatOs%TIMEN( )ji@O DescriptionBOs%TIMEismodeledafterOpenVMSDCL'sF$TIMElexi-OOcal function.)%TIMEisusedtoobtainthetimeanddateofNO$theassemblyunit.)Thereareno arguments.)TheresultisaLO|string specifyingthedateandtimeoftheassemblyunit.jOExamplesb.PRINT% "%TIME()"COAfterlexical processing,the statementappearsas:*.PRINT%"& 8-OCT-1991% 13:17:57" 6589kO%TYPE*lsmIIOLexicaloperatorfor obtaining informationaboutaname.Qn'OFormatOs%TYPEN(name)o=O ArgumentsOsnameJOThesingleargumentisoftypename.+ Informationisre-AO$turnedaboutthename specifiedinthe argument.p |O DescriptionBOs%TYPEismodeledafterOpenVMSDCL'sF$TYPElexi-LOcal function.+%TYPEisusedtoobtain informationaboutaKO$name.)ThevaluereturnedisanumericvaluewithcertainNO|bit positions,eitherzeroorone, dependingonwhethertheMO specifiednamehasthe corresponding attribute.(As describedPO- elsewhere,hedecimaldigitsofthenumericvaluearesubsti-4Otutedforthe%TYPElexical operator.Table3-2<showstheGOsymbolicnamesthatare predefinedforeach attribute:*pIb?qtrJJOAgivennamemayhavezero,one,orseveral attributes.sOExamplesb.macro%IS_GR%ARG;.IF&equal,% %TYPE(ARG)&&%6.PRINT%"ARG&is&not%a&general% register":.ENDC.endm&IS_GRIS_GR&F11tOO Initially,thefirstlineoftheIS_GRmacroexpandsastheO following:;.IF%equal,% <%TYPE(F11)%&%MACRO64$TYPE_GENREG>u!xCOAfterlexical processing,the statementappearsas:5.IF%equal,%<8192%&%MACRO64$TYPE_GENREG>vOOInthisexample,8192isthe attributevalueforafloatingKOpoint register.,Thisvaluecouldchangein subsequentre-JO5leases.+Useonlythe predefined attributemasks described OinTable3-2.:SSincethe attributeforageneralregisterAOMACRO64$TYPE_GENREGis4096,the expressionevalu-O>atesaszero.(<8192&&%MACRO64$TYPE_GENREG>*vPe?q*w:9; %O4.2BUsingDefaultValuesQOUDefaultvaluesarevaluesthataredefinedinthemacrodefi-MOnition.(Theyareusedwhennovalueforaformalargument.Ois specifiedinthemacrocall.IODefaultvaluesare specifiedinthe.MACRO directiveasOfollows:0Olformal-argument-name= default-valueLOAnexampleofamacro definition specifyingdefaultvaluesOfollows:1Oa.MACROKSTOREpARG1=12,ARG2=0,ARG3=1000O.LONGpARG1O.WORDpARG3O9.BYTEpARG2O.ENDMpSTORE MOThe followingthreeexamplesshowpossiblecallsandexpan-5Osionsofthemacrodefined previously:OaSTORE$a;&No& arguments%suppliedO.LONGp12O.WORDp1000O9.BYTEp0OSTOREp,5,X+;&Last%two& arguments%suppliedO.LONGp12O2.WORDpXOz.BYTEp5OSTOREp1&;&First&argument&suppliedO+.LONGp1Os.WORDp1000O.BYTEp02;:< )(O4.3BUsingKeyword ArgumentsLOUKeyword argumentsallowamacrocalltospecifytheargu-ROmentsinanyorder.'Inthiscase,themacrocallmustspecifyJOthesameformalargumentnamesthatappearinthemacroFO^ definition.+Keyword argumentsareusefulwhenamacroLO definitionhasmoreformal argumentsthan necessaryintheOcall.KSOInanyonemacrocall,itisgoodpracticetospecifythear-KOgumentsaseitherall positional argumentsorallkeywordFO5 arguments.-Forexample,the followingmacro definition&O specifiesthree arguments:'O.MACROKSTOREpARG1,ARG2,ARG3OZ.LONGpARG1O.WORDpARG3O.BYTEpARG2O2.ENDMpSTOREEOThe followingmacrocall specifieskeyword arguments:.OSTOREpARG3=27+5/4,ARG2=5,ARG1=SYMBLOP.LONGpSYMBLO.WORDp27+5/4O.BYTEp5! NQOBecausethekeywordsare specifiedinthemacrocall,thear-SOgumentsinthemacrocallneednotbegivenintheorderthey3O5werelistedinthemacro definition.SHO Positionalandkeyword argumentsmaybemixed.)Usually,IO positional argumentsareplacedbeforekeyword arguments:.Oa.MACROKSTOREpARG1,ARG2,ARG3=27+5/4O.LONGpARG1O.BYTEpARG2O9.WORDp27+5/4O.ENDMpSTORE _UNote _AKeyword argumentsarenotcountedwhen positionalA argumentsareparsed.)Thismeansthatwhenposi-C;tionalandkeyword argumentsareusedinthesameFmacro,oneargumentcanbe specifiedtwice.(Thelast9value specifiedfortheargumentisused. 7F%<;= )'O4.4BUsingString ArgumentsOOUIfanactualargumentisastring containing charactersthatPOthe assembler interpretsas separators(suchasatab,space,OOorcomma),thestringmustbeenclosedby delimiters.(StringHO^ delimitersformacro argumentsareusuallypairedangleNObrackets(<>).'Aquotedliteralenclosedindoublequotes( ]"" )/Oisalsoavalidstring argument.6  _OThe assembleralso interpretsany character(exceptA,B,C,D,O,orX)POafteraninitial circumflex( ^ )asa delimiter.-NotethatRO5^B,^D,^O,and^Xareusedasradixcontrol operatorsratherMOthanargument delimiters.)^AisusedastheASCIIoperatorPOand^Cisusedasthe complement operator.'TopassanangleQO>bracketaspartofastring,youcanusethe circumflexformOofthe delimiter.[1IOThe followingareexamplesof delimitedmacro arguments:*O*OqKO"A%quoted%literal%is%taken%as%a&single% parameter%value."2OD ^%ARGUMENT&IS& %FOR%CALL%(O ^?EXPRESSION%IS% <5+3>*<4+2>?8 ROInthelasttwo examples,theinitial circumflex indicatesthatUOthepercentsign( % )andquestionmark( ? )arethedelim-RO5iters.(Notethatonlythe left-hand delimiterisprecededbyaO circumflex.WLOThe assembler interpretsastringargumentenclosedbyde-MOlimitersasoneactualargumentand associatesitwithoneKO5formal argument.)Ifastringargumentthatcontainssepa-OOrator charactersisnotenclosedby delimiters,the assemblerPO interpretsitas successiveactual argumentsand associatesit.O>with successiveformal arguments.RLOForexample,the followingmacro definitionhasoneformalO argument:%Oa.MACRO% DOUBLE_ASCII&STRNGO.ASCIIK"STRNG"O.ASCIIK"STRNG"O9.ENDMp DOUBLE_ASCIIs IKOThe followingtwomacrocalls demonstrateactual arguments)Owithandwithout delimiters:'Oa DOUBLE_ASCII%!O.ASCIIK"A&B%C%D&E"!O.ASCIIK"A&B%C%D&E"%OZ DOUBLE_ASCIIKA%B%C&D%EGO%MACRO64-E-TOOMNYARGS,&Too%many& arguments%in%macro%call NNONotethatthe assembler interpretsthesecondmacrocallasMOhavingfiveactual argumentsinsteadofoneactualargumentO5withspaces.r HFOWhenamacroiscalled,the assemblerremovesnormalQO delimitersaroundastringbefore associatingitwiththefor-GO5mal arguments.-However,aquotedliteralwithindoubleUOquotesistreatedasasingletokenandretainsitsdoublequoteO delimiters._UOIfastringcontainsa semicolon( ; ),thestringmustbeen-MOclosedby delimiters, otherwisethe semicolonwillmarktheQO5startofthecommentfield.)Further,ifthestringcontainsaRO semicolon,youcannotcontinuethelineunlessthestringisaOquotedliteral.LOMacro invocationscanbenested,thatis,amacrodefini-QOtioncancontainacalltoanothermacro.)If,withinamacroRO5 definition,anothermacroiscalledandispassedastringar-KOgument,youmustdelimittheargumentsothattheentireHOstringispassedtothesecondmacroasone argument.{ QGOThe followingmacro definitioncontainsacalltothe0O DOUBLE_ASCIImacrodefinedearlier:*za.MACROpCNTDA&LAB1,LAB2,STR_ARG#OLAB1:p.BYTE LAB2-LAB1-1!$;%Length%of%2*string!z DOUBLE_ASCIIp &$;%Call& DOUBLE_ASCII%macroO9LAB2:z.ENDMCNTDA! WMONotethattheargumentinthecallto DOUBLE_ASCIIisen-POclosedinanglebracketseventhoughitdoesnotcontainanyIO5 separator characters.*Theargumentisthus delimitedbe-QOcauseitisaformalargumentinthe definitionofthemacroJOCNTDAandwillbereplacedwithanactualargumentthat.O>maycontain separator characters.qGGOThe followingexamplecallsthemacroCNTDA,whichin0Oturncallsthemacro DOUBLE_ASCII:,OaCNTDAJ ST,FIN,OST:.BYTEpFIN-ST-1,z DOUBLE_ASCII%&z9.ASCIIJ"LEARN&YOUR%ABC'S"&z.ASCIIJ"LEARN&YOUR%ABC'S"OFIN: MOInadditiontonestedmacro invocations,youcanalsonestNOmacro definitions.(Thatis,youcandefineonemacrowithinCO5another.(Inthisexample,theINNER_MACRO_DEFmacroBOisnotdefineduntiltheOUTER_MACRO_DEFmacrois!Oinvokedand expanded:!zk.macro%OUTER_MACRO_DEF!.macro%INNER_MACRO_DEF ... B.endm%INNER_MACRO_DEF z.endm&OUTER_MACRO_DEF}ISPOYoucanusethis capabilitytodefineamacrothat redefinesOitself:za.macro%SETUPA&=%75B&=%929C&=%87D&=%0E&=%-12F&=%42Y.macro%SETUP,;%Setup%is%done&-%do%nothing.endm%SETUPz0.endm&SETUP! %GOInthisexample,theSETUPmacrodefinesanumberofHOassembly constants.*AftertheSETUPmacrohasbeenex-NO5pandedonce,itsworkisdone.) Subsequent expansionsoftheMOsetupmacroneednottakeanyaction.' Therefore,theSETUPLOmacro redefinesitselftoamacrowhose expansionincludesGO>onlyacomment statement.+As described elsewhere,whenNOyouredefineamacro,theoriginalversionofthemacroisLO automaticallydeleted.)Ifthatmacrois currently expandingOOH(aswouldbethecasewiththeSETUPmacroabove),thenewJO definitionis immediately associatedwiththemacroname.POHowever,theold definitionisretaineduntilallpendingex-GORpansionscomplete normally.*Whenallpending expansionsPO complete,theoldversionofthemacroisdeleted.*Thus,theIOSETUPmacromaybeinvokedanynumberoftimesinthePO[assemblyunit.*Sincethefirst expansion redefinesitself,theMO expansionoftheSETUPmacrohasnoeffectotherthanthe'O firsttimeitisinvoked.; OOAnotherwaytopassstring argumentsinnestedmacrosisto@Oenclosethemacroargumentinnested delimiters. ^MBaNOTE ^M?Eachtimeyouusethe delimitedargumentinaE>macrocall,the assemblerremovesthe outermostpairIof delimitersbefore associatingitwiththeformalar-Bgument.(Thismethodisnot recommendedbecauseitGHrequiresthatyouknowhowdeeplyamacroisnested. o EMOThe followingmacro definitionalsocontainsacalltotheO DOUBLE_ASCIImacro:+Ta.MACROKCNTDA2%LAB1,LAB2,STR_ARG#OLAB1:J.BYTEp LAB2-LAB1-1!;&Length%of%2*stringT DOUBLE_ASCIIKSTR_ARG&;&Call% DOUBLE_ASCII&macroO9LAB2:T.ENDMpCNTDA2 uMONotethattheargumentinthecallto DOUBLE_ASCIIisnot(Oenclosedinangle brackets. q=OThe followingexamplecallsthemacroCNTDA2:8TCNTDA2&BEG,TERM,<>!OPBEG:p.BYTEp TERM-BEG-1!P;&Length%of%2*stringQT DOUBLE_ASCIIK%;&Call% DOUBLE_ASCII&macro-T.ASCIIK"MIND%YOUR&P'S%AND%Q'S"-T(.ASCIIK"MIND%YOUR&P'S%AND%Q'S"OpTERM:L"HONotethateventhoughthecallto DOUBLE_ASCIIintheSOmacro definitionisnotenclosedin delimiters,thecallintheKO5 expansionisenclosedbecausethecalltoCNTDA2containsjw@&O4.5BArgument ConcatenationLOUTheargument concatenation operator,the apostrophe( ' ),IO concatenatesamacroargumentwithconstanttextoran-LOother argument.) Apostrophescaneitherprecedeorfollowa9O^formalargumentnameinthemacrosource. |LOIfan apostropheprecedestheargumentname,thetextbe-NOforethe apostropheis concatenatedwiththeactualargumentOO5whenthemacrois expanded.(Forexample,ifARG1isafor-GOmalargument associatedwiththeactualargumentTEST,OthenABCDE ',NARG1isexpandedto ABCDETEST.K !MOIfan apostrophefollowstheformalargumentname,theac-OOtualargumentis concatenatedwiththetextthatfollowstheFO5 apostrophewhenthemacrois expanded.,The apostrophe?Oitselfdoesnotappearinthemacro expansion.4  KOTo concatenatetwo arguments,separatethetwoformalar-HOgumentswithtwo successive apostrophes.)Two apostrophesLO5areneededbecauseeach concatenation operationdiscardsan+O apostrophefromthe expansion. JOAnexampleofamacro definitionthatuses concatenationOfollows:za.MACRO%CONCATpA,BOA''B:p.WORD&0z.ENDM&CONCAT! MONotethattwo successive apostrophesareusedwhenconcate-9Onatingthetwoformal argumentsAandB.ioCOAnexampleofamacrocalland expansionfollows:zCONCATJX,YOPXY:.WORD&0>=? 24O4.6BPassingNumericValuesofSymbolsNOUWhenasymbolis specifiedasanactual argument,thenameROofthesymbol,notthenumericvalueofthesymbol,ispassedPOtothemacro.)Thevalueofthesymbolcanbepassedbyin-PO^sertinga backslash(\)beforethesymbolinthemacrocall.JOThe assemblerpassesthe characters representingthedec-OOimalvalueofthesymboltothemacro.*Forexample,iftheIOhsymbolCOUNThasavalueof2andtheactualargumentQO specifiedis\COUNT,the assemblerpassesthestring2totheJOmacro;itdoesnotpassthenameofthesymbol,COUNT.NMOPassingnumericvaluesofsymbolsis especiallyusefulwithOOthe apostrophe( ' ) concatenationoperatorforcreatingnewO5symbols. NOAnexampleofamacro definitionforpassingnumericvaluesOofsymbolsfollows:za.MACRO%WORD&nOWORD'n:&.WORD&nz.ENDM&WORD OOThe followingexampleshowsapossiblecalland expansionof*Othemacro previouslydefined:TaX%=&1#a;%Start%counting%at%1TWORD%\XOWORD1:%.WORD%1 ?>@X0O4.7BUsingCreated TemporaryLabelsLOU Temporarylabelsareoftenveryusefulinmacros.(AlthoughLOyoucancreateamacro definitionthat specifies temporaryNOlabelswithinit,these temporarylabelsmightbe duplicatedNO^ elsewhereinthe temporarylabelblock,possiblycausinger-MOrors.(However,the assemblercancreate temporarylabelsinMOthemacro expansionthatwillnotconflictwithothertem-IOhporarylabels.-Theselabelsarecalledcreated temporaryOlabels.~TFOCreated temporarylabelsrangefrom30000$to65535$.EOEachtimethe assemblercreatesanew temporaryla-PO5bel,it incrementsthenumericpartofthelabelnameby1.LO Consequently,no user-defined temporarylabelsshouldbein-Otherangeof30000$to65535$. WUOAcreated temporarylabelis specifiedbyaquestionmark( ? )KOinfrontoftheformalargumentname.)WhenthemacroisOO5 expanded,the assemblercreatesanew temporarylabeliftheKO correspondingactualargumentisblank.)Ifthe correspond-QOingactualargumentis specified,the assembler substitutesthe7O>actualargumentfortheformal argument.RJOThe followingexampleisamacro definition specifyinga$Ocreated temporarylabel:za.MACROJPOSITIVEaARG1,?L1zBGEARG1,L1zNEGQ ARG1,ARG1O9L1:.ENDMPOSITIVE,LOThe followingthreecallsand expansionsofthemacrode-KOfined previouslyshowbothcreated temporarylabelsanda)O5 user-defined temporarylabel:zPOSITIVEKR0zBGE R0,30000$zINEGQR0,R0O30000$:zPOSITIVEKR5zBBGE R5,30001$zNEGQR5,R5O30001$:z;POSITIVEKR7,10$zBGER7,10$zNEGQR7,R7O10$:~T=OFormore informationon temporarylabels,seeSection2.6.*F{?&@?A  e-O 5.2MACRO-64! Assembler" DirectivesJOMACRO-64 directivesenableyoutocontrolcertainaspectsLOoftheassemblyprocess.'Thischapter describestheMACRO-MOB64 assembler directives.*It describesthevarious functionalQO categoriesof directives,aswellasadetailed descriptionofROeach directive.)Italso discussestheeffectsof automaticdata/OL alignmenton assembler directives. D BOTable5-1:7SummaryofGeneral Assembler Directives O OKCategoryK Directives /1KPsect Application Of .O Listingcontrol directives.TITLE .SUBTITLE(.SBTTL)I .IDENT .LIST .NLIST2 .SHOW .NOSHOW .PAGE  All.OG Messagedisplay directivesP.PRINT .WARN .ERROR G All#O[ Assembleroptiondirec-O tives[ .ENABLE(.ENABL) .DISABLE(.DSABL) [ All*O# Datastorage directives.BYTEp .WORD .SIGNED_BYTE  .SIGNED_WORDX .LONG .ADDRESS .CODE_ADDRESSA .LOCAL_CODE_ADDRESS .OCTA .QUAD) .ASCIIw .ASCIC .ASCID .ASCIZ_ .F_FLOATING(.FLOAT)  .D_FLOATING (.DOUBLE) .G_FLOATINGH .S_FLOATING .T_FLOATING# NOEXE(orMIX) .INSTRUCTION EXE(orMIX)/O Locationcontrol directives[.ALIGN .BEGIN_EXACT$ .END_EXACT  All O  O 1Fm The alternateform,ifany,isgivenin parentheses. T  O OCategory Directives 1Psect Application O  .EVEN .ODD9 .BLKA .BLKB .BLKD! .BLKFo .BLKG .BLKL  .BLKOW .BLKQ .BLKS .BLKT@ .BLKWP NOEXE(orMIX)%O Program sectioningdirec-O tives .PSECT .SAVE_PSECT(.SAVE)T .RESTORE_PSECT (.RESTORE)  All:O Symbolcontrol directives .EXTERNAL(.EXTRN)i .WEAK  All&O ConditionalassemblyblockO0 directives  .IF0 .IF_FALSE(.IFF)~ .ENDC .ELSE .IF_TRUE(.IFT)!f .IF_TRUE_FALSE(.IFTF) .IIF  AllO. Source inclusion. .INCLUDE . AllO Linkagecontrol .BASE .ENDB .LINKAGE_PAIR .LOCAL_LINKAGE_PAIR .PROCEDURE_DESCRIPTOR+ .LOCAL_PROCEDURE_x DESCRIPTOR  All  AllB NOEXE(orMIX) NOEXE(orMIX) O  O 1Fm The alternateform,ifany,isgivenin parentheses. ON  E; &5OTable5-2:7SummaryofMacro Directives O OCategoryK Directives x1F ApplicationinEXEorNOEXEPsects O O Macro definitionOE directivesK .MACROKE .ENDMK .LIBRARYK .MCALL  All!OZ Macrodeletiondirec-O tiveKZ .MDELETE Z All(O! Macroexit directive.MEXIT ! All5O Repeatblock directivesC.REPEAT(.REPT)K .IRPK6 .IRPCK .ENDR  All$O Counting directive.NARGKJ .NCHR  All O  O1FmThe alternateform,ifany,isgivenin parentheses. O  BAC )O5.2B AutomaticData AlignmentIOUThe assemblercan optionallyalignyourdataonnaturalLO boundaries.,Whiledisabledbydefault,thisfeatureisen-EOabledwiththe/ALIGNMENT=datacommandline qualifier7O^orthe.ENABLE ALIGN_DATA directive(see^Section1.2 d^andOSection5.3.AAnaturalboundaryisanaddressthatisevenlyQO divisiblybythesizeofthescalardatatypebeing accessed.FOhTheMACRO-64 automaticdata alignmentfeaturecanau-HO tomaticallyalignword, longword, quadword,andoctawordJOdatatoanatural boundary.- AccessingdataonanaturalLOrboundarycanbe significantlyfasterthanan unalignedac-IOcess.,Formore informationon accessingdataonaligned5O#and unaligned boundaries,refertothe# Alpha ArchitectureO{ ReferenceManual {.*!|?*Oz}?! FOWhentheMACRO-64 automaticdata alignmentfeatureisMOenabled,the assembler automaticallyalignsalldatastorageMO5 directivestoanatural boundary.)Toacheive alignment,thePO assemblerpadswithzerobytesas necessarypriortoallocat-TOingthestorageforthedata directive.&LabelsthatoccurbeforeOO>thedatastorage directivearedefinedtobetheaddressofMOthedatastorageafter alignment.(Formore information,seeOSection2.7.1.*;The directive descriptionsinBSection5.3indicateNOHthosedatastorage directivesthatareaffectedby automaticOdata alignment.*O?*B|?CBFy OO5.3B DirectivesMOUThegeneral assembler directivesprovide facilitiesforper-0Oformingeleventypesof functions.,Table5-1liststhesetypesMOof functionsandtheir directives.+Some directivesareonlyJO^ applicablewithindatapsects(psectswiththeNOEXEandGONOMIX attributes).-Other directivesareonly applicableHOwithincodepsects(psectswiththeEXEandNOMIXat-MOh tributes).+All directivesare applicablewithinpsectswhichNOcontaineitherdataandcode,orboth(psectswiththeMIXKO attribute).(For informationontheMIX assembly-timepsectMOrandany associated restrictions,seethe descriptionofthe/O.PSECT directiveinthischapter.*,pa?tOTable5-1?showshoweach directivecanbeappliedwithin!Odataorcodepsects.*OFc?qGLOThemacro directivesprovide facilitiesfor performingfive$O categoriesof functions.Table5-2"/liststhese categories2O<andtheir associated directives.,SeeP<Chapter4<fordetailedDO informationonmacro argumentsandstring operators.*f?*PnOxX.JOThe remainderofthischapter describesboththegeneralFO assembler directivesandthemacro directives,showingOO<theirformatsandgivingexamplesoftheiruse.*ForeaseofOO reference,the directivesare presentedin alphabeticalorder.LFCG<O.ADDRESS*O%%OAddressstorage directiveZ0OFormat Os.ADDRESSN address-list=O ParametersOs address-listQOAlistofsymbolsor expressions, separatedbycommas( , ),5O$whichMACRO-64 interpretsas addresses. O DescriptionIOs.ADDRESSstores successive quadwords(8bytes) containingMO addressesintheobjectmodule.(Digital recommendsthatyouIO$use.ADDRESSratherthan.QUADforstoringaddressdata@O|toprovide additional informationtothelinker.O"Notes ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4X attributes).'Formore information,see=XSection5.1. ` GIf automaticdata alignmentisenabled,this directiveF0alignsthecurrent(64-bit)boundarybefore allocatingstorage. ` HYoucandefinea32-bitaddressitemusingmacrosand/athe.LONG directive.&Forexample:".macro% address_32%itemi-.long%itemu.endm% address_32*={?U{+OExamplesb.ADDRESS%A,B,CFG FH:O.ALIGN*[11OLocationcounter alignment directivehOFormat,Os.ALIGNNinteger[,fill-specifier],O.ALIGNNkeyword[,fill-specifier] ! O ParametersOsintegerUOAnintegerintherange0to9.'ThelocationcounterisalignedWO$atanaddressthatisthevalueof2raisedtothepoweroftheO|integer.OkeywordKO(Oneoffivekeywordsthatspecifythe alignment boundary.SOThelocationcounterisalignedtoanaddressthatisthenext/Omultipleofthe followingvalues:gf= O$OKeywordSize(inBytes) OOABYTE E2 ,)0_E=1OWORD 2 ,1_=2O9LONG 92 ,2_9=4OQUAD 2 ,3_=8O,OCTA ,2 ,4_,=16 OGO[,fill-specifier]JO(Any expressionthatresolvestoanassemblytimeintegerMOvalue containingnoforward references.*Thefillingisdone5Operbyte, regardlessofthe alignment. O DescriptionNOs.ALIGNalignsthelocationcountertotheboundary specified2Obyeitheranintegerorakeyword.OqNotes ` FIf.ALIGNis specifiedinapsectwiththeEXEandEONOMIX attributes,thefill specifierisignored..TheE assembleralignsthepsecttothe requestedboundary5paddingwithNOPorFNOP instructions. ` MIf.ALIGNis specifiedinapsectthatdoesnothavetheMEXE attributeandafill_specifieris specified,theassem-J0bleralignsthepsecttothe requestedboundarypadding,Mwithbyte locationsusingthefill-specifierastheinitial4valueforthe generatedbytepadding. `a NaIfthefill specifier expression encountersavaluethatisLtoolargetofitinaboundary specifiedbythekeyword,Gthedatais truncatedandan informationalmessageisj displayed. ` EThe alignmentthatyouspecifyin.ALIGNcannotex-IBceedthe alignmentoftheprogramsectioninwhichtheH alignmentis attempted(seethe descriptionof.PSECT).IForexample,ifyouareusingtheBYTEprogramsectionIL  alignmentandyouspecify.ALIGNwithawordorlargerC  alignment,the assemblerdisplaysanerrormessage.<OExamples5Example10DE.PSECT%A,QUADK;&Begin&at&quadwordB::.BYTE%4t;&Data%is%byte)D.ALIGN%QUAD;&Next%data%isC::.WORD%6$t;&also%quadword%aligned5Example2"DE.PSECT%A,EXE,NOMIX,OCTA L1::TRAPB:t;&offset%05D.ALIGN%OCTA;&NOP%padding&bytes&4..15iTRAPB:;%offset%16(}Example3$DE.PSECT%A,NOEXE,NOMIX,OCTAL1:.WORD%5t;&byte%offset&0..1Y VAXMACROand InstructionSet ReferenceManual XYfordetails.*=D{? OExamplesDb.ASCIC%"MY&STRING"K;%In%the&listing,&this%becomes:;%.BYTE%9!;%.ASCII&\MY%STRING\F I HJ:O.ASCID*h>>OString-descriptorASCIIstringstorage directiveZ0OFormat Os.ASCIDNquoted-literal=O ParametersOsquoted-literalGOAASCIIstring delimitedwithdoublequotes..FormoreCO$ informationonhowtospecifyquoted literals,see.$Section2.4.*.|?e W ;O DescriptionHOs.ASCIDperformsthesamefunctionasthe.ASCIIdirec-ROtive,exceptthat.ASCIDinsertsastring descriptorbeforetheNO$stringdata.+The descriptorformatis identicaltothatde-CO|finedforOpenVMSAXPandOpenVMSVAX.Thestring2O descriptorhasthe followingformat:(Z+---------------+------------+&|J InformationK|pLengthp|(+---------------+------------+ 2|_2Pointer 2|(z+----------------------------+O Notes ` >The string-lengthfieldistwobytesinsize. `$ K$ Descriptor information(2bytes)isalwayssetto^X010E. ` DPosition-independent32-bitpointertothestring(4Gbytes).-String descriptorsareusedincallingcertainTsystem routines. ` FIfnatural alignmentisenabled(using.ENABLEALIGN_G,DATA),the descriptorisquadwordaligned.*ThisallowsKyoutoaccesstheentire descriptor(2datawordsanda9longwordaddress)onaquadword alignment. `\ G\ This directivecanonlybeusedwithindataormixedB psects(psectsthathaveeithertheNOEXEorMIX4  attributes).'Formore information,see= Section5.1. ` B This directivealsoacceptsVAXMACROsyntax.,See> VAXMACROand InstructionSet ReferenceManual X for> details.*= {?<OExamples <\Example1H#.DESCR1:p.ASCID% "ARGUMENT%FOR&CALL";&String% descriptor <jExample2.#.DESCR2:p.ASCID%"SECOND& ARGUMENT"(#;&Another%string& descriptorfJ IK:O.ASCII*U++OASCIIstringstorage directiveZ0OFormat Os.ASCIINquoted-literaliO ParametersOsquoted-literal=OAnASCIIstring delimitedwithdoublequotes. O DescriptionPOs.ASCIIstorestheASCIIvalueofeach characterintheASCIISOstringorthevalueofeachbyte expressioninthenextavail-O$ablebyte.)SeeO$Section2.43$fora descriptionofhowtospecifyO|quoted literals.O"Notes ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4X attributes).'Formore information,see=XSection5.1. ` BThis directivealsoacceptsVAXMACROsyntax.,See>0 VAXMACROand InstructionSet ReferenceManual X0fordetails.*O}?*={?Z{0OExamplesb.ASCII%"MY&STRING"wK JL:O.ASCIZ*f< VAXMACROand InstructionSet ReferenceManual Xfor:details.*O|?*={?jOExamples1b.ASCIZ%"MY&STRING";% Equivalent&to' ;%.ASCII%"MY&STRING%\x00"LKM9O.BASE*M##OBaseregister directivea7OFormat'Os.BASEMRn[,base_expression]jO Parameters OsRnJOOneofthebase registers,R0throughR30,FP,andSP./Obase_expressionOO(Thebaseaddress,whichis optional,andcanbeoneoftheO following: ` "Anabsolute expression ` $A relocatable expression ` "Anexternal expression WJOAn expressionmustnotcontainforward referencesorim-OOplicitexternalsymbols.(An implicitlydefinedexternalsymbolOO5isasymbolthatthe assemblerdefaultstoanexternalsym-NObol.'Thisoccurswhenthe assembler encounters referencestoPOasymbol,butdoesnot encountera definitionforthesymbolDO>oran .EXTERNAL directivethatdeclaresthesymbol.! dO DescriptionNOsThe.BASE directiveisusedtoinformthe assemblerthataRO specifiedbaseregistercontainsa specifiedbaseaddress.'LaterOO$inyourprogram,the assemblerallowsyouto implicitlyref-NO|erencethe specifiedbase register.'Whenthe assemblerknowsNOwhichbase addressesarestoredinoneormorebaseregis-UO-ters,itcanconvertan expressiontoanoffsetfromoneoftheQObase registers previously specifiedina.BASE directive.'.BASEMOprovidesa convenientandmorereadableshorthandforac-IO7cessingmemoryandconstantvaluesusingbase registers.NO.BASEalsomakesiteasierforyoutochangeyourregister:O assignmentsifyoulatermodifyyourcode.! WTOThebase expressionis optional.'Ifthebase expressionisspec-MOified,thisbaseaddressvalueisassumedbythe assemblerSO5tobeinthe specified register,Rn.*Ifthebase expressionisUOomitted,thecontentsofthe specifiedbase register,Rn,iscon-MOsidered undefineduntilanewbase expressionis associated$O>withthebase register.d! +:JOR31isdefinedtoalwayscontainzero, accordingtothePO architecture definition.( Therefore,R31isknowntobeapre-PO5definedbaseregister containingzero.'Forevery assembly,the8O assemblerassumesthe following statement:.BASE%R31,%0uGOBecausethecontentsofR31cannotchange,youcannot.OspecifyabaseaddressforR31.FOOYoucanusethe.BASE directiveto implicitly referencebaseNO registers.(Youcanalso automaticallycomputeoffsetsfromaRO5baseaddressknowntobeinaregistertoabaseaddressyou-Ouseinan instruction argument.  KOMostofthememoryformatAlphaAXP instructionsarede-KOfinedsuchthatoneoftheir argumentsmusthaveabaseNO5registerandanoffset.*Ifthe assembler encountersonlyanMO expressionwithnobase register,the assemblerattemptstoQOfindabaseregisterthatcontainsabaseaddressorconstantUO>withina16-bitsignedoffsetofthevalueofthe expression.'IfQOitfindssuchabase register,the assemblercomputesanoff-SOsetthatwhenaddedtothevalueofthebase register,resultsSOHinavalueequaltothe expression specifiedinthe instructionO argument.*<OExamplesf! <Example1# .EXTERNAL% COMM_AREA #1k.BASE%R1,% COMM_AREA k2 CURR_LINE)=% COMM_AREA%+%0) CURR_COLUMN=% COMM_AREA%+%4C CURR_MODE)C=% COMM_AREA%+%8LDAR4,%17;%LDA&R4,%17(R31) e3LDLR2,% CURR_LINE;%LDL&R2,%0(R1) e4LDLR3,% CURR_COLUMN;%LDL&R3,%4(R1)cSTLR4,% CURR_MODEc;%STL&R4,%8(R1) 1:YThis! statement declares!an!external!symbol,6Y@ COMM_AREA., COMM_AREAisaglobalsymbolEYthat representsthebaseaddressofathree-longwordFY communicationareathatisusedby differentroutinesYJintheprogram. 2DYThis statementinformsthe assemblerthatbasereg-BY"isterR1containsthebaseaddress, COMM_AREA,ofBYzthis communicationarea.(Thenextthree statements>Ydefine variableswithinthe communicationarea. R3HYRThefirst instructionshowshowyoucanload registersDYwithconstantvaluesintherange-32768to+32767>Yby implicitlyusingR31asthebase register. 4EYThelastthree statementsshowhowthe.BASEdirec-GYtiveallowsyouto implicitly referencebase registersDY4 and automaticallycomputeoffsets.*IneachoftheseHY  instructions,thesecondargumentisdefinedtorequire-Y anoffsetandabase register.  zHYWSincenobaseregisteris specified,the assemblerat-CYtemptstoimplythebaseregisterandcomputetheFYoffsetbasedupon informationgiveninprevious.BASEYa directives.  IYWInthelastthree instructions,theaddressargumentisDYwithin-327678to+32767ofthebaseaddressknownAYtobeinR1(i.e., COMM_AREA).+ Therefore,R1isHYaselectedasthebase register.'The assembleralsocom-FYputesthecorrectoffsetfromthebaseaddressknownKYtobeinR1totheaddress specifiedinthe instructionYk argument.y  kOExample2G4The assemblerperformsa sequentialsearchthroughthePlistofpossiblebase registers,R0throughR31.(ItusestheQfirst definitionpossibleifmultiplebase registersarevalid.>Forexample:.BASE&R5,%300  :RLDQJR10,%100 !cFThe assembleroutputstheLDQ instructionasfollows:LDQJR10,%-200(R5) ! a\NBothR31andR5aredefinedasbase registersthatcanbeGusedin constructingthe instruction argument.)R31al-H5wayscontainszero.+Inthisexample,R5isalsoknownLtocontaintheconstant300.(The assemblerusesthefirstGbase register,startingatR0and progressingtoR31,F>whichprovidesaknownvaluewithin-32768to+32767Kofthe specifiedargumentvalue.'Sincethe assemblercon-MsidersR5beforeit considersR31,R5isusedratherthanHR31.! M LN@O .BEGIN_EXACT*X..OExact instructionblock directiveP&OFormatOs .BEGIN_EXACT! ) YO DescriptionHOsAnexact instructionblock suppressescode optimizations9O (SCHEDULE, PEEPHOLE, ALIGN_CODE,andALIGN_NO$DATA). regardlessifthese optimizationsareenabledfortheFO|assemblyunit.)Unlike.ENABLEand .DISABLE,whichcanSObeusedtoenableordisablespecific optimizationsfortheen->O-tireassemblyunit, .BEGIN_EXACTand .END_EXACTSOallowyoutosuppress optimizationfora specifiedrangeofin-KO structions.* Instructionsoutsidethe specifiedrangeremain>O7subjecttoany optimizationsyouhaveenabled.ONotes `b IbThis directivecannotappearinapsectwiththeNOEXE!andNOMIX attributes. `: I:Althoughthis directiveisacceptedbythe assemblerinNapsectwiththeMIX attribute,ithasnoeffectintheseKpsectssincenocode optimizationsareinaffectforMIXDpsects. ` B .BEGIN_EXACTmustbepairedwithamatching.END_;EXACTtoclosetheexact instructionblock. ` 4 .BEGIN_EXACTand .END_EXACT instructionBblockscan benested.2The outermostlevelofthe=L  .BEGIN_EXACTandmatching .END_EXACT directivesL delimittheactualexact instructionblockfromwhichcode@  optimizationsare suppressed.)Nesting .BEGIN_EXACTCU and .END_EXACT instructionblockscanbeusefulinH macro definitionswherethemacro expansionrequiresanB exact instruction sequence.(Nested .BEGIN_EXACTandG_  .END_EXACT instructionblocksallowamacrotobein-J vokedbothfromwithinandwithouttheexact instruction block.<OExamples NOAThe followingexampleshowsan instructionsequencepriortoO optimization:"addf%f7,&f8,%f9;%1"faddf%f2,&f3,%f4;%2"addl%r5,&r6,%r7;%3#addl%r8,&r9,%r10;%4R(LOThe assembler optimizesthepreviousexampletoasequence=Osimilartothe following instruction sequence: a:"addf%f7,&f8,%f9;%1"addl%r5,&r6,%r7;%3"9addf%f2,&f3,%f4;%2#addl%r8,&r9,%r10;%4 : OOIfyouchoosetosuppress optimizationinthepreviousexam-IOple,enclosethefour instructionswiththe .BEGIN_EXACTEO5and .END_EXACT directives,asshowninthe followingOexample: .BEGIN_EXACT"Zaddf%f7,&f8,%f9;%1"addf%f2,&f3,%f4;%2"addl%r5,&r6,%r7;%3#2addl%r8,&r9,%r10;%4z .END_EXACTN MOCO.BLK /x*Z00OBlockstorage allocation directivesypOOFormatOs.BLKAM [expression]O.BLKBN [expression]O:.BLKDN [expression]O.BLKFN [expression]O.BLKGM [expression]Oe.BLKLM [expression]O.BLKOM [expression]O,.BLKQM [expression]O.BLKSN [expression]O.BLKTN [expression]OW.BLKWN [expression]! FO ParametersOs expressionOOAninteger expression specifyingtheamountofstoragetobeSO$ allocated.'Allthesymbolsinthe expressionmustbedefinedatPO|thecurrentpointintheassemblyandthe expressionmustbeROanabsolute expression.(Ifthe expressionisomitted,adefault$O-valueof1isassumed.]O DescriptionHOsMACRO-64hasthe following11blockstorage directives: _  O,O DirectivehReservesStoragefor:Bytes Allocated O'OA.BLKA Addresses (quadwords) A8 M*-Avalueof expressionO.BLKBBytedataValueofex-lpression1O.BLKDDouble-precisionfloating-point>data (quadwords) 8 *-valueof> expression1O.BLKFSingle-precisionfloating-pointdata (longwords) 4 *-valueof expression1O.BLKG G_floatingdata (quadwords)8 *-valueof expressionO\.BLKLLongworddata \4 h*-\valueof expressionO/.BLKOOctaworddata /16 ;*V/valueof expressionO.BLKQQuadworddata 8  *-valueofZ expression1O.BLKS S_floatingdata (longwords)4 *-valueof, expression1O.BLKT T_floatingdata (quadwords)8 *-valueof expressionOx .BLKW}Worddata x 2  *-x valueof  expression O QO Each directivereservesstoragefora differentdatatype.'TheNO valueofthe expression determinesthenumberofdataitemsHO> forwhichMACRO-64reservesstorage.'Forexample,.BLKLOO 4reservesstoragefor4 longwordsofdataand.BLKB2re-RO servesstoragefor2bytesofdata.(ThetotalnumberofbytesOOH reservedisequaltothelengthofthedatatypetimesthe%O valueofthe expression.OF Notes ` GIf automaticdata alignmentisenabled,the.BLKxdi-L(rectivesalignthecurrentlocationcountertooneofthe8 alignmentslistedinthe followingtable: m  Directive9 Alignment -A.BLKAnQuadword(64-bit)boundary.BLKBnNone-4.BLKDiQuadword(64-bit)boundary-.BLKFnLongword(32-bit)boundary-(.BLKGiQuadword(64-bit)boundary-.BLKLnLongword(32-bit)boundary..BLKOiOctaword (128-bit)boundary-.BLKQiQuadword(64-bit)boundary-.BLKSyLongword(32-bit)boundary-.BLKTnQuadword(64-bit)boundary).BLKWNWord(16-bit)boundary  ` FThese directivescanonlybeusedwithinpsectshav-BingeithertheNOEXEorMIX attributes.,Formore'T informationonpsects,seeTSection5.1.*{?  tOExamplesib.PSECT&A,NOEXEB::%.BLKWK100;%10%words%(20&bytes)%of%storagei.BLKQp53;%5% quadwords%(40&bytes)%of%storagei[.BLKW-[;%1%word&(2&bytes)%of%storagevONP9!O.BYTE*"L#""OBytestorage directiveZ$0OFormat Os.BYTENexpression-list%FO ParametersOsexpression-listGOOneormore expressions separatedbycommas.+Eachex-LO$pressionisfirst evaluatedasaquadword expression;thenTO|thevalueofthe expressionis truncatedtofitinabyte.)TheROvalueofeach expressionshouldbeintherange0to255forPO-unsigneddataorintherange-128to+127forsigneddata.&! O DescriptionPOs.BYTE generates successivebytesofbinarydataintheobjectOmodule.OqNotes ` IThe assemblerdisplaysawarningmessageiftheexpres-8Osionisoutsidetherange-128to-255. ` NThe assemblerwilltruncatethemost significantbitsofanR&integerorexternalvaluethatistoolargetostoreineightbits. ` GThis directivecanonlybeusedwithindataormixedBWpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.1.*&=r{?u'{KOExamplesbA:.BYTEp5#Tb;&Stores%5&in&a%bytePOQA(O .CODE_ADDRESS*)U*++OCodeaddressstorage directive\+2OFormat"Os .CODE_ADDRESSN name-list5,  O ParametersOs name-listNOAlistofsymbols separatedbycommas.(ThesesymbolsshouldIO$ referenceeithera procedure descriptorname,suchasaMO|routinename,oran externallydefined procedure descriptor.-! O DescriptionFOs .CODE_ADDRESScausesthecode addressesofthespeci-ROfied identifierstobeplacedatthecurrentpsectandcurrentNO$locationcounter.*The specified identifiershould referencea9O| procedure descriptordefinedintheimage.O"Notes ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4X attributes).'Formore information,see=XSection5.1. ` GIf automaticdata alignmentisenabled,this directiveL0alignsthecurrentlocationcountertoaquadword(64-bit)0boundarybefore allocatingstorage.*-={?V.{,OExamplesb .CODE_ADDRESS&A Q PRP/v&O .D_FLOATINGO].DOUBLE*0V1,,OFloating-pointstorage directive2nOFormat1Os .D_FLOATINGMfloating-point-number-list-O.DOUBLENfloating-point-number-listi3?O Parameters$Osfloating-point-number-listGOAcomma-separatedlistoffloating-point constants.-TheIO$ constantscannotcontainany operatorsexceptunaryplusGO|orunaryminus.,Formore informationonfloating-pointOnumbers,see8Section2.3.2.*38?~{4! 3 QO DescriptionFOs .D_FLOATING evaluatesthe specifiedfloating-pointcon-JOstantsandstorestheresultsintheobjectmodule./.D_DO$FLOATING generates64-bit,double-precision, floating-TO|pointdata(1bitofsign,8bitsof exponent,and55bitsofKO fraction).(Seethe descriptionof .F_FLOATINGforinforma-KO-tiononstoringsingle-precisionfloating-pointnumbersandEOthe descriptionsof .G_FLOATING, .S_FLOATING,and.T_LOFLOATINGfor descriptionsofotherfloating-point constants.ONotes `  @ Double-precisionfloating-pointnumbersarealwaysbrounded. ` =The alternateformof .D_FLOATINGis.DOUBLE. `a GaThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.1. ` GIf automaticdata alignmentisenabled,this directiveLalignsthecurrentlocationcountertoaquadword(64-bit)0Bboundarybefore allocatingstorage. ` CTheAlphaAXP architecturesupportsonly conversion>  operationsfortheDfloating-pointdatatype.*4={?Z5{0OExamplesb .D_FLOATINGJ3.1E+02SRT9<O.ELSE*=[>11O Conditionalassemblyblock directiveI?OFormatOs.ELSE@ XO DescriptionPOsA conditionalassemblyblockisaseriesofsource statementsUOthatis assembledonlyifacertain conditionismet.(.IFstartsMO$the conditionalblockand.ENDCendsthe conditionalblock;KO|each.IFmusthavea corresponding.ENDC.The.IFdirec-POtivecontainsa conditiontestandoneortwo arguments.'TheUO- conditiontest specifiedisappliedtothe arguments.'IfthetestGOismet,allMACRO-64 statementsbetween.IFand.ELSEQOare assembled.(Ifthetestisnotmet,the statementsbetween,O7.ELSEand.ENDCare assembled.QO Conditionalblockscanbenested;thatis,a conditionalblockMO+canbeinsideanother conditionalblock.-Inthiscase,theNO statementsintheinner conditionalblockare assembledonlyUOifthe conditionismetforboththeouterandinnerblock.'ForMO4more information,seethe descriptionofthe.IF directive.ONotesA!  ` HYoucannotusethe.ELSE directiveinthesamecondi-3(tionalblockasthe.IF_x directive. ` LThe.ELSE directiveissimilartothe .IF_FALSE directive.GHowever,youcanonlyuse.ELSEoncewithinacondi-JYtionalblock.' .IF_FALSEcanbeusedanynumberoftimes$ina conditionalblock.<BOExamples'C1 COAAnexampleofa conditionalassembly directiveis:.IF%EQUALKALPHA+1,;%Assemble%block%if% ALPHA+1=0. . V..ELSE';%Assemble%when% .IF=false. . ..v.ENDCVTW8WO.END*XTY**OAssembly termination directiveQZ'OFormatOs.ENDM[label] [O ParametersOslabelIOThe procedure descriptornamethat specifiestheroutineEO$(calledthetransferaddress)whereprogram execution0O|begins.'Thisargumentis optional.\! yO DescriptionGOs.END terminatesthesourceprogram.,No additionaltextUOshouldoccurbeyondthispointinthecurrentsourcefile,orinPO$any additionalsourcefiles specifiedinthecommandlineforRO|this assembly.'Ifany additionaltextdoesoccur,the assemblerROignoresit.*The additionaltextdoesnotappearinthelisting9O-filenordoesitaffecttheobjectfile.ONotes `X FXWhenan executableimage consistingofseveralobjectKmodulesislinked,onlyoneobjectmoduleshouldbeter-H minatedbyan.END directivethat specifiesatransferKbaddress.'Allotherobjectmodulesshouldbe terminatedbyM.END directivesthatdonotspecifyatransferaddress.(IfHan executableimagecontainseithernotransferaddressLlormorethanonetransferaddress,thelinkerdisplaysanerrormessage. `D 8DFor more information,!see the .PROCEDURE_  DESCRIPTOR directive.] sOExamples b. . .::.PROCEDURE_DESCRIPTOR%TRANSFER1,code_address_T1 . . .Z.END& TRANSFER15 Z;% TRANSFER1%is%module&transfer&addressWVX9^O.ENDC*_O`%%OEnd conditional directiveIaOFormatOs.ENDCb =O DescriptionKOs.ENDC terminatesthe conditionalrangestartedbythe.IFQO directive.'Seethe descriptionof.IFformore informationandO$ examples.rXWY9cO.ENDM*dUe++OEndmacro definition directiveWf-OFormatOs.ENDMN [macro-name]g! FO ParametersOs macro-nameOOThenameofthemacrowhose definitionistobe terminated.OO$Themacronameis optional;if specified,itmustmatchtheJO|namedefinedinthematching.MACRO directive.&ThemacroQOnameshouldbe specifiedsothatthe assemblercandetectany1O- improperlynestedmacro definitions.h! O DescriptionKOs.ENDM terminatesthemacro definition.(Seethe descriptionOOof.MACROforanexampleoftheuseofan.ENDM directive.OqNotesi{IWIf.ENDMis encounteredoutsideamacro definition,the2 assemblerdisplaysanerrormessage.YXZ9jO.ENDR*kQl''OEndrepeatrange directiveImOFormatOs.ENDRn O DescriptionNOs.ENDR indicatestheendofarepeatrange.*ItmustbetheMOfinal statementofeveryrepeatblock.+Arepeatblockcon-RO$sistsofanyrangeoftext beginningwiththe.IRP,.IRPC,orJO|.REPEAT directive.*Formore information,seethedescrip-OOtionforthe.IRP,.IRPC,or.REPEAT directivesforexamples2O-ofhowtousethe.ENDR directive.ONotesowEWIf.ENDRis encounteredoutsidearepeatblock,the2 assemblerdisplaysanerrormessage.ZY[>pO .END_EXACT*q]r33OEndexact instructionblock directiveNs$OFormatOs .END_EXACTYt! :/O DescriptionLOs .END_EXACTdelimitstheendofanexact instructionblock.GOAnexact instructionblock suppressesthe optimizations@O$SCHEDULEand PEEPHOLE,andthe alignmentoptionsEO| ALIGN_CODEand ALIGN_DATAforthe specifiedrangeofNO instructions regardlessifcode optimizationsareenabledforO-theassemblyunit.KOFormore informationonthe .END_EXACT directive,seetheKO! descriptionofthe .BEGIN_EXACT directiveinthischapter.}[ Z\:uO.ERROR*vDwOError directiveZx0OFormat Os.ERRORMquoted-literalyO ParametersOsquoted-literalQOAstringof characters,betweenapairofdoublequotes,dis-GO$playedduring assembly.+Formore informationonquotedO| literals,see|Section2.4.*y?|?_z 5O DescriptionMOs.ERRORcausesthe assemblertodisplayanerrormessageonZOtheterminalorbatchlogfileandinthelistingfile(ifthereisO$one).HOUsing.ERRORpreventsanoutputobjectfilefrombeingO produced.ONotes{ # ` G.PRINT,.WARN,and.ERRORare directivesusedtodis-H(play messages.(Youcanusethemtodisplay informationH indicating unexpectedor important conditionswithinthe assembly. `Y BYThis directivealsoacceptsVAXMACROsyntax.,See> VAXMACROand InstructionSet ReferenceManual Xfor details.| SOExamples&b.ERROR%"Illegal% Arguments" ^E%MACRO64-E-GENERROR,% Generated%ERROR:&Illegal% Arguments@:at%line&number%3&in&file%DISK$:[TEST]ERROR.M64;2^\[]9}O.EVEN*~a77OEvenlocationcounter alignment directiveIOFormatOs.EVEN  O DescriptionOOs.EVENensuresthatthecurrentvalueofthelocationcounterVOisevenbyadding1ifthecurrentvalueisodd.(Ifthecurrent;O$valueisalreadyeven,noactionistaken.ONotes `O GOThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.1.*={?]\^Mv#O .EXTERNALO].EXTRN*Z00OExternalsymbol attribute directivewMOFormat Os .EXTERNALN symbol-listO.EXTRNM symbol-listfO ParametersOs symbol-list=OAlistofsymbolnames, separatedbycommas. O DescriptionJOs .EXTERNAL indicatesthatthe specifiedsymbolsareexter-SOnal;thatis,thesymbolsaredefinedinanotherobjectmodule.ONotesdp::WThe alternateformof .EXTERNALis.EXTRN.OExamples>b .EXTERNAL%B;%B%is%defined&in&another%module . . :.=A::K.ADDRESS&B;%Its%address%is%stored%herea^ ]_Ov%O .F_FLOATINGO].FLOAT*V,,OFloating-pointstorage directivemOFormat1Os .F_FLOATINGNfloating-point-number-list,O.FLOATNfloating-point-number-list \O Parameters$Osfloating-point-number-listNOAlistofoneormorefloating-point constants separatedbyGO$commas.)Formore informationonfloating-pointnumbers, O|see|Section2.3.2.9|The constantscannotcontainany operators0Oexceptunaryplusorunaryminus.*??~ O DescriptionFOs .F_FLOATING evaluatesthe specifiedfloating-pointcon-LOstant(s)andstorestheresultsintheobjectmodule.-.F_IO$FLOATING generates32-bit,single-precision,floating-pointTO|data(1bitofsign,8bitsof exponent,and23bitsoffrac-MOtionalsignificance).'Seethe descriptionof .D_FLOATINGforJO- informationonstoringdouble-precisionfloating-pointcon-GOstantsandthe descriptionsof .G_FLOATING, S_FLOATING,GOand T_FLOATINGfor descriptionsofotherfloating-pointO7 constants.ONotes `b <bThe alternateformof .F_FLOATINGis.FLOAT. ` GThis directivecanonlybeusedwithindataormixedB:psects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.1. ` GIf automaticdata alignmentisenabled,this directiveLjalignsthecurrentlocationcountertoalongword(32-bit)0boundarybefore allocatingstorage.*=U{?]{3OExamples!b .F_FLOATING% 1.0,3.0E+2_ ^`?O .G_FLOATING*X..OG_floating-pointstorage directivekAOFormat1Os .G_FLOATINGNfloating-point-number-list{QO Parameters$Osfloating-point-number-listKOAcomma-separatedlistofoneormorefloating-pointcon-LO$stants.(Formore informationonfloating-pointnumbers,seeO|Section2.3.2.9A|The constantscannotcontainany operators0Oexceptunaryplusorunaryminus.*O??~"! O DescriptionFOs .G_FLOATING evaluatesthe specifiedfloating-pointcon-JOstantsandstorestheresultsintheobjectmodule./.G_IO$FLOATING generates64-bitdata(1bitofsign,11bitsMO|of exponent,and52bitsof fraction).-Seethe descriptionAOof .D_FLOATINGfor informationonstoringdouble-JO- precisionfloating-point constantsandthe descriptionsof9O .F_FLOATING, S_FLOATING,and T_FLOATINGfor=O descriptionsofotherfloating-point constants.ONotes `  G This directivecanonlybeusedwithindataormixedBbpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.1. `: G:If automaticdata alignmentisenabled,this directiveLalignsthecurrentlocationcountertoaquadword(64-bit)0boundarybefore allocatingstorage.*=~{?Y{/OExamplesb .G_FLOATINGJ2.0E-3Pb6p  OOTable5-4:8 ConditionTestsfor ConditionalAssembly Directives O O ConditionOTest_ Complement_ ConditionTestWArgumentWTypej Numberofj  ArgumentsO F ConditionThatO  AssemblesO BlockOqLongForm4$Short4qFormLongForm,$Short,qForm O .OEQUALEQ NOT_EQUALNE Expressionj 1or2 > 1O  Expression-1O -isequaltoO  expression-O 2ornotO 7equaltoO  expression-2.;O GREATER`GT LESS_EQUALLE Expression1or2 > 1O  Expression-1O bisgreaterO thanO  expression-2O lorlessthanO orequaltoO  expression-2.OLESS_OTHAN4LTGREATER__EQUAL",GE Expression1or2 > z1O  Expression-1O islessthanO H expression-2O orgreaterO thanorO Q equaltoO  expression-2.4O$ DEFINEDjDF NOT_DEFINEDmNDFvSymbolic1O $ SymbolisO | definedornotO defined.(OO BLANKB NOT_BLANKNBMacro j O 1O O ArgumentisO blankornotO blank./Oy  IDENTICALIDN DIFFERENTDIFMacro j y 2O y  ArgumentsO are identicalO + or different. O  O 1Tm Ifthesecondargumentisomitted, comparisonismadeagainst0. O  ` _a:O.IDENT*M##OIdentification directiveZ0OFormat Os.IDENTNquoted-literalR(O ParametersOsquoted-literalIOA1-to 31-characterstring,withindoublequotes,thatQO$ identifiesthemodule,suchasastringthat specifiesaver-KO|sionnumber.+Formore informationonquoted literals,seeOSection2.4.*O|?! O DescriptionHOs.IDENTprovidesameansof identifyingtheobjectmod-OOule.+ThisidentificationisinadditiontothenameassignedOO$totheobjectmodulewith.TITLE.A characterstringcanbeRO| specifiedin.IDENTtolabeltheobjectmodule.)ThisstringisWOprintedintheheaderofthelistingfileandalsoappearsintheO-objectmodule.ONotes!HWIfasourcemodulecontainsmorethanone.IDENT,theKlast directivegiven establishesthe characterstringthat?formspartoftheobjectmoduleidentification.\{2OExamples b.IDENT%"Module%Name"2a`c7  O.IF*[11O Conditionalassemblyblock directiveOFormat%Os.IFM condition argument(s) . . D.Orange . y. .O.ENDC! FO ParametersOs conditionROA specified conditionthatmustbemetiftheblockistobeKO$includedinthe assembly.*The conditionmustbe separated>O|fromtheargumentbyacomma,space,ortab.|Table5-4j|listsPOthe conditionsthatcanbetestedbythe conditionalassemblyO- directives.*?a?.! UO argument(s)FO(Oneormoresymbolic argumentsor expressionsoftheOO specified conditionaltest.*Iftheargumentisan expression,GOitcannotcontainany undefinedsymbols.,The assemblerMO2converts relocatable argumentstoabsolute argumentsbydis-MOcardingthe relocatableportionofthe expressionandusingMOonlytheoffsetfromthe beginningofthepsect.* Arguments,O<mustbe separatedbyacomma.tOrangeROTheblockofsourcecodethatis conditionallyincludedintheOq assembly. wO DescriptionPOFA conditionalassemblyblockisaseriesofsource statementsQOthatare assembledonlyifacertain conditionismet.*A.IFPOstartsthe conditionalblockanda.ENDCendsthe conditionalKOOblock;each.IFmusthavea corresponding.ENDC.The.IFPO directivecontainsa conditiontestandoneortwo arguments.OOThe conditiontest specifiedisappliedtothe arguments.+IfKOYthetestismet,allMACRO-64 statementsbetween.IFandOO.ENDCare assembled.)Ifthetestisnotmet,the statementsNO arenot assembled.( Optionally,youcanusethe.ELSEdirec-SOctive(ora combinationofthe.IFF,.IFT,and.IFTF directives)SOtospecifyan alternateseriesof statementstoassembleiftheOtestisnotmet.QO Conditionalblockscanbenested;thatis,a conditionalblockMOcanbeinsideanother conditionalblock.-Inthiscase,theNO` statementsintheinner conditionalblockare assembledonlyPOifthe conditionismetforboththeouterandinnerblock.O^Notes e ` HThe assemblerdisplaysanerrormessageifthefollow-K(ing directivesoccuroutsidea conditionalassemblyblock::.ENDC,.ELSE, .IF_FALSE, .IF_TRUE, .IF_TRUE_FALSE. `Y DYMACRO-64permitsanestingdepthof100 conditionalIassemblylevels.+Ifa statementattemptstoexceedthisE nestingleveldepth,the assemblerdisplaysanerrorcmessage. ` LTheeffectoflogical expressionscanonlybeachievedby;:usingseverallevelsof.IF directives.'See:Example5. ` E Lowercasestring argumentsare convertedto uppercaseGbeforebeing compared,unlessthestringis surroundedFkbydoublequotesor /NAMES=as_isis specifiedonthecommandline. `C GCThe assemblerdisplaysanerrormessageif.IFspeci-Pfiesanyofthe following:(a conditiontestotherthanthose in5Table5-4,7anillegal argument,oranullargument,L specifiedinan.IF directive.*O*5c?<OExamples, Example1C4Anexampleofa conditionalassembly directiveis:.IF%EQUALKALPHA+10;%Assemble%block%if% ALPHA+1=0.%Do ..;pnot%assemble%if%ALPHA+1%not=0 I. ..ENDCExample2;4Nested conditional directivestaketheform:%.IFp condition% argument(s)%.IFp condition% argument(s) I. . .!.ENDCh.ENDC9Example3G4The following conditional directivescangovernwhether=assemblyofthe specifiedrangeistooccur:.IF%DEFINEDJSYM1Y.IF%DEFINEDJSYM2 . . 1.y.ENDC.ENDC~ TExample4P4Inthisexample,ifthe outermost conditionisnot satisfied,Lnodeeperlevelof evaluationofnested conditionalstate-Fmentswithintheprogramoccurs.' Therefore,bothSYM1J>andSYM2mustbedefinedforthe specifiedrangetobe assembled.>JAn alternateseriesof statementscanbe specifiedusing.ELSE:.IF%EQUAL%A,B.;&Assemble&if&A%is%equal%to%B.ELSE3;&Assemble&if&A%is%not&equal&to&B%.ENDC eExample5I4The followingexample demonstratestheuseof.ELSEandnesting:D.IF% LESS_THAN&X,Y;&Assemble&if&X%is%less%than&Y?DY.IF%DEFINED%Z;&Assemble&if&Z%is%defined%and!;KX&is&less%than%YD.ELSE3;&Assemble&if&Z%is%not&defined%and!1;KX&is&less%than%YDy.ENDC.ELSEA;&Assemble&if&X%is%greater%than&or&equal&to&YFD .IF%DEFINED%Z;&Assemble&if&Z%is%defined%and%X%is,Q;Kgreater&than%or%equal%to%YD.ENDC.ENDCcad9O.IF_x*_55OSubconditionalassemblyblock directiveswSMOFormatOs .IF_FALSEO.IF_TRUEO:.IF_TRUE_FALSEO DescriptionCOsFor compatibilitywithVAXMACRO,MACRO-64provides;Othree directivesforusewithin.IFblocks:8 M  OO DirectiveFunction OOA .IF_FALSE6AIfthe conditionoftheassemblyblock4testsfalse,theprogramincludesthe1sourcecode followingthe .IF_FALSE7K directiveand continuinguptothenext9subconditional directiveortotheendof,the conditionalassemblyblock.Ou.IF_TRUE6uIfthe conditionoftheassemblyblock3teststrue,theprogramincludesthe0&sourcecode followingthe.IF_TRUE7 directiveand continuinguptothenext9subconditional directiveortotheendof,0the conditionalassemblyblock.O .IF_TRUE_OFALSE5 Regardlessofwhetherthe conditionof<theassemblyblockteststrueorfalse,the2[sourcecode followingthe.IFTRUE_4FALSE directive(and continuingupto6 thenextsubconditional directiveorto9etheendoftheassemblyblock)isalways included. OKOyTheimpliedargumentofasubconditional directiveistheMO conditiontest specifiedwhenthe conditionalassemblyblockMO+ wasentered.+A conditionalorsubconditional directiveinaQO nested conditionalassemblyblockisnot evaluatedifthepre-RO ceding(orouter) conditionintheblockisnot satisfied(seeO4 Example3 4 and4 Example4).*O O* O~ TROA conditionalblockwithasubconditional directiveis differentTOfromanested conditionalblock.(Ifthe conditioninthe.IFisROinotmet,theinner conditionalblocksarenot assembled,butaMOsubconditional directivecancauseablocktobe assembled.OgNotes ` LIfasubconditional directiveappearsoutsidea conditionalI(assemblyblock,the assemblerdisplaysanerrormessage. ` EThe alternateformsof .IF_FALSE, .IF_TRUE,and.IF_4 TRUE_FALSEare.IFF,.IFT,and.IFTF. ` HYoucannotuse.ELSEinthesame conditionalblockas.IF_x.<OExamples cExample114AssumethatsymbolSYMisdefined:D.IF%DEFINEDpSYM2;%Tests%TRUE%since%SYM%is%defined. ".-";p Assembles%the& following%code. j. .D .IF_FALSE*;%Tests%FALSE%since%previous B.'B;p.IF%was&TRUE.KDoes&not .,;passemble%the% following&code. .D.IF_TRUE2;%Tests%TRUE%since%SYM%is%defined. b.-b;p Assembles%the& following%code. . .D9.IF_TRUE_FALSE'9;% Assembles& following%code .;punconditionally. . .DY.IF_TRUE2Y;%Tests%TRUE%since%SYM%is%defined. .%;p Assembles% remainder&of .*;p conditional%assembly%block. 1.Dy.ENDC BjExample2M4AssumethatsymbolXisdefinedandthatsymbolYisnotdefined:D.IF%DEFINEDJX0;%Tests%TRUE%since%X&is&defined.DY.IF%DEFINEDJY6Y;%Tests%FALSE%since%Y%is%not%defined.D .IF_FALSE5;%Tests%TRUE%since%Y&is&not%defined. .-;p Assembles%the& following%code. 1. y.D.IF_TRUE6;%Tests%FALSE%since%Y%is%not%defined.  .0 ;pDoes&not%assemble%the% following Q.Q;pcode. .D.ENDCD).ENDC; XExample3M4AssumethatsymbolAisdefinedandthatsymbolBisnotdefined:D.IF%DEFINEDJA0;%Tests%TRUE%since%A&is&defined. Y.-Y;p Assembles%the& following%code. . .D1 .IF_FALSE11;%Tests%FALSE%since%A%is%defined. y.0y;pDoes&not%assemble%the% following .;pcode.  .DQ.IF% NOT_DEFINED%B+Q;%Nested& conditional& directive . ;pis%not% evaluated. . ).Dq.ENDCD.ENDC Example4G4AssumethatsymbolXisnotdefinedbutsymbolYisdefined:D.IF%DEFINEDJX6;%Tests%FALSE%since%X%is%not%defined. Y.0Y;pDoes&not%assemble%the% following .;pcode. .D1.IF%DEFINEDJY+1;%Nested& conditional& directive y. y;pis%not% evaluated. .  .DQ .IF_FALSE#Q;%Nested&subconditional .+;p directive%is%not& evaluated. . ).Dq.IF_TRUE#q;%Nested&subconditional .+;p directive%is%not& evaluated. . I.D.ENDCD.ENDC dce8O.IIF*f< assembly-timeconstantdatainacodesection.*|?U{+OExamplesb .INSTRUCTION%7g fh8O.IRP*[11O Indefiniterepeatargument directiveqOFormat'Os.IRPMsymbol, . 4. .Orange N. . .OX.ENDRQ 'O ParametersOssymbolJOAformalargumentthatis successivelyreplacedwiththePO$ specifiedactual argumentsenclosedinanglebrackets( <> ).PO|Ifnoformalargumentis specified,the assemblerdisplaysanOerrormessage. O LO(Alistofactual argumentsenclosedinanglebracketsandJOusedin expandingthe indefiniterepeatrange.,AnactualJOargumentcanconsistofoneormore characters.*MultipleJO2 argumentsmustbe separatedbyalegal separator(comma,SOspace,ortab).'Ifnoactual argumentsare specified,noactionOistaken.iOrangeNOTheblockofsourcetexttoberepeatedonceforeachoc-MOqcurrenceofanactualargumentinthelist.*TherangecanLOcontainmacro definitionsandrepeatranges.(.MEXITisle-LO"galwithintherangeandcausesthecurrentand remaining'O{ repetitionstobeaborted.! kO DescriptionLOs.IRPreplacesaformalargumentwith successiveactualar-HOguments specifiedinanargumentlist.,This replacementNO$processoccursduringthe expansionofthe indefiniterepeatLO|blockrange.,The.ENDR directive specifiestheendoftheOrange.POp.IRPis analogoustoamacro definitionwithonlyoneformalMO argument.)Ateach successive expansionoftherepeatblock,JO!thisformalargumentisreplacedwith successiveelementsQOzfromtheargumentlist.'The directiveanditsrangearecodedQOinlinewithinthesourceprogram.&Thistypeofmacrodefini-QO+tionanditsrangedonotrequirecallingthemacrobyname,>Oasdoothermacros describedinthissection.]! 3HO.IRPcanappeareitherinsideoroutsideanothermacroOO definition, indefiniterepeatblock,orrepeatblock(seetheNO5 descriptionof .REPEAT).Therulesfor specifying.IRPargu-NOmentsarethesameasthosefor specifyingmacro arguments.<OExamplesV 2OAThemacro definitionisasfollows:6.macro%CHECK_PROCEDURE_KIND%PROCEDURE_KIND:iOK%=%0;%Assume%procedure_kind%is%unknown:iV.irp%REFERENCE_KIND,BOUND,NULL,%REGISTER,STACK>.if% identical,&,&0OK%=&1%;%Procedure_kind%is%known0..mexit%;%No%need&to&look%furtherv.endci.endr7i.if&eq,%OKJ;%If%unknown& procedure%kind=M.error%"Unknown% procedure%kind:%PROCEDURE_KIND"i.endc%.endm%CHECK_PROCEDURE_KIND(GCHECK_PROCEDURE_KIND%REGISTER&CHECK_PROCEDURE_KIND%FOOZLEHOThemacrocalland expansionofthe previouslydefined!Omacroisasfollows:(aCHECK_PROCEDURE_KIND%REGISTER;iOK%=%0;%Assume% procedure&kind%is%unknown+i.if&identical,,i9.endc*i.if&identical,,i.endc.i.if&identical,,1YOK&=%1%;& Procedure%kind&is&known0.mexit%;&No&need%to%look%further7i.if&eq,%OKJ;%If%unknown& procedure%kindi0.endc&CHECK_PROCEDURE_KIND%FOOZLE;iOK%=%0;%Assume% procedure&kind%is%unknown)i).if&identical,,iq.endc(i.if&identical,,i.endc,iI.if&identical,,i.endc)i.if&identical,,i!.endc7ii.if&eq,%OKJ;%If%unknown& procedure%kind5.error%"Unknown% procedure%kind:%FOOZLE"i.endcqG=OInthisexampletheCHECK_PROCEDURE_KINDmacroOOusesthe.IRP directivetoiterateoveralistof referenceKO5keywordsto determineifitsargumentmatchesoneoftheIO reference keywords.-Ifamatchisnotfound,themacro'Odisplaysanerrormessage.h gi9O.IRPC*\22O Indefiniterepeat character directiveqOFormat Os.IRPCNsymbol, . 4. .Orange N. . .OX.ENDRJ  O ParametersOssymbolJOAformalargumentthatis successivelyreplacedwiththeQO$ specified charactersenclosedinanglebrackets( <> ).*IfnoOO|formalargumentis specified,the assemblerdisplaysanerrorOmessage.v! KLOOO(Asequenceof charactersenclosedinanglebracketsandusedPOinthe expansionofthe indefiniterepeatrange.'AlthoughtheKOanglebracketsarerequiredonlywhenthestringcontainsPO2 separating characters,theiruseis recommendedfor legibility.7! ; OrangeQOTheblockofsourcetexttoberepeatedonceforeachoccur-ROqrenceofa characterinthelist.'TherangecancontainmacroKO definitionsandrepeatranges.+.MEXITislegalwithintheO"range.~ TO DescriptionMOs.IRPCissimilarto.IRPexceptthat.IRPCpermitssingle-LO character substitutionratherthanargument substitution.'OnPO$each iterationofthe indefiniterepeatrange,theformalar-JO|gumentisreplacedwitheach successive characterintheQO specifiedstring.(The.ENDR directive specifiestheendoftheO-range.OO.IRPCis analogoustoamacro definitionwithonlyonefor-LO!mal argument.*Ateach expansionoftherepeatblock,thisLOzformalargumentisreplacedwith successive charactersfromNOtheactualargumentstring.(The directiveanditsrangeareNO+codedinlinewithinthesourceprogramanddonotrequire(Ocallingthemacrobyname.! NOO.IRPCcanappeareitherinsideoroutsideanothermacrodef-TOinition, indefiniterepeatblock,orrepeatblock(see descriptionO5of .REPEAT).<OExamples G2OAThemacro definitionisasfollows:i.macro&X_COUNT%ARGCOUNT&=%0V.irpc&CH,:.iif&identical,,,%COUNT%=%COUNT%+&1.endri..endm%X_COUNTbKOThemacrocalland expansionofthemacrodefinedprevi-!Oouslyisasfollows:iaX_COUNT% XXFOOXBARXXCOUNT&=%0!.irpc&CH,:9.iif&identical,,,%COUNT%=%COUNT%+&1.endr9.iif&identical,,,%COUNT%=&COUNT&+%19.iif&identical,,,%COUNT%=&COUNT&+%19Y.iif&identical,,,%COUNT%=&COUNT&+%19.iif&identical,,,%COUNT%=&COUNT&+%19.iif&identical,,,%COUNT%=&COUNT&+%190.iif&identical,,,%COUNT%=&COUNT&+%19x.iif&identical,,,%COUNT%=&COUNT&+%19.iif&identical,,,%COUNT%=&COUNT&+%19.iif&identical,,,%COUNT%=&COUNT&+%19P.iif&identical,,,%COUNT%=&COUNT&+%19.iif&identical,,,%COUNT%=&COUNT&+%1#.print%"%integer(COUNT)"4I%MACRO64-I-GENPRINT,% Generated%PRINT:&5 WLOThisexampleusesthe.IRPC directivetoiterateovertheGO charactersintheargumenttotheX_COUNTmacro.'EachIO5timeanargument characterisX,thevariableCOUNTisGO incremented.'AftertheX_COUNTmacrohas expanded,theJOexampleusesthe %INTEGER( )lexicaloperatortodisplay O>thevalueofCOUNT.Zi hj<O.LIBRARY*M##OMacrolibrary directivepFOFormat6Os.LIBRARYNquoted-literal1[quoted-literal2] FO ParametersOsquoted-literal1ROAstringenclosedwithindoublequotesthatisthefilespeci-UO$ficationofamacrolibrary.)IfalogicalnameexistsanditisMO|thesameasthemacrolibraryname,specifythe.MLBfileNO extensiontooverridethelogicalname.'Formore information$O-onquoted literals,see\-Section2.4.*\|? kOquoted-literal2MO(Anoptionalstringenclosedwithindoublequotesthatspec-QOifiesasearchlistoffilespecificationswherethe assemblerLOshouldlookforthe specifiedmacrolibrary.*The assemblerUO2 successively processesthesearchlistinlefttorightorderandROattemptstolocatethe specifiedmacrolibraryineachlocationRO specifiedinthesearchlistuntilthemacrolibraryisfound.RO<Ifthemacrolibraryisnotfound,the assemblerissuesadi-KOagnosticmessage.*IfyouomitthesecondargumenttotheLO.LIBRARY directive,the assemblerusesthe followingsearchOElistbydefault: ` .Thecurrentdeviceand directory `J HJThedeviceand directory specifiedbythelogicalname(MACRO64$LIBRARY(ifdefined) `! H!Thedeviceand directory specifiedbythelogicalname&z ALPHA$LIBRARY(ifdefined) ` HThedeviceand directory specifiedbythelogicalnameR SYS$LIBRARYmCCOLogicalnamesmaybedefinedasVMSsearchlists._ 5O DescriptionJOs.LIBRARYaddsanametothemacrolibrarylistthatisKOsearchedwhenevera.MCALLoran undefinedopcodeisen-PO$ countered.(The librariesaresearchedinthereverseorderin;O|whichtheywere specifiedtothe assembler.U+HOIfyouomitany informationfromthemacro-library-nameJO argument,defaultvaluesareassumed.)ThedevicedefaultsNO5toyoucurrentdefaultdisk;the directorydefaultstoyourKOcurrentdefault directory;thefiletypedefaultstoMLB.* OExamplesb.LIBRARY% "MY_MACROS" b1D.LIBRARY% "PROJ_MACROS"&!"PROJ:[MACRO],PROJ:[DEVELOPMENT]" E 2_ J5 1IThefirst statementaddsthemacrolibrary MY_MACROS.MLBK(tothemacrolibrarylist.+The assemblerfirstlooksfor> MY_MACROS.MLBinthecurrent directory.-IfnotHfoundthere,the assemblernextlooksinthe directory>2or directories indicatedbytheMACRO64$LIBRARYLlogicalnameifitisdefined..IfnotfoundthereorifBMACRO64$LIBRARYisnotdefined,the assemblernextH<looksinthe directoryor directories indicatedbytheE ALPHA$LIBRARYlogicalnameifitisdefined.+IfnotEfoundthereorif ALPHA$LIBRARYisnotdefined,theLE assemblernextlooksinthe directoryor directoriesindi-Ecatedbythe SYS$LIBRARYlogicalname.*IfnotfoundAthere,the assemblerissuesa diagnosticmessage. v2LvThesecond statementaddsthemacrolibraryPROJ_MACROS.MLBKtothemacrolibrarylist.+The assemblerfirstlooksfor8'PROJ_MACROS.MLBinthe PROJ:[MACRO]direc-Mtory.)Ifnotfoundthere,the assemblernextlooksinthe@PROJ:[DEVELOPMENT] directory.*Ifnotfoundthere,91the assemblerissuesa diagnosticmessage.j ikAO .LINKAGE_PAIR*FOLinkage directiveW-OFormatOs .LINKAGE_PAIRNname=O ParametersOsnameNOThenameofthe procedure descriptor,possiblydefinedinaPO$ differentmoduleoftheroutinetowhichlinkageis required.! O DescriptionJOs .LINKAGE_PAIRcausesalinkagepairtobestoredattheQOcurrentlocationcounter.&Alinkagepairconsistsoftwoquad-LO$words.-ThefirstquadwordisthecodeentrypointoftheKO|routine indicatedbythe specified identifier.,(See.CODE_KO ADDRESS.)Thesecondquadwordistheaddressofthepro-MO-cedure descriptoroftheroutine indicatedbythe specifiedNO identifier.)Thesecondquadwordisalsocalledthe procedureLOvalue.(The specifiednameshould referencea procedurede-TO7scriptorthatiseitherdefinedwithintheassemblyunitorthatDObecomesdefinedatthetimetheprogramislinked.O6Notes ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4l attributes).'Formore information,see=lSection5.1. ` GIf automaticdata alignmentisenabled,this directiveJDalignsthecurrentlocationcountertoanoctaword(128-6bit)boundarybefore allocatingstorage.*=/{?<OExamples 'oJ .LINKAGE_PAIR&A;%Code%address&A%followed%by%address%of%;% procedure& descriptor%AvlkmG O.LOCAL_CODE_ADDRESS*\22OLocalcodeaddressstorage directiveb8OFormat(Os.LOCAL_CODE_ADDRESSN name-list=O ParametersOs name-listLOAlistofsymbols separatedbycommas.)Eachsymbolrefer-NO$encesa procedure descriptor,definedinthecurrentmodule.#! O DescriptionDOs.LOCAL_CODE_ADDRESScausesthecode addressesoftheTO specified identifierstobeplacedatthecurrentpsectandcur-OO$rentlocationcounter.(The specified identifiermust referenceAO|a procedure descriptordefinedwithinthemodule.O"Notes ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4X attributes).'Formore information,see=XSection5.1. ` GIf automaticdata alignmentisenabled,this directiveL0alignsthecurrentlocationcountertoaquadword(64-bit)0boundarybefore allocatingstorage.*={? OExamples&b.PROCEDURE_DESCRIPTOR%P1,C1.BLKQ%1!.LOCAL_CODE_ADDRESS&P1;%Code%address(:;%of% P1...address&of&C1...;%is%stored&here.mlnGO.LOCAL_LINKAGE_PAIR*M##OLocallinkage directive]3OFormat#Os.LOCAL_LINKAGE_PAIRNnameO ParametersOsnameNOThenameofa procedure descriptoroftheroutinetowhichMO$linkageis required.(The specified procedure descriptormust0O|bedefinedinthecurrentmodule.d :O DescriptionGOs.LOCAL_LINKAGE_PAIRcausesalinkagepairtobestoredQOatthecurrentlocationcounter.)AlinkagepairconsistsofaPO$codeaddressandtheaddressofthe specified identifier.)TheNO| specifiednamemust referencea procedure descriptorthatis/Odefinedwithintheassemblyunit.O{Notes ` GThis directivecanonlybeusedwithindataormixedBXpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.1. `0 G0If automaticdata alignmentisenabled,this directiveJalignsthecurrentlocationcountertoanoctaword(128-6bit)boundarybefore allocatingstorage.*=t{?[ OExamples'b.PROCEDURE_DESCRIPTOR%P1,CA1 . . :.!.LOCAL_LINKAGE_PAIR&P1-4;&Code%address%CA1%followed%by04;& procedure% descriptor&address%P1.onp9#O.LONG*$P%&&OLongwordstorage directiveZ&0OFormat Os.LONGNexpression-list'iO ParametersOsexpression-list informationon parameterpassing.'.*7?8a .MACRO%OP1& A,B=R4,?CPC:ADDL%R2,&B,&R3.MACRO%OP'BTRAPB(.ENDM%OP'BpADDL%A,%R2,&R3OP'B.MDELETE&OP'BH.ENDM%OP1 9EWhenOP1isinvoked"OP1R0",thetextexpandsto:%33000$:&ADDL%R2,&R4,%R3P.MACRO%OPR4TRAPB.ENDM(ADDL%R0,&R2,%R3pOPR4.MDELETE&OPR4: I ProcessingthistextwillcauseOPR4tobeexpandedto-TRAPB;thefinaltextwillbe:$a33000$:&ADDL%R2,&R4&R3ADDL%R0,&R2,%R3TRAPB*;*<Example2>4The followingexampleshowsmacro redefinition:.MACRO% INITIALIZE4D.MACRO% INITIALIZEp ;Redefine%to%nothingDI.ENDM% INITIALIZE DX=0 DY=1D!Z=-1h.ENDM% INITIALIZE,=! INotethatwhilethe redefinedversionofthemacroim-I mediately supersedestheprevious definitioninanysub-N5sequent invocation,the invocationoftheoriginal definition"expandsto completion.B>Example344Thisexampleshowsa recursivemacro:.MACRO% FACTORIAL&N:D.IF%EQUAL%,0;Basis%step;%stop%at%zero IF=1D.ELSE FACTORIAL%!F&=%F%*&Dh.ENDC.ENDM% FACTORIALqpr:?O.MCALL*@JA  OMacrocall directive[B1OFormat!Os.MCALLMmacro-name-listC=O ParametersOsmacro-name-listSOAlistofmacrostobedefinedforthis assembly.(Separatethe%O$macronameswithcommas.D /O DescriptionKOs.MCALL specifiesthenamesofthesystemand user-definedNOmacrosthatarerequiredtoassemblethesourceprogrambut3O$arenotdefinedinthesourcefile.JOIfanynamedmacroisnotfoundupon completionofthePOsearch(thatis,ifthemacroisnotdefinedinanyoftheKOpmacro libraries),the assemblerdisplaysanerrormessage.ONotesE! 5aIWUsingthe.MCALL directiveisoptionalunlessthemacroHnameisthesameasanopcodeor assembler directive.IThe assembler automaticallysearchesforalibrarymacroIawhenit encountersan identifierthatisnotanopcodeKor directiveintheopcodefield.*IfyourmacronameisHthesameasanopcodeor directive,youmustusetheFk.MCALL directive.(Youcanalsousethe.MCALLdirec-Itiveinyourprogramtodocumentwhichmacrosareusedbyyourprogram.FxOExamplesb.MCALL%TRAPB0b;% Substitute&macro&in&library%for;%TRAPB% instructionrqs<GO.MDELETE*HNI$$OMacrodeletion directive]J3OFormat#Os.MDELETENmacro-name-listK =O ParametersOsmacro-name-listROAlistofmacroswhose definitionsaretobedeleted.(Youmay,)STQ&REG,%LOCATION)B.mexit.endc#.if%identical,,)STQ&REG,%LOCATION)b.mexit.endc2.if%#identical,<%extract(0,1,)>,)9STQ&REG,%LOCATION).mexit.endc2.if%#identical,<%extract(0,1,)>,)YSTT&REG,%LOCATION).mexit.endc<1.error% "Register&argument&is&not%a& register"y.endm&STORE*UaV1 M 7Example2A4Inthisexample, theSTOREmacro(asdefinedinBExample1)attemptsto recognizeitsREGargumentLaseitherFP,SP,anintegerregister(aregisterwithRQ>asitsfirstletter),orafloating-pointregister(aregisterOwithFasitsfirstletter).'The followingexampleshowtwo, expansionsoftheSTOREmacro.tSTORE&R1,%0(SP)".if%identical,,.endc"K.if%identical,,.endc3.if%identical,<%extract(0,1,)>,% #.if%identical,,)kSTQ&R1,%0(SP)).mexit STORE&24(SP),%16(SP)&d.if%identical,<24(SP)>,.endc&.if%identical,<24(SP)>,<.endc5.if%&identical,<%extract(0,1,<24(SP)>)>, .if%identical,<2>,.endc6\.if% identical,%<%extract(0,1<24(SP)>)>, .if%identical,<2>,.endc<4 .error% "Register&argument&is&not%a& register"oW! kEHThefirstcalloftheSTOREmacroabovestoresR1atD0(SP).TheSTOREmacro determinestodoanintegerQ5storeby recognizingtheletterRasthefirstletteroftheGregistername.-Onceithasdoneso,itabandonsfur-Ither expansionofthemacrousingthe.MEXIT directive.K>Thesecond invocationattemptstostore24(SP)at16(SP).KSincetheSTOREmacrocannotidentify24(SP)asalegit-Nimateregisterinanyofthefourformsit recognizes,theFHSTOREmacrodoesnotattempttostoretheREGargu-Fment,anddoesnotabandon expansionwiththe.MEXITG directive.(Instead,theSTOREmacroexpandsandissues!Ra diagnosticmessage. t su9XO.NARG*YTZ**ONumberof arguments directiveQ['OFormatOs.NARGMsymbol\=O ParametersOssymbolMOAsymbolthatisassignedavalueequaltothenumberof6O$ positional argumentsinthemacrocall.] O DescriptionIOs.NARG determinesthenumberof argumentsinthecurrentOmacrocall.LOf.NARGcountsallthe positional arguments specifiedintheLOmacrocall, includingnull arguments (specifiedbyadjacentOOcommas).'Thevalueassignedtothe specifiedsymboldoesnotFOpincludeanykeyword argumentsoranyformal arguments&Othathavedefaultvalues.OnNotes^ gJWIf.NARGappearsoutsideamacro,the assemblerdisplaysanerrormessage.<_OExamplesR`V (OExample12O4Themacro definitionisasfollows:D.MACROKCNT_ARG%)A1,A2,A3,A4,A5,A6,A7,A8,A9=DEF9,A10=DEF10.NARGpCOUNTER0T;&COUNTER%is%set&to&no.%of%ARGSI.WORDpCOUNTER&TI;&Store&value&of&COUNTER.ENDMpCNT_ARGa 5OExample2HO4Themacrocallsand expansionsofthemacro previously$Odefinedareasfollows:8CNT_ARG& TEST,FIND,ANSp;&COUNTER%will%=&3Y.NARGpCOUNTER0TY;&COUNTER%is%set&to&no.%of%ARGS.WORDpCOUNTER&T;&Store&value&of&COUNTER CNT_ARG T ;&COUNTER%will%=&0R.NARGpCOUNTER0TR;&COUNTER%is%set&to&no.%of%ARGS.WORDpCOUNTER&T;&Store&value&of&COUNTER?CNT_ARG&TEST,A2=SYMB2,A3=SY3;%COUNTER&will%=%1K.NARGpCOUNTER0TK;&COUNTER%is%set&to&no.%of%ARGS.WORDpCOUNTER&T;&Store&value&of&COUNTER2T;&Keyword% arguments&are%not%countedDCNT_ARG&,SYMBL,, TD;&COUNTER%will%=&4.NARGpCOUNTER0T;&COUNTER%is%set&to&no.%of%ARGS.WORDpCOUNTER&T;&Store&value&of&COUNTER*T;&Null% arguments&are%counted u tv9bO.NCHR*cUd++ONumberof characters directiveZe0OFormat Os.NCHRNsymbol,f=O ParametersOssymbolMOAsymbolthatisassignedavalueequaltothenumberofJO(Asequenceof printable characters.+Delimitthe characterROstringwithanglebrackets( <> )(ora characterprecededbyTOa circumflex( ^ ))onlyifthe specified characterstringcon-QO2tainsalegal separator(comma,space,ortab)ora semicolonO( ; ).Bh;O DescriptionJOs.NCHR determinesthenumberof charactersina specifiedGO characterstring.*ItcanappearanywhereinanMACRO-OO$64programandisusefulin calculatingthelengthofmacroO| arguments.O"NotesieEWYoucanusethe%LENGTHlexicaloperatorinsteadof the.NCHR directive.<jOExamplesxk NExample124Themacro definitionisasfollows:.MACROpCHARMESS;%Define&MACRO.NCHR CHRCNT,&;%Assign&value&to&CHRCNTI.WORDCHRCNTI;%Store%value.ASCIIp"MESS";%Store% characters.ENDMCHAR;%Finishl[ CbExample2H4Themacrocallsand expansionsofthemacro previously$definedareasfollows:CHAR;%CHRCNT%will%=&5Y.NCHRCHRCNT,&Y;%Assign%value%to%CHRCNT.WORDCHRCNT;%Store%value.ASCIIp"HELLO";%Store% charactersRCHAR<14,&75.39K4>%R;%CHRCNT%will%=&12(dec)'.NCHR CHRCNT,<14,%75.39J4>&;%Assign%value%to%CHRCNT.WORDCHRCNT;%Store%value!*.ASCIIp"14,&75.39K4"*;%Store% charactersKxwy9yO.OCTA*zP{&&OOctawordstorage directiveZ|0OFormat Os.OCTAMexpression-list}O ParametersOsexpression-listLOAlistofconstantvalues separatedbycommas.*EachvalueQO$resultsina64-bitvaluebeing sign-extendedto128bitsand#O|storedinan octaword.~ O DescriptionEOs.OCTA generates128bits(16bytes)ofbinarydata.ONotes ` HThelowquadwordcontainsthe specifiedconstantvalue. ` FThehighquadwordcontainsthesign extensionoftheKu specifiedconstantvalue.(Thatis,thehighquadwordcon-Rtainszeroifthe specifiedvalueis positive,anditcontainsI&allbitssetto1ifthe specifiedvalueis negative. ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4W attributes).'Formore information,see=WSection5.1. ` GIf automaticdata alignmentisenabled,this directiveJ/alignsthecurrentlocationcountertoanoctaword(128-6bit)boundarybefore allocatingstorage.*~={? OExamplesb.OCTAJ0b;&OCTA%0".OCTAJ^X01234ABCD5678F9(;&OCTA%hex&value& specified.OCTAJ VINTERVAL ;& VINTERVAL%has%64-O[bit%value,;p sign-extendedxyxz8O.ODD*`66OOddlocationcounter alignment directiveHOFormatOs.ODD, O DescriptionNOs.ODDensuresthatthecurrentvalueofthelocationcounterVOisoddbyadding1ifthecurrentvalueiseven.(Ifthecurrent:O$valueisalreadyodd,noactionistaken.ONotes!GWThis directivecanbeusedonlywithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.3.*={?}{z|9O.PAGE*M##OPageejection directiveIOFormatOs.PAGE#! O DescriptionTOs.PAGEforcesanewpageinthelisting.(The directiveitselfisGOalsoprintedinthelistingandbeginsthenewpage.OOf.PAGEinamacro definitionisignored.'Thepaging operationMOis performedonlyduringmacro expansion.(Ifthe.PAGEdi-KOrectiveoccursduringmacro expansion,text beginningwithSOptheoriginalmacro invocationlineappearsatthetopofanewOpage.G+OExamples9b.MACRO%SKIP;&macro& definition%with%.PAGE.PAGE ;.ENDM%SKIP;:.PSECT%A,NOEXE%;.BLKW%10 ;SKIP3;&In&the%listing&file,&a%form%feed%;Kwill&be&inserted&here|{}:O.PRINT*P&&OAssemblymessage directiveZ0OFormat Os.PRINTNquoted-literal"O ParametersOsquoted-literalKOThestringof charactersenclosedinquotesare displayedFO$when encounteredduring assembly.*Formore information$O|onquoted literals,see\|Section2.4.*\?|?nIDO DescriptionHOs.PRINTcausesthe assemblertodisplayan informational VAXMACROand InstructionSet ReferenceManual Xfor0details.1 SOExamples'b.PRINT% "Questionable%usage" ^F%MACRO64-I-GENPRINT,% Generated%PRINT:& Questionable%usage@:at%line&number%3&in&file%DISK$:[TEST]PRINT.M64;2G y =  3OTable5-5:8ProgramSection Attributes O OF AttributeDFunction Ob gOABS Absolute-Theprogramsectionhasanabsoluteaddress.(Anabsoluteprogramsec-ktion contributesnobinarycodetotheimage,soitsbyte allocationrequesttothej[linkeriszero.(Youcannotstoreinitialvaluesinanabsoluteprogramsectionwith^ directivessuchas.BYTE,.WORD,.LONG,QUAD.Usuallythe.BLKx directivesj areusedin conjunctionwithlabel definitionswithinanabsoluteprogramsectiontojedefinesymbolicoffsetswithina structure.(Comparethis attributewithits opposite,REL.`O7CONConcatenate-Programsectionswiththesamenameand attributes (including^CON)fromothermodulesare concatenatedintooneprogramsectionatlinketime.+Theircontentsare concatenatedintheorderinwhichthelinkeracquiresfAthem.*The allocatedvirtualaddressspaceisthesumofthe individual requestedL allocations.'Comparethis attributewithits opposite,OVL.cOEXEExecutable-Theprogramsectioncontains instructions.,This attributeprovideselthe capabilityof separating instructionsfrom read-onlyand read/writedata.(Thehlinkerusesthis attributein gatheringprogramsectionsandin verifyingthatthedtransferaddressisinan executableprogramsection.*The assembleronlyallowsjuyoutoplace instructionsinaprogramsectionthathaseitherorboththeEXEorRMIX attributes.'Comparethis attributewithits opposite,NOEXE.iOHGBLGlobal-Programsectionsthathavethesamenameand attributeswillbecombinedgatlinktimeintoasingleprogramsectionevenwhenthe individualprogramsec-dtionsarein different clusters.'This attributeis specifiedforFORTRANCOMMONYQ blockprogram sections.'Comparethis attributewithits opposite,LCL.mO LCL Local-Theprogramsectionis restrictedtoitscluster.(Comparethis attributewith$ its opposite,GBL. z   O O AttributeDFunction O eOxMIXMix-Theprogramsectioncancontainbothdataand instructions.)TheMIXandaNOMIX attributesare assembly-time attributeswhichonlyaffect assemblerpro-c)cessing.(TheMIXandNOMIX attributesdonotappearintheobjectmoduleandgdonotaffectlinker processing.+Tomix instructionsanddatainthesamepsect,eyoumustspecifytheMIX attribute.(TheNOMIX attributeisthedefault.(Ifyoue3choosetouse instructionsinaNOEXEpsect,orusedata directivesinanEXEdpsect,youmustspecifytheMIX attribute.)The following limitationsapplywhen%usingtheMIX attribute: i ^-i Optimizationsand alignmentofcodelabelsarenot performed.* Optimizations_-and code-label alignmentarenot performedon instructionsplacedinaMIX_-psect, regardlessofwhetherthe.ENABLE/.DISABLEoptionshavebeenset,orU-sifcommandline /OPTIMIZATIONand/ALIGNMENT=codeoptionshavebeen- specified. J Y-JLimited debugging informationis provided.+NoPC-line(programcounter)e- correlation informationis generatedforthe instructionsplacedinaMIXpsect. " e-"Thelistingfileincludesonlybinaryencoded instructions.(All instructionsthatb-{areplacedinaMIXpsectappearinthe machine-codeportionofthelistingh-file,intheirbinaryencoded instructionformasadata initializertothe.LONG-,data directive.bThereareno restrictionsondata directives..Comparethis attributewithits9  opposite,NOMIX.Formore information,see Section5.1.jO NOEXE)NotExecutable-Theprogramsectioncontainsdataonly;itdoesnotcontainin-f  structions.*The assembleronlyallowsyoutoplacedata allocationsinaprogram`4 sectionthathaseitherorboththeNOEXEandMIX attributes.,Comparethis/  attributewithits opposite,EXE.kO NOMIXThedefault attributewhenyouusethe.PSECT directive.(Comparethis attribute$_ withits opposite,MIX.iO NOPICINon-Position-Independent Content-Theprogramsectionisassignedtoafixedlo-i1 cationinvirtualmemory(whenitisina shareableimage).'Comparethis attribute$ withits opposite,PIC.lO NORDdNonreadable-Reservedforfutureuse.'Comparethis attributewithits opposite,RD.*|?z  | O O AttributeDFunction O oOxNOSHR4No Share-Theprogramsectionisreservedforprivateuseat executiontimebytheT initiatingprocess.'Comparethis attributewithits opposite,SHR.lOKNOWRTNonwriteable-Thecontentsoftheprogramsectioncannotbealtered(writteninto)Tat executiontime.'Comparethis attributewithits opposite,WRT.bOOVROverlay-Programsectionswiththesamenameand attributes (includingOVR)dufromothermodulesreceivethesame relocatablebaseaddressinmemoryatlinkjtime.)The allocatedvirtualaddressspaceisthe requested allocationofthelargest]& overlayingprogramsection.'Comparethis attributewithits opposite,CON.kOPICPosition-Independent Content-Theprogramsectioncanbe relocated;thatis,itcanfbeassignedtoanymemoryarea(whenitisina shareableimage).(Comparethis1Q attributewithits opposite,NOPIC.iORDReadable-Reservedforfutureuse.'Comparethis attributewithits opposite,NORD.kOERELRelocatable-Thelinkerassignstheprogramsectiona relocatablebaseaddress.&Thegcontentsoftheprogramsectioncanbecodeordata.)Comparethis attributewithits opposite,ABS.jOpSHR Share-Theprogramsectioncanbesharedat executiontimebymultiple processes.kThis attributeisassignedtoaprogramsectionthatcanbelinkedintoa shareableH!image.'Comparethis attributewithits opposite,NOSHR.lOWRT Write-Thecontentsoftheprogramsectioncanbealtered(writteninto)atexecu-Mtiontime.&Comparethis attributewithits opposite,NOWRT. O wseparatemodulesareoverlaidbythelinker.*TheOVRat-POtributedoesnotaffecthowmultiple contributionstoapsectMOare processedwithinasingleassemblyunit.)*YouneednotOOHre-listthe attributeswhen continuingaprogramsection,butROany attributesthatarelistedmustbethesameasthosepre-OOviouslyineffectfortheprogramsection.*A continuationofMORaprogramsectioncannotcontain attributes conflictingwithROthose specified,or defaulted,intheoriginal.PSECT directive. a~LOThe attributeslistedinthe.PSECT directivedescribetheJOcontentsoftheprogramsection.+ExceptfortheEXEandJO5NOEXE attributes,the assemblerdoesnotchecktoensureNOthatthecontentsoftheprogramsectionactuallyadheretoNOthe attributeslisted.)However,the assemblerandthelinkerNO>docheckthatallprogramsectionswiththesamenamehaveLOexactlythesame attributes.)The assemblerandlinkerdis-NOplayanerrormessageiftheprogramsection attributesareOHnot consistent.lGOProgramsectionnamesare independentoflocalsymbol,GOglobalsymbol,andmacronames.-YoucanusethesameOO5symbolicnameforaprogramsectionandforalocalsymbol,LOglobalsymbol,ormacroname.(Youmaywanttouseunique4Onamesforclarityandmaintainability.ONotes# ` @The.ALIGN directivecannotspecifyan alignmentH(greaterthanthatofthecurrentprogramsection;con-F sequently,.PSECTshouldspecifythelargest alignment,neededintheprogramsection. `Y IYFor efficiencyof executionandeaseof programming,anH alignmentofquadwordorlargeris recommendedforall8 programsectionsthathavequadworddata.h{>OExamples,b.PSECT% A,QUAD,EXE;%Code&psectu~9O.QUAD*P&&OQuadwordstorage directiveZ0OFormat Os.QUADNexpression-listiO ParametersOsexpression-list! O DescriptionCOs.QUAD generates64bits(8bytes)ofbinarydata.ONotes ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4O attributes).'Formore information,see=OSection5.1. ` GIf automaticdata alignmentisenabled,this directiveL&alignsthecurrentlocationcountertoaquadword(64-bit)0boundarybefore allocatingstorage.*={?S{)OExamplesbA::%.QUAD%4Jv O.REPEATO].REPT*L""ORepeatblock directiveOFormatOs.REPEAT expression . . D.Orange . y. .O.ENDR7  O ParametersOs expressionMOAn expressionwhosevaluecontrolsthenumberoftimestheMO$rangeistobe assembledwithintheprogram.(Whentheex-UO|pressionislessthanorequaltozero,therepeatblockisnotJO assembled.+The expressionmustbeabsoluteor relocatableKO-andmustnotcontainany undefinedsymbols.(The assemblerQOconvertsa relocatablevaluetotherelativeoffsetwithintheOpsect.nOrangePOThesourcetexttoberepeatedthenumberoftimes specifiedPOqbythevalueofthe expression.)TherepeatblockcancontainKOmacro definitionsorotherrepeatblocks.+.MEXITislegalMO"withintherangeandcausesthecurrentandall succeeding'O{ repetitionstobeaborted. O DescriptionPOs.REPEATrepeatsablockofcodea specifiednumberoftimes,POinlinewithothersourcecode.'The.ENDR directive specifies#O$theendoftherange.ONotesa77The alternateformof.REPEATis.REPT.<OExamples[Example1G4The followingmacro definitionusesthe.REPEATdirec-NtivetostoreanASCIIstringa specifiednumberoftimes,&followedbyazerobyte:$j.MACROKCOPIESJ STRING,NUM.REPEAT&NUM.ASCIIK"STRING"B.ENDR.BYTEp0.ENDMpCOPIESExample2L4The followingmacrocallstoresfivecopiesofthestring@ "ABCDEF".'Thisexampleisdividedinto4parts:b!8Macro invocation:COPIESK ,5q4Macro expansionof.REPEAT invocation:.REPEAT%5P.ASCIIJ"ABCDEF".ENDRA.REPEAT expansion:.ASCIIJ"ABCDEF"P.ASCIIJ"ABCDEF".ASCIIJ"ABCDEF".ASCIIJ"ABCDEF"(.ASCIIJ"ABCDEF"`!6$Endofmacro expansion:.BYTEp0 Example3M4The followingmacrocallstoresthreecopiesofthestringJ"HowManyTimes".&Thisexampleisdividedinto4parts:iYMacro invocation:VARB&=%3)PCOPIESJ,VARB~4Macro expansionof.REPEAT invocation:.REPEAT&VARB$P.ASCIIJ"How%Many&Times".ENDR.REPEAT expansion:$.ASCIIK"How%Many%Times"$P.ASCIIJ"How%Many&Times"$.ASCIIJ"How%Many&Times"`!6$Endofmacro expansion:.BYTEp0Tv*O.RESTORE_PSECTO].RESTORE*kAAORestorepreviousprogramsectioncontext directived:OFormatOs.RESTORE_PSECTO.RESTORExNO DescriptionEOs.RESTORE_PSECT retrievestheprogramsectionfromtheNOtopoftheprogramsectioncontextstack,aninternalstackIO$inthe assembler.+Ifthestackisemptywhen .RESTORE_KO|PSECTisissued,the assemblerdisplaysanerrormessage.COWhen.RESTORE_PSECT retrievesaprogramsection,itLO-restoresthecurrentlocationcountertothevalueithadGOwhentheprogramsectionwassaved.)ThemaximumstackKOlevelis50.+Seethe descriptionof .SAVE_PSECTformoreO7 information.ONotes `b AbThe alternateformof.RESTORE_PSECTis .RESTORE. ` AYoucannotuse.RESTORE_PSECTto overwriteprevi-L:ousdatastorageinitializations.(Inthe followingexample,FMACRO-64attemptstostore"42"over"43"andfails,' resultingina diagnostic.p.PSECT%A.SAVE%PSECT.PSECT%AH.QUAD%43.RESTORE%PSECT.QUAD%42 OExamplesib.PSECT& A,QUAD,NOEXEA1:%.WORD%5A2:%.QUAD%6i: .SAVE_PSECT%/:;%Saves%psect%A%contexti.PSECT& B,QUAD,NOEXEB1:%.WORD%69i.RESTORE_PSECT;%Return&A%location%counterZA3:%.WORD%5i.PSECT& B,QUAD,NOEXE 1$:%.WORD%5IiS.SAVE% LOCAL_BLOCKK;%Saves%psect%B%context&and% temporary/;%label%contexti.PSECT&C,NOEXEL1$:%.WORD%6;i.RESTORE_PSECT;%Restores%psect%B%and%saves/;%label%contexti$.ADDRESS%1$)/$;% References%the%address%of+/l;%psect%B% temporary%label%1$9Nv$O .SAVE_PSECTO].SAVE*g==OSavecurrentprogramsectioncontext directive|ROFormat$Os .SAVE_PSECTN [LOCAL_BLOCK]O.SAVEN [LOCAL_BLOCK]S! D)O DescriptionJOs .SAVE_PSECTstoresthecurrentprogramsectioncontextonQOthetopoftheprogramsectioncontextstack,aninternalas-NO$semblerstack.(ItleavesthecurrentprogramsectioncontextOO|ineffect.)TheprogramsectioncontextstackcanholduptoRO50entries.'Eachentryincludesthevalueofthecurrentloca-NO-tioncounterandthemaximumvalueassignedtothelocationPOcounterinthecurrentprogramsection.*IfthestackisfullAOwhen .SAVE_PSECTis encountered,anerroroccurs.JOzIfthe LOCAL_BLOCKoptionis specified,thecurrenttem-OOporarylabelblockissavedwiththecurrentprogramsectionO+context. ! CO .SAVE_PSECTand.RESTORE_PSECTare especiallyusefulQOinmacrosthatdefineprogram sections.'Seethe descriptionof?O5.RESTORE_PSECTforanexampleusing .SAVE_PSECT.ONotesep;;WThe alternateformof .SAVE_PSECTis.SAVE.p F?OTable5-7:7.SHOWand.NOSHOWSymbolic Arguments O OLongFormbFShort!bFormDefaultFunction O xO CONDITIONALSHCNDNoshowLists unsatisfied conditionalcode associatedwiththe conditionalassembly$ directives.OO EXPANSIONSMENoshowListsmacroandrepeatrange expansions.OLIBRARY\bNoneNoshowIncludesthemacro definitionsinalibraryinthelisting.OINCLUDEKbNoneNoshowListsincludefiletextinthelistingfile. O  ?O .S_FLOATING*qGGOSingle-precisionIEEEfloating-point arithmetic directivekAOFormat1Os .S_FLOATINGNfloating-point-number-list)O Parameters$Osfloating-point-number-listNOAlistofIEEEsingle-precisionfloating-point constantssep-IO$aratedbycommas.)Formore informationonfloating-pointO|numbers,see8|Section2.3.2.*8??~a ]7O DescriptionFOs .S_FLOATING evaluatesthe specifiedfloating-pointcon-JOstantsandstorestheresultsintheobjectmodule./.S_DO$FLOATING generates32-bit,single-precision, floating-TO|pointdata(1bitofsign,8bitsof exponent,and23bitsofLO fractionalsignificance).'Seethe descriptionof .T_FLOATINGIO-for informationonstoringdouble-precisionfloating-pointAOIEEEnumbersandthe descriptionsof .D_FLOATING,FO .F_FLOATING,and .G_FLOATINGfor descriptionsofother"O7floating-pointnumbers.ONotes `b GbThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.3. ` GIf automaticdata alignmentisenabled,this directiveLalignsthecurrentlocationcountertoalongword(32-bit)0Dboundarybefore allocatingstorage.*={?`{6OExamples$b .S_FLOATING% 2.0,3.0,4.405 Jv O.SHOWO].NOSHOW*b88OListing inclusionand exclusion directives|ROFormat Os.SHOWN[argument-list]"O.NOSHOWN[argument-list]G O ParametersOs[argument-list]GOUseoneormoreofthesymbolic argumentsdefinedinO$Table5-7.@$YoucanuseeitherthelongformortheshortKO|formofthe arguments.)Ifyouspecifymultiple arguments,LOyoumustseparatethembycommas.(IfanyargumentisnotRO- specificallyincludedinalistingcontrol statement,theassem-LOblerassumesitsdefaultvalue(showornoshow) throughoutOthesourceprogram.*Od? O DescriptionEOF.SHOWand.NOSHOWspecifylistingcontroloptionsinGOthesourcetextofaprogram..Youcanuse.SHOWand9O.NOSHOWwithorwithoutanargumentlist.JOWhenyouusethemwithanargumentlist,.SHOWincludes;Oand.NOSHOWexcludesthelines specifiedinTable5-7.LOC.SHOWand.NOSHOWcontrolthelistingofthesourcelinesROthatarein conditionalassemblyblocks(seethe descriptionofKO.IF),macros,andrepeatblocks.*Whenyouusethemwith-POMout arguments,these directivesalterthelistinglevelcount.POThelistinglevelcountis initializedto0.)Eachtime.SHOWPOappearsinaprogram,thelistinglevelcountis incremented;LOVEachtime.NOSHOWappearsinaprogram,thelistinglevel!Ocountis decremented.*d?QOWhenthelistinglevelcountis negative,thelistingissup-NOpressed,unlessthelinecontainsanerror.( Conversely,whenQO5thelistinglevelcountis positive,thelistingis generated.ROWhenthecountis0,thelineiseitherlistedor suppressed,OO dependingonthevalueofthelistingcontrolsymbolicargu-O>ments.ONotes!  ` LThelistinglevelcountallowsmacrostobelistedselec-G(tively;amacro definitioncanspecify.NOSHOWattheH beginningto decrementthelistingcountandcanspec-Mify.SHOWattheendtorestorethelistingcounttoits2originalvalue. ` DThe alternateformsof.SHOWand.NOSHOWare.LIST and.NLIST. ` ETheinitialsettingforeachlist .LIST/.SHOWoptionEisobtainedfromthecommandlinesettingusingtheF:/SHOW qualifier.'Formore informationoncommandline qualifiers,seeSection1.2.*V{?1 "OExamplesHb.NOSHOWp;%Turn&off%listing&file%display.KCounter%<%0. D. D. D:.E.SHOW;%Turn&on&listing%file%display.JCounter%=&0.2I;%Value%of%.SHOW%options&are%used. D. DZ. D.>.SHOW;%Counter&>%0.KListing%file%display&isO|mustbeintherange-32,768through+32,767.O DescriptionFOs .SIGNED_WORD generates successivewordsofbinarydataJOintheobjectmoduleandperformssignedrange checking.GO$Apartfromtherangecheck, .SIGNED_WORDis equivalent8O|to.WORDintermsofstorage allocation.O"Notes ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4X attributes).'Formore information,see=XSection5.1. ` GIf automaticdata alignmentisenabled,this directiveH0alignsthecurrentlocationcountertoaword(16-bit)0boundarybefore allocatingstorage.*={? OExamplesb.PSECT% $DATA,NOEXE .SIGNED_WORD%-32766;7 .SIGNED_WORD%32769%;causes%assembly%errorMv#O .SUBTITLEO].SBTTL*P&&OListingsubtitle directive}SOFormat#Os .SUBTITLEMquoted-literal O.SBTTLMquoted-literal+ O ParametersOsquoted-literalNOAnASCIIstringenclosedinquotesfrom1to31 charactersLO$long;excess charactersare truncated.(Formore information$O|onquoted literals,see\|Section2.4.*\?|?xpNO DescriptionOOs .SUBTITLEcausesthe assemblertoprintthelineoftextasROthesubtitleonthesecondlineofeachassemblylistingpage.RO$Thissubtitletextisprintedoneachpageuntilalteredbya=O| subsequent .SUBTITLE directiveintheprogram.O"Notes ` :The alternateformof .SUBTITLEis.SBTTL. `&  ` BThis directivealsoacceptsVAXMACROsyntax.,See> VAXMACROand InstructionSet ReferenceManual XforWdetails.n{DOExamples2b .SUBTITLE% "Terminal&Display% Routines" ?O .T_FLOATING*qGGODouble-precisionIEEEfloating-point arithmetic directivekAOFormat1Os .T_FLOATINGNfloating-point-number-list*O Parameters$Osfloating-point-number-listNOAlistofIEEEdouble-precisionfloating-point constantssep-JO$aratedbycommas.)Formore informationonfloatingpointO|numbers,see8|Section2.3.2.*8??~b! ]8O DescriptionFOs .T_FLOATING evaluatesthe specifiedfloating-pointcon-JOstantsandstorestheresultsintheobjectmodule./.T_DO$FLOATING generates64-bit,double-precision, floating-UO|pointdata(1bitofsign,11bitsof exponent,and52bitsofLO fractionalsignificance).'Seethe descriptionof .S_FLOATINGIO-for informationonstoringsingle-precisionfloating-pointEOIEEEnumbersandthe descriptionsof .D_FLOATING,F_BO FLOATING,and G_FLOATINGfor descriptionsofother"O7floating-pointnumbers.ONotes `b GbThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX4 attributes).'Formore information,see=Section5.1. ` GIf automaticdata alignmentisenabled,this directiveLalignsthecurrentlocationcountertoaquadword(64-bit)0Dboundarybefore allocatingstorage.*={?_{5OExamples#b .T_FLOATING% 4.5036,6.034+ : O.TITLE* M ##OListingtitle directivej @OFormat0Os.TITLEN module-name["listing-title"] O ParametersOs module-nameNOEitheraquotedliteraloran identifierthat specifiestheNO$module'stitle.*Formore informationonquoted literals,seeO|Section2.4.* O?|?$ O"listing-title"RO(Optionalquotedliteralthat specifiesatitletoappearwithinTOthefirstlineofeachlistingoutputfile.'Formore information$Oonquoted literals,see\Section2.4.*\|? O Description VAXMACROand InstructionSet ReferenceManual Xforjdetails.j{@OExamples.b.TITLE%"MAIN"&"Main&Entry&Point"9O.WARN*FOWarning directiveY/OFormatOs.WARNNquoted-literal ! O ParametersOsquoted-literalQOThestringof charactersenclosedinquotesare displayeddur-LO$ing assembly.*Formore informationonquoted literals,seeO|Section2.4.*O?|?! ImO DescriptionIOs.WARNcausesthe assemblertodisplayawarningmessageXOontheterminalorinthebatchlogfile,andinthelistingfileO$(ifthereisone).ONotes `O CO.PRINT,.WARN,and.ERRORare directivesthatdis-Hplay messages.(Youcanusethemtodisplay informationI indicatingan unexpectedor importantassembly condition. ` BThis directivealsoacceptsVAXMACROsyntax.,See> VAXMACROand InstructionSet ReferenceManual Xfor0details. SOExamples9b.WARN%"Illegal% parameter%value;&0%assumed" ^Z%MACRO64-W-GENWARN,& Generated%WARNING:%Illegal& parameter%value;%0%assumed?:at%line&number%3&in&file%DISK$:[TEST]WARN.M64;299O.WEAK*V,,OWeaksymbol attribute directiveV,OFormatOs.WEAKN symbol-listcO ParametersOs symbol-list:OAlistof identifiers separatedbycommas. DyO DescriptionKOs.WEAK specifiessymbolsthatareeitherdefined externallyOOinanothermoduleordefinedgloballyinthecurrentmodule.LO$.WEAK suppressesanyobjectlibrarysearchforthesymbol.LOWhen.WEAK specifiesasymbolthatisnotdefinedintheJOcurrentmodule,thesymbolis externallydefined.-IftheROplinkerfindsthesymbol's definitioninanothermodule,itusesTOthat definition.(Ifthelinkerdoesnotfindanexternaldefini-RO!tion,thesymbolhasavalueofzeroandthelinkerdoesnotROzreportanerror.)ThelinkerdoesnotsearchalibraryfortheROsymbol,butifamodulebroughtinfromalibraryforanotherLO+reasoncontainsthesymbol definition,thelinkerusesit.WMOWhen.WEAK specifiesasymbolthatisdefinedinthecur-POrentmodule,thesymbolis consideredtobegloballydefined.LO5However,ifthismoduleisinsertedinanobjectlibrary,MOthissymbolisnotinsertedinthe library'ssymboltable.MO Consequently, searchingthelibraryatlinktimetoresolveHO>thissymboldoesnotcausethemoduletobe included.SOExamplesib.WEAK%A,B,CEA::%.WORD%5;%A&and%B&are%weak&global% definitionsB::%.QUAD%6=i:.ADDRESS%CJ;%C&is&a%weak%external% reference~ 9 O.WORD*!L"""OWordstorage directiveZ#0OFormat Os.WORDNexpression-list$=O ParametersOsexpression-listGOOneormore expressions separatedbycommas.+Formore8O$ informationontermsand expressions,seeE$Section2.8.*$E|?%! O DescriptionLOs.WORD generates successivewords(2bytes)ofdataintheOobjectmodule.OqNotes ` GThe expressionisfirst evaluatedasa quadword,thenJO truncatedtoaword.)Thevalueofthe expressionshouldMbeintherangeof-32,768to+32,767forsigneddataorK0to65,535forunsigneddata.(The assemblerdisplaysanMXerrorifthe high-order6bytesofthequadword expression@haveavalueotherthanzeroor^XFFFFFFFFFFFF. `0 G0The assembler truncatesontheleftofanintegerorexternalvalue. ` 4 Addressesarenotallowedwith.WORD. ` GThis directivecanonlybeusedwithindataormixedBpsects(psectsthathaveeithertheNOEXEorMIX48 attributes).'Formore information,see=8Section5.1. ` GIf automaticdata alignmentisenabled,this directiveHalignsthecurrentlocationcountertoaword(16-bit)0iboundarybefore allocatingstorage.*%={?R&{(OExamplesb.WORD%5,6,7 .,O6.2BRoutinesandLexicalScopeJOUThecalling-standardmacrosusetheconceptofasingle,LOcurrent,activeroutine.)Aroutineissimplya programmingLOentitythatis associatedwitha procedure descriptorthatRO^maybecalled,orisamainroutine specifiedasthetransfer(Oaddressofalinkedimage.N/! $1OOnlyoneroutinecanbeactiveor current6atanygiventimeMOduring assembly.+IfmorethanoneroutineisdefinedinaSO5single assemblersourcefile,allitems associatedwiththecur-/Orentroutine,thatiswithinthe lexicalscopezoftheroutine,NOmustbe completedbeforemakinga differentroutinecurrent.NO>Thelexicalscopeofoneroutinecannotoverlapthelexical&Oscopeofanotherroutine.0^JOAroutinebecomescurrentorcomesintoscopebyinvok-GOingthe$ROUTINEmacrowiththe appropriate arguments.IO5$ROUTINEmarksthe beginningofthelexicalscopeofa=Oroutine.-The complementarymacro, $END_ROUTINE,GOmarkstheendofthecurrent routine'slexicalscope.1M{1O6.2.1BRoutinesandProgramSectionsJO4Routineshavethreetypesof associatedprogram sections:)2  ` HCodesection-Containsthe executable instructionsoftheN(routine.'Thissectionis typicallyreadonlyand executable. ` ADatasection-Containsdataaccessedbyaroutine.NY Typically,thisiswherevariabledataisstored.(Thissec-Jtionis typicallynon-executable, readable,and writeable. ` FLinkagesection-Containsa routine's proceduredescrip-Ftorandthe necessarylinkage informationforcallingN:other routines,andforlinkagetodatanotinthelinkageKsection,ifany.*Also,constantdatamaybeplacedhere.J Typically,thissectionisreadonlyandnot executable.3tKWThelinkagesectionis consideredatypeofdatasection)withthe following function:4pF-DProvideslinkage informationforcallsmadefroma;Y(routine associatedwiththelinkagesection.H-DProvideslinkage informationfordataoutsideoftheYlinkagesection.G-DDefinesthe associated routine's procedure descriptor;Ysothatcallscanbemadetotheroutine.1W-DDefinesconstantorstaticdata.*5Hm g9OExample6-1:7ProgramUsingSuppliedMacrosBzB$ROUTINE&MAIN,& KIND=STACK,-%;&Stack&routine%kind B1SAVED_REGS=,$-%;&Saves&FP 2SIZE=48 o;&Stack&size%is%48 3z;$LINKAGE_SECTION-o;;&Switch%to%the%linkage%psect.  ;4OX:.long&6o;&X%is%a%constantO FP1_ADDR:o;&FP1_ADDR&->&FP1z4.address&FP1z $DATA_SECTION+o;&Switch%to%the%data%section 5OA::.blkw&5o;&$DS%points%hereO-B::.blkwz $CODE_SECTION+o;&Switch%to%the%code%section 6 o;&($CS%points&here) &. n. .z$RETURN+o;&Perform%epilogue%and&return 7zg $END_ROUTINE%MAIN-og;&Mark%the&end%of%the%routine g8QH o{.OExample6-2:7ProgramUsing$CALL . _. .z $CODE_SECTION+o;&Switch%to%the%code%section o7;&($CS%points&here) . . .zWMOVR27,R2 ;W1z.basepR2,&$LS ;2 . /. w.z$CALL&SUB1*o;&Call%external%routine%SUB1 3"z$CALL&SUB2,& LOCAL=TRUE'o;&Call%local%routine%SUB2 4 O. . .z'$RETURN+o';&Perform%epilogue%and&returnzo $END_ROUTINE%MAIN-oo;&Mark%the&end%of%the%routine] XGw.=O6.4B ProgrammingExamplesUsingSuppliedMacrosDOUThe followingprogramexamplesshowhowtousetheIOcalling-standardmacrostodefinearoutine,switchcon-MOtrolbetweenpsects,generateanepilogue sequence,andendO^theroutine.I!  1>$ROUTINEdefinestheroutineMAIN.Theroutine>typeisdefinedasastackroutineusingthe kind=stackYkeyword argument. 2<ThekeywordargumentSAVED_REGS=addstheP1framepointerregistertothelistof registerssavedontheGstackbytheprologuecode.*The saved_regskeywordisNvalidonlyforstack procedures.)IfyoudonotspecifytheF;FPregister(R29)withthis argument,itisassumed. 3DThekeywordargumentSIZE=48definesthestackareaIinbytes.,ThisargumentisvalidonlyforregisterandJkstack routines./IfyoudonotspecifyastacksizeforCastackorregisterroutine,$ROUTINEcomputestheDminimumstacksizerequiredto accomodatetheother?u argumentsyouspecifyorleaveasthedefault. 4?TheLINKAGE_SECTIONmacroswitchestothelink-EMagesection.)The$LSsymbolcreatedbythe$ROUTINEMmacrocanbeusedtopointtotheaddressofthecurrentF routine'slinkagesection.($ROUTINEcreatestheproce-HWdure descriptorandleavesthecurrentlocationcounterEwithinthelinkagesectionjustbeyondthe procedure descriptor. 5EThe DATA_SECTIONmacroswitchestothedatasection.FThe$DSsymbolcreatedbythe$ROUTINEmacrocanbeN8 usedtopointtotheaddressofthecurrent routine'sdata section.  6A The CODE_SECTIONmacroswitchestothecodesec-Dh tion.)The$CSsymbolcreatedbythe$ROUTINEmacroR isusedtopointtotheaddressofthecurrent routine'scode section. 7D The$RETURNmacro generatesastandardepiloguein-F  struction sequence.,YoucanusethismacroonlywithDJ stackorregisterroutinedefinedwiththe$ROUTINE macro. " 8<" The $END_ROUTINEmacromarkstheendofthez routine. J'O6.5BUsingthe$CALLMacroNOU$CALLcallslocalorexternalroutines previouslydefinedbyCOthe$ROUTINEmacroordefinedinanother language.K JOTocallaroutineusingstandardlinkage,usethe$CALLNOmacro.'Youinvokethismacrofromwithinthe routine'scode=Oisection.'$CALLperformsthe followingactions:L r  ` NSearchesalistoflinkagepairs referencedinpreviousin-?( vocationsofthe$CALLand $LINKAGE_PAIRmacrosKwithinthecallingroutine.+IfalinkagepairisalreadyKfoundtoexistonthelist,$CALLusesthelinkagepairE2storedfromtheprevious invocation.* Otherwise,$CALLQstoresthelinkagepairofthecalledroutineinthecaller'sLlinkagesectionandaddsthelinkagepairtothecaller's<list. ` B Allocatesstackspacefor arguments,if necessary. `: F:Loads arguments specifiedwiththeARGSargumentintoGargument registersandontothestack,as appropriate. ` GSetsthe arguments information register,R25, according>ktothe arguments specifiedwithARGS argument. ` G Generatesthe following instructionsequencetoperformMCtheactualcallbasedonthelocationofthelinkagepairK generatedfromabove,andthevalueofRls,linkagereg-Pister,whichisassumedtopointtothebaseofthelinkageLsection:*$LDQ%R26,%code_addr_offset(Rls) ;&load%code%addressC$LDQ%R27,%proc_desc_addr_offset(Rls);&load% procedure a;& descriptor%address ;$JSR%R26,%R26#;&Jump%to%the&routine 9 ;Ksaving%the&return ;Kaddress&in&R26 ` H Freesargumentstackspace,ifany,andifthecalled=Y routinedoesn'treturnavalueonthestack.Mm<WLike $ROUTINE,the$CALLmacroinvokesother1macrostoperformtheabovetasks.N WMWIfyoudonotspecifytheRlsargumentinyour invocationGof$CALL,$CALLassumesthatyouhaveusedthe.BASEN directivetodefinearegisterthatpointstothebasead-Oadressofyourlinkagesection.'Thatis,itassumesthatyouDhaveincludeda statementsimilartothe following:>.BASE%R27,&$LSLO! z"GWThissource statementdefinesthebaseaddressoftheLlinkagesectiontobeR27,andtobe associatedwiththeBmacrosymbol$LS.Thissource statementshouldbeMaplacedinyoursourcecodepriortothe$CALLmacrocall.)P /O6.5.1BUsing$CALLinSourceCodeO4Example6-2'F4usesthesourcecodefrom4Example6-1, 4ex-SOceptitusesthe$CALLmacrotoshowhowtocallalocalandOexternalroutine.*POOQ*POHR  1LThe$LSsymbolisdefinedtobetheaddressofthepro-Hcedurethatisdefinedwithinthelinkagesection.,TheIYcallingroutineplacestheaddressofthe procedurede-IscriptorinR27beforemakingthecall.)This guaranteesL thattheaddress associatedwiththesymbol$LSisstoredJcinR27uponroutineentry.)Sincethe informationinR27Liserasedduringastandardcall,acopyis preservedinregisterR2. 2GRegisterR2nowcontainstheaddressofour procedureL descriptor,whichisthebaseaddressofourlinkagesec-OEtion.*Since$LSisdefinedtopointtothebaseaddressofHthelinkagesection,the assemblercomputestheoffsetsFwithinthelinkagesectionusingthe.BASE directive. u3AuThe$CALLmacrocallstheexternalroutineSUB1. 4JThe$CALLmacrocallsthelocalroutineSUB2.'Thiscall@Musesthe LOCAL=TRUEkeywordargumenttoindicate@thatroutineSUB2isdefinedwithinthemodule.HZ"O6.7BMacro DescriptionsOOUThissectionprovidesadetailed descriptionofthe followingOMACRO-64macros:G[$BEGIN_EPILOGUE.$CALL $CODE_SECTION $DATA_SECTION7 $END_EPILOGUE $END_PROLOGUE $END_ROUTINEA $LINKAGE_PAIR$LINKAGE_SECTION$OPDEFK$PROCEDURE_DESCRIPTOR$RETURN$ROUTINEE\! `O6.7.1BSyntaxRulesIO4Youmayuseeither positionalorkeywordargumentasso-NOciationora combinationofthetwowiththesemacros.*ForPO positional association,theorderofformal argumentsisshownIO=withtheformatofeachmacro.+Formore informationon%Oargument association,seeChapter4. The followingsyntaxKOrulesapplywheninvokingthe assemblerusingthecommand(OGline qualifier /NAMES=as_is:*\YmOx]! - ` FWhen specifyingmacronames,youmustuseallupper-G(caseorall lowercase characters.,Youcannotuseboth- uppercaseand lowercaseletters. ` DWhen specifyingkeyword arguments,youmustusetheJYsame alphabeticcaseasthemacronameitis associatedFwith.+Ifyouuse lowercase characterswiththemacroG name,youmustuse lowercase characterswiththekey-Icword argument.'Ifyouuse uppercase characterswiththeCmacroname,youmustuse uppercase characterswith!thekeyword argument.pq n&OTable6-1:8ARGS Arguments O OFArgumentO QualifierArgumentType_LOAD_ InstructionSTORE Instruction AIEncodingkRegArgk SignatureMemArg Signature O  OE/A*EAddressLDASTQI64I64I64 O/D D-floating_LDGSTGFDFDI64 O/F+ F-floatingGLDFSTFFFFFI64 O /G  G-cfloating_ LDGSTGFGFGI64 O/L+LongwordLLDLSTQI64I32I32 OW/Q+WQuadwordALDQSTQI64I64I64 O/S+ S-floatingQLDSSTSFSFSI64 OJ/T+J T-floatingGLDTSTTFTFTI64 O/UL 1Unsignedlongword _LDL_/ZAP_u#^xF0STQI64U32I64 O  O 1m%Unsigned32-bitintegersarenormallypassedusingthe/Largument qualifier. Therefore,Digitaldoesnot recommendthat2Ohyouusethe/ULargument qualifier. O C^O$BEGIN_EPILOGUE*_s`IIOMarksthe beginningofanepilogue instruction sequence.Sa)OFormatOs$BEGIN_EPILOGUEb! :kO DescriptionBOs$BEGIN_EPILOGUEmarksthe beginningofanepiloguePO instructionsequencethatyoucodewithinastackorregister7O$routinedefinedwiththe$ROUTINEmacro.SOAteachpointwhereastackorregisterroutinereturnstoitsOOcaller,theroutinemustperformasequenceof operationstoNOprestoreanysaved registersandtoperformstackframeman-QOagement.'Thissequenceiscalledtheepilogueandis describedO!indetailinthe$q! OpenVMSCallingStandard e!.cGOYoucanusethe$RETURNmacrotogenerateastandardNOepilogue instructionsequenceforyou,oryoucancodeyourLO5own sequence.)Ifyoucodeyourownepilogue sequence,youKOmustmarkthe beginningandendoftheepiloguesequence8Owiththe$BEGIN_EPILOGUEand $END_EPILOGUEO>macros.ONotesdz=WYoumustnotuse$BEGIN_EPILOGUEforanepi-?logue instructionsequence generatedby$RETURN.:$RETURN automaticallyinvokes$BEGIN_EPILOGUEaand$END_EPILOGUE.oe EOExamples7b$ROUTINE&MUMBLE,%KIND=REGISTER,% SAVE_FP=R1 : : ::$BEGIN_EPILOGUEMOVR1,FP%;&Restore%caller's%frameRET(R26);&Return%to%callerZ $END_EPILOGUE : : 2:z $END_ROUTINE%MUMBLE&;9fO$CALL*gZh00OIssuesacalltoanotherroutine.ti JOFormat-Os$CALLNNAME=routine-being-called-+[Rls=linkage-section-register]-)$[LS=linkage-section-address]-|[LOCAL=boolean]-![ARGS=argument-list]-)-[SET_ARG_INFO=boolean-value]-/"[STACK_RETURN_VALUE=boolean-value]-,[SCRATCH_REGS=scratch_reg-list]- 7[TIE=boolean-value]-H>[FUNC_RETURN={I64,D64,I32,U32,FF,FD,FG,FS,FT,FDC,FGC,FSC,FTC}] --A [USES_VAX_ARGLIST=boolean-value]-0#[SIGNATURE_BLOCK=signature_address]-(ONSTANDARD=boolean-value]-jqO ParametersOsNAMEOOThenameoftheroutinetocall.'Thisargumentis required.}k ]S ORlsJO(Linkagesectionregistertousewhen generatingtheLDQ,JOLDQ,JSR instruction sequence.&Thisargumentis optional.KOIfRlsisomitted,$CALLassumesthatyouhaveissuedaIOu.BASE directivepriortoinvoking$CALLthat establishesSOthevalueofabaseregisterpointingintothelinkagesection.NO&IfyouomittheRlsargumentandyoudonotissuesuchaLO~.BASE directivepriortoinvoking$CALL,the assembleris-IOsuesthe followingerrormessageduringthe$CALLmacroO/ expansion:U "Argument&2%invalid"KThe% assembler%failed&to&find%a%base&registerO  specified%with&a%previous%.BASE% directive&to&form%a%register0 D expression%of%the&form% offset(Rn)"l h OLSOO(LSistheaddressofthelinkagesection.+Ifyouuse$CALLIOwithinaroutinedefinedbythe$ROUTINEmacro,theLSJOargumentdefaultstothe$LSsymboldefinedby $ROUTINE.HO2Ifyouuse$CALLoutsideofaroutinedefinedbytheFO$ROUTINEmacro,therearetwowaysthatyoucanin-SOdicatethelocationofthelinkagesectionto$CALL.First,youMO<canspecifytheLSargumentto$CALLasa relocatablead-SOdress expressionthat indicatesthebaseofthelinkagesection.POInthiscaseyoumustalsospecifytheRls argument.(Second,QOEyoucanspecifyboththelinkage-sectionbaseregisterandtheOOlinkagesectionaddressina.BASE directivepriortoinvok-POing$CALL.Inthiscase,youmustomitboththeRlsandLSOO argumentsto$CALL.mLODigital recommendsthatyouomitthisargumentifyouuseGO$CALLwithinaroutinedefinedbythe$ROUTINEmacro.n OLOCALMO(Abooleanvalue(TRUEorFALSE)that specifieswhethertheUOroutinetobecalledislocaltothemoduleorgloballyvisible.QOBydefault,$CALL generatesacalltoagloballyvisiblerou-YO2tine.'Togenerateacalltoaroutinethatisnotgloballyvisible,)Oyoumustspecify LOCAL=TRUE.o! OARGSPO(Anoptionallistof argumentstopasstothecalledroutine.OOEnclosetheargumentlistwithinanglebrackets( <> ),andNOseparatethe argumentswithcommas( , ).)YoucanusetheNO2 following qualifierswitheachargumentyouspecifywiththeOARGS argument.Table6-1-X describesthese qualifiers.(EachHOargumentisanaddress expression(whichmayincludeaRO< register),followedbya qualifier.)ThetablealsocontainsthePOargumenttype,the instructionusedtoloadtheargumentintoQOa register,the instructionusedtostoretheargumentontheKOEstack,andthe encodingsusedintheArgument InformationNORegister(R25)inthecall signatureblockwhenyouspecifyO TIE=TRUE.Seethe$< OpenVMSCallingStandardOformoreHOO informationonthese encodings.*Notethat argumentsareROonlystoredonthestackiftherearemorethansix arguments%Oprovidedtotheroutine.*oNc?paq! 7O SET_ARG_INFOKOAnoptionalargumenttoindicatewhether$CALLshouldsetKOTtheArgument Information(AI)register(R25)withtheap-NO propriateargument informationornot.(BydefaultorifyouAOspecifySET_ARG_INFO=TRUE,$CALLstorestheappro-HO^priateargument informationinR25.*IfspecifySET_ARG_KO INFO=FALSE,$CALLdoesnotaffectR25.(Inthiscase,youOOmuststorethe appropriate informationinR25yourselfbeforeOginvoking$CALL.r! OSTACK_RETURN_VALUEOO(Anoptionalargumenttoindicatethatthecalledroutinere-NOturnsavalueonthestack.(Bydefault,$CALLassumesthatPOthecalledroutinedoesnotreturnavalueonthestack.*InNO2thiscase,$CALLremovesany argumentspassedtothecalledIOroutinefromthestackwhenthecalledroutinereturns.s POIfthecalledroutinereturnsavalueonthestack,there-JOturnedvalueisplacedataloweraddressthanthear-GOigumentsonthestack.0Inthiscase,youmustspecify;OSTACK_RETURN_VALUE=TRUEtoprevent$CALLfromNOremovingthe argumentstothecalledroutinefromthestackLOranderasingthevaluereturnedbythecalledroutine.+YouPOmustretrievethereturnvalueandremoveitfromthestack.JO#Thenyoucanremovethe argumentstothecalledroutineBO|usingthe$STACK_ARG_SIZEsymboldefinedby$CALL.t hO SCRATCH_REGSOO(Anoptionallistofscratch registersfor$CALLtousewhenLO processing argumentspassedtothecalledroutinewiththeMOARGS argument.&Ifyoupassmorethansix argumentstotheMO2calledroutine,$CALLmayneedtousescratch registerstoOprocessthecall.uNFOBydefault,$CALLusesR0,R1,F0,andF1./YoucanIOcause$CALLtouse differentscratch registerswiththe!O5 SCRATCH_REGS argument.$vNOIfyouarepassinginteger arguments,youshouldspecifyatOOleastoneinteger register.*Ifyouarepassingfloating-pointJO5 arguments,youshouldspecifyatleastonefloating-pointO register.w NMO$CALLcanprocess argumentstothecalledroutinemoreef-QO ficientlyifyouspecifytwoormorescratch registersoftheOO5typeortypes appropriatetothe argumentsyouare passsing.lxB OTIEHO(Abooleanvalue(TRUEorFALSE)that specifieswhetherGO$CALLshouldgenerateacallsequencethatiscompat-IOiblewithbothnativeroutinesandthe TranslatedImageHO2 Environment(TIE).Bydefault,$CALL generatesafasterQOcallsequencethatisonly compatiblewithnative routines.(IfFOyouspecify TIE=TRUE,$CALL generatesacallsequenceJO<thatworkswithbothnativeroutinesand translatedrou-POtines.*IfyouarecallingaVAXroutineinasharableimageKOthathasbeen translatedwiththe DECmigrateimagetrans-POElator,specify TIE=TRUE.Ifyouarecallinganativeroutine,JODigital recommendsyoudefaulttheTIEargumentorspec-EOify TIE=FALSE.While$CALL generatesacallsequenceJOOthatis compatiblewithnativeroutineswhenyouspecifyFO TIE=TRUE,thatcallsequenceisslowerthanwhenyou*Ospecifyordefault TIE=FALSE.y! pO FUNC_RETURNMO(AnoptionalargumentusedtoindicatethetypeoffunctionLOreturnwhenyoualsospecify TIE=TRUE.Notethatthisar-MOgumentisignoredunlessyoualsospecify TIE=TRUE.SpecifyNO2oneofI64,D64,I32,U32,FF,FD,FG,FS,FT,FFC,FDC,KOFGC,FSC,orFTC.Thesevalues correspondtotheRASE$K_ OFR_ *G/ signature encodings describedintable3-7intheVMSMO<Calling Standard.&IfyouspecifyTIE=TRUEanddonotspec-JOifyafunctionreturntypewith FUNC_RETURN,thedefault*OfunctionreturntypeisI64. o_UrNote o_= Specificationofthe FUNC_RETURNargumentdoesCOnotinitselfcause$ROUTINEtogenerateaproce-Edure signatureblock.)However,ifyouspecifyeither6orboththeARGLISTorUSES_VAX_ARGLIST@Y arguments,anyvalueyouspecifywiththeFUNC_BRETURNargumentisrecordedinboththe procedure<  descriptorandthe procedure signatureblock. Tz OUSES_VAX_ARGLISTMO(AnoptionalargumenttoindicatewhetherthecalledroutineLOusesaVAXargumentlist.+Notethatthisargumentisig-KOnoredunlessyoualsospecify TIE=TRUE.Bydefault,$CALLPO2assumesthecalledroutinedoesnotuseaVAXargumentlist.AOSpecifyUSES_VAX_ARGLIST=TRUEtoindicatethatthe8OcalledroutineusesaVAXargumentlist.{! OSIGNATURE_BLOCKKO(Anoptionalargumentthatyoucanusetosupplythead-QOdressofthecall signatureblock.(NotethatthisargumentisJOignoredunlessyoualsospecify TIE=TRUE.Notealsothat@O2youcannotspecifyaSIGNATURE_BLOCKargumentinDO combinationwitheitherofthe FUNC_RETURNorUSES_AO VAX_ARGLIST arguments.+Bydefault,$CALL generatesLO<acall signatureblockforyouwhenyouspecify TIE=TRUE,NOandyoucaninpartcontrolthecontentsofthat signature>Oblockwiththe FUNC_RETURNandUSES_VAX_ARGLISTHOE arguments./Ifyouwishtodefineyourowncallsigna-JOtureblock,donotspecifyeitherofthe FUNC_RETURNor@OUSES_VAX_ARGLIST argumentsandsupplytheaddressFOOofyourcall signatureblockwiththeSIGNATURE_BLOCKO argument.X| .O NONSTANDARDHO(Abooleanvalue(TRUEorFALSE)that specifieswhetherDO$CALLshouldsuppresswarningand informationalmes-FOsages concerning non-standardusage.+Bydefault,$CALLJO2issueswarningand informationalmessagestoindicateyouJOareusing$CALLinawaythatviolatestheVMSCallingHOStandardorinawaythatrequiresspecial programmingCO<considerations.(SpecifyNONSTANDARD=TRUEifyouwish(Otosuppressthese messages.}|O DescriptionJOs$CALLissuesacalltoanotherroutineandperformstheO followingactions:~ R`1.:Searchesalistoflinkagepairs referencedinpreviousin-@( vocationsofthe$CALLand $LINKAGE_PAIRmacros.MIfalinkagepairisalreadyinthelist,$CALLusestheElinkagepairfromtheprevious invocation.+ Otherwise,I2$CALLstoresthelinkagepairofthecalledroutineinHthecaller'slinkagesectionandaddsthelinkagepairHtothecaller'slist..Ifyouuse$CALLwithinarou-@<tinedefinedwiththe$ROUTINEmacro,$CALLandH $LINKAGE_PAIRresetthelistoflinkagepairsforeachroutine.E`l2.: Allocatesstackspacefor argumentsif necessary.P`3.: Generates instructionstoloadthe argumentstothecalledDroutine.O`4.:Setsthevalueintheargument information register,R25.K`C5.: Generatesthe instructionsequenceshownbelowtoper-MformtheactualcallbasedonthelocationofthelinkageIpair generatedfromStep1aboveandtheaddressspec-GLifiedor defaultedwiththeLS argument.+TheregisterI specifiedwiththeRlsargumentisassumedtopointtoMthebaseofthelinkagesectionasshowninthe followingVexample:-iLDQ&R26,%code_address_offset(Rls) ;%load%code&addressQi# LDQ&R27,%(procedure_descriptor_address_offset(Rls)p;%load% procedurek ; descriptor ;addressi JSR&R26,%R26L`z 6.:Freesargumentstackspace,ifany,andifthecalled? routinedoesnotreturnavalueonthestack.<OExamplesWm-Example17i#$CALL%SUB1,%Rls=R13,%LS=MY_LINKAGE_SECTION)ik.BASE%R13,%MY_LINKAGE_SECTIONi$CALL%SUB2:i$ROUTINE%SUB3,% KIND=STACK,%SAVED_REGS=id$LINKAGE_SECTIONi.QUAD%1 XX:i< $CODE_SECTIONiMOV&R27,%R2i$CALL%SUB4,%R2i.BASE%R2,&$LSi\$CALL%SUB5i$CALL%SUB6,%-  ARGS=,&- 4SCRATCH_REGS=i|$CALL%SUB7,%-ARGS=<1/A,2/A,3/A>i $RETURNiT $END_ROUTINE&SUB3_ \5Example2G#$CALL%FOO,&ARGS=,&STACK_RETURN_VALUE=TRUE8k;%Fetch%octaword%return&value&from%stackLDQ%R4,&0(SP);%low&quadwordLDQ%R5,&8(SP);%high%quadword;CLDA%SP,&$STACK_ARG_SIZE+16(SP)K;%RESET%STACKGAO $CODE_SECTION*yOOOSwitchescontroltothecurrent routine'scodesectionpsect.Q'OFormatOs $CODE_SECTION{O DescriptionGOs $CODE_SECTIONswitchescontroltothecurrent routine'sOcodesectionpsect.S{)OExamplesb $CODE_SECTIONGAO $DATA_SECTION*yOOOSwitchescontroltothecurrent routine'sdatasectionpsect.Q'OFormatOs $DATA_SECTION{O DescriptionGOs $DATA_SECTIONswitchescontroltothecurrent routine'sOdatasectionpsect.S)OExamples $DATA_SECTION AO $END_EPILOGUE*mCCOMarkstheendofanepilogue instruction sequence.Q'OFormatOs $END_EPILOGUEG! O DescriptionFOsYoucanusethe $END_EPILOGUEmacrotomarktheendIOofanepilogue instructionsequencethatyoucodeyour-KO$selfwithinastackorregisterroutinedefinedwiththe@O|$ROUTINEmacro..AteachpointwhereaSTACKorJOREGISTERroutinereturnstoitscaller,theroutinemustGO-performasequenceof operationstorestoreanysavedEO registersandtoperform stack-frame management.+ThisVOsequenceiscalledtheepilogueandis describedindetailinthe$O7 OpenVMSCallingStandard C7.GOYoucanusethe$RETURNmacrotogenerateastandardIO+epilogue instructionsequenceforyou.-Alternatively,youIOcancodeyourown sequence.,Ifyoucodeyourownepi-IOlogue sequence,youmustmarkthe beginningandendofBO4theepiloguesequencewiththe$BEGIN_EPILOGUEand/O $END_EPILOGUEmacros, respectively. AONotethatyoumustnotuse $END_EPILOGUEforanBOepilogue instructionsequence generatedby$RETURN.?O5$RETURNinvokes$BEGIN_EPILOGUEand $END_EPILOGUEOforyou.! FOYoumayomitthe invocationof $END_EPILOGUEifyourJOepiloguesequenceoccursattheendoftheroutine.-The:O5 $END_ROUTINEmacroinvokes $END_EPILOGUEforGOyouifyouinvokethe$BEGIN_EPILOGUEmacrowithoutaCOmatching invocationofthe $END_EPILOGUEmacro.)YouFO>mustinvoke $END_EPILOGUEwithepilogue sequencesthat4Ooccurinthemiddleofyourroutine.o EOExamples7$ROUTINE&MUMBLE,%KIND=REGISTER,% SAVE_FP=R1 : : [:$BEGIN_EPILOGUEMOVR1,FP%;&Restore%caller's%frame3RET(R26)3;&Return%to%caller{ $END_EPILOGUE :  : S: $END_ROUTINE%MUMBLEAO $END_PROLOGUE*lBBOMarkstheendofaprologue instruction sequence.Q'OFormatOs $END_PROLOGUE O DescriptionBOs $END_PROLOGUEmarkstheendofaroutineprologueJO instructionsequencethatyoucode yourself.+TheprologueOO$ instructionsequencebeginswiththefirst instructionoftheIO|routine.-Therecanonlybeoneprologue instructionse-TOquenceinaroutine.'Theprologueis describedindetailinthe$O- OpenVMSCallingStandard C-.GOYouinvoke $END_PROLOGUEafterthelast instructioninNO!theroutineprologuecode.*Thelast instructionintherou-LOztineprologueistheonethatupdatesFP(R29,theframeGOpointer)andmakestheframebecomecurrent.*YoumustMO+usethismacrowhentheroutinetypeisstackorregister=OandyouspecifySTANDARD_PROLOGUE=FALSEtotheO$ROUTINEmacro.ONotes +gEWDonotusethismacrowhenthe$ROUTINEmacrogen-IeratesastandardprologueorwhentheroutinetypeisJnullorbound.(Forexample,astandardprologueisgen-Kaeratedforyouwhenyouspecifyorleavethedefaultof5 $ROUTINE'sSTANDARD_PROLOGUEargumenttoTRUE.i?OExamplesMOVSP,&FP $END_PROLOGUE@O $END_ROUTINE*T**OMarkstheendofaroutine.e;OFormat+Os $END_ROUTINEN[name=routine-name]$! O ParametersOsnameKOThenameoftheroutinethatisended.,ThisargumentisCO$ optional.-Ifyouspecifyaname, $END_ROUTINEver-LO|ifiesthatthenamematchesthatwhichwas specifiedwithNO$ROUTINEtobegintheroutine.'Ifthenamedoesnotmatch,FO- $END_ROUTINEissuesa diagnosticmessage.)ThereisnoFOdefault.+Ifyouomitthename, $END_ROUTINEdoesnot$Overifyamatchingname.9 O DescriptionROsYoumustusethismacroattheendofaroutinethatisde-GOfinedwiththe$ROUTINEmacrotodelimittheendtheOO$currentroutineandtoperformfinalmacro processingoftheO|routine._5OExamples#i $END_ROUTINE& NAME=FOOZLE  AO $LINKAGE_PAIR*tJJOLocatesordefinesalinkagepairinthelinkagepsect.g=OFormat-Os $LINKAGE_PAIRNname, local=boolean=O ParametersOsnameLONameofthelinkagepairtodefine.+Thisargumentisre-O$quired.! oOlocalMO(Abooleanvalue(TRUEorFALSE)that specifieswhetherthePOroutineisdefinedwithinthemodulefornot.*ThedefaultisQOtostorealinkagepairforaglobalroutine.*Youmustspec-QO2ify LOCAL=TRUEtostorealinkagepairforaroutinethatis!Onotgloballyvisible.! BfO DescriptionQOsYoucaninvokethismacrotolocateordefinealinkagepairSOinthelinkagepsect.*ThelinkagepairisaddedtoalistforHO$lateruseand retrievalbythe$CALLand $LINKAGE_PAIRIO|macros.(Thus,onlythefirst invocationof $LINKAGE_PAIRTO(or$CALL)foragivenroutinetobecalledresultsinalink-HO-agepairbeingstored.' $LINKAGE_PAIRand$CALLusetheMOsamelistoflinkagepairs.'The$ROUTINEmacroresetsthisKOlist.) $LINKAGE_PAIRrestoresthecurrentpsectwhenitisO7done.HO $LINKAGE_PAIRdefinesthesymbol$LP.ThissymbolvalueQO+istheaddresswithinthelinkagesectionofthelinkagepair1Oforthe specifiedroutinetocall.O)Notes# +AWBecausethe$CALLmacroinvokesthe $LINKAGE_PAIRFmacroforyou,youdonotneedtouse $LINKAGE_PAIR@whenyouareusing$CALL.Youmaywishtouse>a $LINKAGE_PAIRwhenyouarenotusing$CALLorFwhenyourequireaspecificorderingor placementof8linkagepairswithinthelinkagesection. SOExamplesib $LINKAGE_PAIR%SUB18b;%define&linkage%pair%in%linkage&sectioniLDQ&R26,%$LPiLDQ&R27,%$LP+8i:JSR&R26,%R26sDO$LINKAGE_SECTION*Gl?O$LINKAGE_SECTIONswitchescontroltothecurrent-O. routine'slinkagesectionpsect.T*OFormatOs$LINKAGE_SECTIONO Description?Os$LINKAGE_SECTIONswitchescontroltothecurrent-O routine'slinkagesectionpsect.V,OExamples$LINKAGE_SECTION+:O$OPDEF*N$$OUsedtodefineopcodes.h>OFormat.Os$OPDEFM MNEMONIC,FORMAT,ENCODINGFO ParametersOsMNEMONIC@OMNEMONICisthemnemonicnamebywhichthein-SO$ structioniscalled.)Youmay optionallyspecifya qualifierlistWO| separatedfromthenamebyaslash( / ).)A qualifierlistisaQOsequenceofoneormorelettersordigitswithno intervening!O-spacesor separators.sAIOFORMAT9O(FORMATisoneofthe following arguments: L  OOFormat Description OOAMEMORYAStandardmemoryformat instructions.OMEMORY_FUNCTIONMemoryformatl instructionswithafunctioncode.O>JUMP>Memoryformat instructionsfor-mattedlikejumpH instructions.OBRANCHStandardbranchformat instructions.OOPERATEStandardoperate instructions.OfFLOATING_OPERATEfStandard floating-pointoperatein- structions. OPALStandardPALcode instructions.9Oc[<]CUSTOM[=operand_type_list>]Customformat. OLO WiththeCUSTOMformat,youmay optionallyspecifyalistROx ofthetypesofoperandsthe instructionistoaccept.+IfyouPO specifyalistofoperandtypes,youmustenclosetheentireDO) FORMATargumentwithinangle brackets,andyoumustOO specifytheoperandtypesintheordertheyaretobeusedLO withthe instruction.'$OPDEFsupportsthe followingoperandO3 types:= O IREGISTER3KInteger register,suchasR5orSP.O] FREGISTER2K]Floating-point register,suchasF7.OLITERAL7KIntegerliteral,suchas#123or32767.OPINDIRECT5KPIndirectintegerregisternotationsuchKas(R7).CO" DISPLACEMENTaIndirectintegerregisternotationwith7K{anintegerliteral displacement,suchasK FOO(R12).OMBRANCH_OOFFSET8KMLabeloraddress expression,suchasL1.q!GOForexample:0O&FORMAT=LOForadetailed descriptionof instructionformats,seethe0O Alpha Architecture ReferenceManual .j K@OENCODINGEO(ENCODINGisthenumericencodingforthe instructionVOopcode.'Thedefaultradixisdecimal,asisthecaseforallas-NOsembler constants.(Prefixthevaluewith^Xfor hexidecimal.EO2Certain instructionformatsallow multi-part encoding:  OOFormat3Encoding Description O@OAMEMORY_FUNCTIONYSpecifythebaseopcode,followed23byadot,followedbythefunction3code.'Forexample:3ENCODING=^X10.F000OJUMP*3Specifythebaseopcode,op-.3Ztionallyfollowedbyadot,and+3the hardware-hintbitsoption-.3 allyfollowedbyadotandthe-3c software-hintbits.&Forexample:3ENCODING=^X1A.2.1OsOPERATE/3sSpecifythebaseopcode,followed23byadot,followedbythefunction3$code.'Forexample:3ENCODING=^X12.3C 3exAOFLOATING_OPERATESpecifythebaseopcode,followed23byadot,followedbythefunction3=code.'Forexample:3ENCODING=^X17.02B OL PAL13L Specifythebaseopcode, optionally23 followedbyadotandthefunction/3 code.)Omitthefunctioncodefor,3U agenericPAL instructionthat)3 acceptsaninteger-expression"3  argument.&Forexample:3 ENCODING=^X0.00803  ENCODING=^X19On CUSTOM+3n Specifyacomma-separatedlist13 ofbitrangesandvaluestoplace03 inthosebitranges.'Forexample:53 ENCODING%=%<& 26:31=^X14,& 21:25=%OP1,&-,f16:20=%OP2.REG,%0:15=%OP2.DISP%> O"DOForCUSTOMformat instructions,specifytheENCODINGMOargumentasacomma separatedlistofbitrangesandval-TO5uestoplaceinthosebitranges.)EnclosethelistwithinangleO brackets.| RQOSpecifyabitrangeas start:endwherestartandendarein-OOtegerconstant expressions.*Fora1-bitbitrange,startandNO5endareequal.+Bit positionsrangefrom0to31.+PlaceanTOequalsign( = )afterthebitrange specifierfollowedbytheUOvalueyouwishtoputinthebitrange.'YoucanplaceeitheraPO>constantinteger expressionoranoperandintothebitrange.KOStartandend expressionsandintegerconstant expressionsMOmustnot referenceanyexternalsymbolsorsymbolsnotyetLOHdefinedinthe assembly.'$OPDEF evaluatesthese expressionsSOatthetimethatitdefinesthe instructionasopposedtowhen4Othedefined instructionis referenced. NMOOperandnamesareoftheform%OPn,wherenistheordi-SOnalnumberoftheoperandas specifiedfromlefttorightwith O5theFORMAT argument.N?OFor IREGISTER, FREGISTER,andINDIRECT operands,MO$OPDEFplacesthe5-bitregisternumberintothebitposi-O5tionsyouspecify. eJOForLITERAL operands,$OPDEFplacestheliteralvalueofROtheoperandintothebit positionsyouspecify.(OperandliteralTO5valuescanbeupto32-bitslong.&Themost significantbitsareRO truncatedifthesizeoftheoperandliteralvalueexceedsthe#Obitrangeyouspecify.! aDOFor DISPLACEMENT operands,$OPDEFdefinestwoparts:LOa5-bitregisternumberanda displacementvaluethatcanRO5beupto32-bitslong.'Themost significantbitsare truncatedNOfromthe displacementvalueifthesizeofthe displacementMOvalueexceedsthebitrangeyouspecify.*Youcan referenceNO>theregisternumberbyplacing.REGaftertheoperandname.HOForexample:* %OP2.REG. Similarly,youcan referencetheMO displacementvaluebyplacing.DISPaftertheoperandname.#OHForexample:& %OP2.DISP. aDOFor BRANCH_OFFSET operands,$OPDEFstoresthesignedPOlongwordoffsetbetweenthenext instructionandthe specifiedPO5addressinthebit positionsyouspecify.(Theaddressexpres-EOsion specifiedfora BRANCH_OFFSEToperandcanbeaNObackwardorforward referencetoalocationwithinthecur-RO>rentpsect.(ItcannotbeanexternaladdressoranaddressinTOa differentpsect.(The resultingoffsetcanbeupto32-bitsinXOsize.(Ifthesizeoftheoffsetexceedsthebitrangeyouspecify,7OHthemost significantbitsare truncated.[KO$OPDEFfillsanybit positionsyouleave unspecifiedwithOzeros. aO DescriptionLOsThe$OPDEFmacrocanbeusedtodefineyourownopcodes.+ MO$OPDEFdefinesamacrousingan unqualifiedversionoftheGOmnemonicnameyouspecify.*WhenthismacroisinvokedQO5withthe instruction qualifiersyouspecifywhenyoudefineitMOwith$OPDEF(ifany),itexpandstothe instructionrepre-LO sentationyouhavedefinedwith$OPDEF.NotethatyoucanQO>specifythe qualfiersinanyorderaslongasthe combination2Oof qualifiersyouuseisthesame.! GOOtherusesofthemnemonicnameremainvaildprovidedDOyoudonotusethemnemonicnameasamacronameMO5ina.MACRO directive.)For instance,youcanusethesamePOmnemonicnameintheopcodefieldwith differentornoqual-UOifiers.'Ifthe qualifiers(orabsencethereof)donotmatchthoseKO> specifiedinyour$OPDEF instruction definition,themacroLOdefinedby$OPDEF processesasthoughyouhadnotdefinedNOan instructionbythatmnemonicname.(Todoso,itexpandsROHtoasingle statement.'This expansion statementis identicaltoGOthe mnemonic-namemacro invocation statement,exceptitKOis processedinacontextthatpreventsthe mnemonic-nameLORmacrofrom expanding recursively.(Instead,the statementisJO processedasanormal,MACRO-64 instruction statement.'InKOthiscase,youmaynotice referencestothe mnemonic-nameFO[macro expansionina MACAUXMSG diagnosticmessage,if8Othe instruction statementcontainserrors. aGOFor instance, ifyoudefineaSTQ/P instructionusingLO$OPDEF,youcanstillusetheSTQ instructionwithouttheNO5/P qualifier.*Ifyoudo,andyourSTQ instruction statementGOcontainsanerror,the assembler generatesa MACAUXMSGJOmessage indicatingthattheerroroccuredduringtheex-JO>pansionofmacroSTQ.AsidefromthefactthattheSTQSO instructionis processedinthecontextofthe expansionoftheHOSTQmacro,$OPDEF's definitionoftheSTQ/P instructionDOHhasnoeffectonyouruseoftheSTQ instruction.]OExamples0b$OPDEF%MNEMONIC=BANG,% FORMAT=PAL,%-ENCODING=^X0.0099 ;O.PACKED*\22OPackeddecimalstringstoragemacro.d:OFormat*Os.PACKEDMdecimal-string[,symbol]=O ParametersOsdecimal-stringOOAdecimalnumberfrom0to31digitslongwithanoptional;O$sign.'Digitscanbeintherange0to9.OsymbolLO(Anoptionalsymbolthatisassignedavalue equivalenttoPOthenumberofdecimaldigitsinthestring.+Thesignisnot Ocountedasadigit. O DescriptionMOs.PACKED generatespackeddecimaldata,twodigitsperbyte.OOPackeddecimaldataisusefulin calculations requiringexactRO$ accuracy.'Itisoperatedonbythedecimalstring instructions.POApackeddecimalstringisa contiguoussequenceofbytesinOOmemory.+Itis specifiedbytwo attributes:+theaddressAofVOpthefirstbyteandalengthL,whichisthenumberofdigitsinUOthestringandnotthelengthofthestringinbytes.(ThebytesQO!ofapackeddecimalstringaredividedintotwo,4-bitfieldsROz (nibbles).+Eachnibbleexceptthelownibble(bits3:0)oftheLOlast(highest-addressed)bytemustcontainadecimaldigit.NO+Thelownibbleofthehighest-addressedbytemustcontainaTOsign.'Therepresentationforthedigitsandsignis indicatedasOfollows:? OODigitorO+SignDecimalv+ Hexadecimal OF O0 O1 O?2 O3 O4 OI5 O6 O7 OS8 O9 O+ O\- z0 z1 z?2 z3 z4 zI5 z6 z7 zS8 z9z 10,12,14,or15z\11or13 v0 v1 v?2 v3 v4 vI5 v6 v7 vS8 v9vA,C,E,orFv\BorD Ox(! aSOThe preferredsignrepresentationis12forplus( + )and13TOforminus( - ).*ThelengthListhenumberofdigitsintheKO5packeddecimalstring(notcountingthesign);LmustbeROintherange0to31.)Whenthenumberofdigitsisodd,theTOdigitsandthesignfitintoastringofbyteswhoselengthis0O>definedbythe following equation:(> L/2(integerpartonly)+1 >.SOWhenthenumberofdigitsiseven,itisrequiredthatanex-YOtrazeroappearinthehighnubble(bits7:4)ofthefirstbyteofWOHthestring.'Again,thelengthinbytesofthestringisL/2+1.N! $QOTheaddressAofthestring specifiesthebyteofthestringRO containingthemost-significantdigitinitshighnibble.'DigitsPO5of decreasing significanceareassignedto increasingbytead-SOdressesandfromhighnibbletolownibblewithinabyte.'ThusIO+123hasalengthof3andis representedasfollows:Ok74%30O+-----+------+O|K1K|p2J|J:AOB+-----+------+O|K3K|K12J|J:A+1O+-----+------+-KOThepackeddecimalnumber-12hasalengthof2andis#O representedasfollows:Oa74%30O+-----+------+O|K0K|p1J|J:AO9+-----+------+O|K2K|K13J|J:A+1O+-----+------+ SOExamples#b.PACKED&-12,PACKED_SIZED,b;% PACKED_SIZE%gets%value%of%2.PACKED&+500.PACKED&0:.PACKED& -0,SUM_SIZE):;%SUM_SIZE%gets%value%of%1IIO$PROCEDURE_DESCRIPTOR* AeOODefinesa procedure descriptor structureatthecurrentpsectO(andoffset.Y/OFormatOs$PROCEDURE_DESCRIPTOR!O Description9OsThe argumentsforthe$PROCEDURE_DESCRIPTOREOmacroarethesameasthe$ROUTINEmacro,withthe O$ following exceptions: ` -TheENTRYargumentis required. `( 9(Thereareno CODE_SECTION,LINKAGE_SECTION,2 DATA_SECTION,DATA_SECTION_POINTER,or'STANDARD_PROLOGUE arguments. `X <XThereisan additional END_PROLOGUE argument.HThisargumentmustbealabelthatyoudefineattheJ endofthe routine'sprologue sequence.(Thisargumentis@brequiredforstackandregister proceduretypes.ONotesX .LWBecausethe$ROUTINEmacroinvokesthe$PROCEDURE_DESCRIPTORSmacroforyou,youdonotneedtousethe$PROCEDURE_DESCRIPTORAmacroifyouuse $ROUTINE.-Youmaywishtouse;a$PROCEDURE_DESCRIPTORwhenyouarenotusing $ROUTINE.,xOExamples$i$PROCEDURE_DESCRIPTOR&p1, -  KIND=NULL, - ENTRY=p1_entry;O$RETURN*lBBO Generatesastandardepilogue instruction sequence.K!OFormatOs$RETURN DO DescriptionGOs Generatesastandardepilogue instructionsequencewhenKOusedwithinastackorregisterroutinedefinedwiththe>O$$ROUTINEmacro.0Theepiloguesequence generatedHO|by$RETURNrestoresany registersyouspecifywiththeBO SAVED_REGSargumentto$ROUTINEandperformsstackCO-frame managementas necessary.*Youcanuse$RETURNCOwhetheryouspecifyordefaultSTANDARD_PROLOGUEasOTRUEornot.JOzYoucanuse$RETURNanynumberoftimeswithinagivenOOstackorregisterroutinetoaffectareturntothecallingO+routine. FOYoumustnotusethe$BEGIN_EPILOGUEor $END_EPILOGUEFOmacrosforanepiloguesequence generatedby$RETURN.?O5$RETURNinvokes$BEGIN_EPILOGUEand $END_EPILOGUEOforyou.OExamples7$ROUTINE%FOOZLE,&KIND=REGISTER,& SAVE_FP=R1 i: i: i[:$RETURN $END_ROUTINE%FOOZLEeR((OFigureA-1:8Data Structures3eO eKK8??xp~787x~?8?s?q8?Ν>98Ïx98p98qp98qyq<Ν?|??x;xx``3ac f gx~;flff fflff͌fflfffflff ffflgfg>ff`?q0 H9@HI< HI H1 0@@@@@@@>@p@@@@@@q e5b@@" @!ITMp$ @8ATEH@'@@$A$ET@$@@$I$E@$A @Xq$eEpb#@H @@@@@@@@@@@@@@@P @00@0@PxN086" @7(Q IJ4A59 @.PQ JA51ї@)PQ$ JA21@)QQ$IJA29 @pN2A26 @@@@@@@>>c37ۆ Ywy a a c^37ی p3 q` 9I<I1`@@@@@@@>@q@@@H@@q6 bH@" @!I&T%Oq$ @8A"T%FHH'@@$A"$%FTH$@@$I"$%GH$A @Xq"$Fqb#HH @@@@@@@@@@@@@@@P@0P@ P@PyN 18V" @7HR! JT4A5Y @NPQ! TA5Qї@IPQ! D TA2Q@IRQ! DJTA2Y @qN 5A2V @@@@@@@>>c3c7ۆ 8 p 󙙙c cٝ>37ی p3 ` c0ȀH 0`d@H HH` gxH0@@@@@@@@"bu5" @x$%N @H%F@ T%F@"$%F @"b#aE @@@@@@@@@> f gx~; flff fflff ͌fflff fflff ffflgf g>ff` a @ `)a a(A$A"A a @ `@@@@@@@(@@@@@@$)QA@@8NBA@@@@@@@@@@@@@8@>@@D @@@ ӌBq BB@8SS4I IB@@ QHB8A/@D PQHB$A>@D SHB$IA@8BXqBA@@@@@@@ > 3 f a3= l=6 <~;a3gf;flffa3f lf3`lffi3f l~3|lffy3f l3flff3;fflf;fflgf~6nf< l=6>ff03a `aa `@@@@@@@@@j7," @Jd" @z'"@ "@J$" @6,# @ @@@@@@@@@@@@@8@@D@@ܰFA" @84) @@O@ї@D)A@@D)I@ @8ٰF@ @@p@@@@@00cffmxdž1afg晿̇13affƶ3́10affƶ1π1>affƶ113aff̀3ۙcƆaaǀn`a `aa `@@@@@@@8@D@57Q" @8MJY2 @@Ez@DE Q@DEJY @8E6 @@@@@@@:eVk,,OFigureA-2:8 InstructionFormatsdO+dKK(88{ws<~8s~8?8sss;88qp98qp89qp89qp898qps8s98w|89w!DQ!" fA!EY!" xXA8s"                  ? k2<O$ROUTINE*A^LODefinesthecurrentroutineandcreatesacontextfortheO(routine.i E ?OFormat)Os$ROUTINEM NAME=routinename-! ALIASES=aliasnames-!$ LOCAL=booleanvalue-*|STANDARD_PROLOGUE=booleanvalue% ENTRY=codeentrypoint-4-CODE_SECTION=codesectionpsectname-4DATA_SECTION=datasectionpsectname-0DATA_SECTION_POINTER=booleanvalue-77LINKAGE_SECTION=linkagesectionpsectname - KIND=routinetype-/AHANDLER_REINVOKABLE=booleanvalue-(BASE_REG_IS_FP=booleanvalue-&REI_RETURN=booleanvalue-.JSTACK_RETURN_VALUE=booleanvalue-&RSA_OFFSET=integervalue-' SAVE_FP=FPregistername-4TSAVE_RA=returnaddressregistername-  SIZE=numericvalue-+SAVED_REGS=listof registers-0^HANDLER=exceptionhandleraddress-4HANDLER_DATA=dataaddressfor exception handler-*g SYNCH_EXCEPTIONS=booleanvalue-( PROC_VALUE=procedurevalue-+ ENVIRONMENT=environmentvalue-/q FUNC_RETURN=functionreturntype-) ARGLIST=Argumenttypelist-," USES_VAX_ARGLIST=booleanvalue-8{ OVERRIDE_FLAGS=procedure descriptorflags-- DEFAULT_SIGNATURE=booleanvalue-), COMMON_BASE=listof registersO ParametersOsNAMENOThenameoftheroutine.*ThisargumentisrequiredforallCO$ procedurekinds.'Thereisnodefault.'Forexample:O NAME=FOOZLE OALIASESRO(Listofaliasnamesfortheroutine.'ThisargumentisoptionalMOforall proceduretypes.'Thereisnodefault.'Forexample:@O6ALIASES=2 wOLOCALNO(Booleanvalue indicatingwhethertheroutineislocal(TRUE)NOor externallyvisible(FALSE).ThisargumentisoptionalforIOall procedurekinds.'ThedefaultisFALSE.Forexample:O^ LOCAL=TRUE\ 2OSTANDARD_PROLOGUEGO( Specifiesabooleanvaluetoindicatewhether$ROUTINEMOshouldgeneratea standard, instructionprologuesequenceatPOthe beginningofthe routine'scodesection.(ThisargumentisHO2optionalandvalidonlywithREGISTERandSTACKproce-TOdures.)Ifthe proceduretypeisstackorregister,thedefaultHOisTRUEand$ROUTINE generatesastandardprologuese-CO<quence.,Theprologuesequence generatedby$ROUTINEKOsavesthe registersyouspecifywiththe SAVED_REGSargu-FOmentandperforms stack-frame managementas necessary.COIfyoualsospecifyBASE_REG_IS_FP=FALSE,thestan-EOdardprologuesequence generatedby$ROUTINEmakesaPO9copyofthe procedure descriptoraddressthatisinR27uponIOentryintoR29(FP).WhileyoucannotchangethevalueNOinR29priortothe epilogue,youcanuseR29asawork-LOCing,linkage-section register.'Ifyouspecifythe STANDARD_DOPROLOGUEargumentasFALSE,youmustcodeyourownJOprologuesequenceandmarktheendoftheprologuewithDOLthe $END_PROLOGUEmacro.(Whetheryouspecifyorde-@OfaultSTANDARD_PROLOGUEasTRUEornot,youcanNOgenerateastandardepiloguesequenceforstackandregister?OV procedureswiththe$RETURNmacro.'Forexample:!OSTANDARD_PROLOGUE=FALSE ]OENTRYOO(Thenameofthe code-entrypoint.'ThisargumentisthecodeMO entry-pointlabelthat$ROUTINEdefinesforyouatthebe-QOginningofthecodesectionfortheroutine.)IfthisargumentEO2isomitted,$ROUTINE generatesalabel.&Forexample:OENTRY=FOOZLE_ENTRY! 2O CODE_SECTIONOO(Thepsectnameand attributesofthecodesection.)Thisar-NOgumentisoptionalforall procedurekinds.+Ifomitted,theKOdefaultisthenameand attributesdefinedbythe$CODE$NO2lexicalstringsymbol.*Ifyouspecifyanameand attributes@Oforthe CODE_SECTION argument,$ROUTINE redefinesPOthe$CODE$lexicalstringsymbolsuchthatthe specifiedval-NO<uesbecomethenewdefault.( Initially,$CODE$isdefinedasOfollows:EO$CODE$%=%0"$CODE$,OCTA,PIC,CON,REL,LCL,SHR,EXE,NORD,NOWRT"jKOSinceyoumustdelimitthepsectnameand attributesus-LOingcommas,besuretoenclosethisargumentwithinangleKO5bracketstoavoidhavingthe assembler interpretthenameGOand attributesas different argumentsto $ROUTINE.ForOexample:/Ok%CODE_SECTION= 2O DATA_SECTIONOO(Thepsectnameand attributesofthedatasection.)Thisar-NOgumentisoptionalforall procedurekinds.+Ifomitted,theKOdefaultisthenameand attributesdefinedbythe$DATA$NO2lexicalstringsymbol.*Ifyouspecifyanameand attributes@Oforthe DATA_SECTION argument,$ROUTINE redefinesPOthe$DATA$lexicalstringsymbolsuchthatthe specifiedval-NO<uesbecomethenewdefault.) Initially,$DATA$isdefinedasOfollows:GO$DATA$%=%2"$DATA$,OCTA,NOPIC,CON,REL,LCL,NOSHR,NOEXE,RD,WRT"mKOSinceyoumustdelimitthepsectnameand attributesus-LOingcommas,besuretoenclosethisargumentwithinangleKO5bracketstoavoidhavingthe assembler interpretthenameGOand attributesas different argumentsto $ROUTINE.ForOexample:2Ok(DATA_SECTION= zODATA_SECTION_POINTERIO(Booleanvalue indicatingwhether$ROUTINEshouldstoreaQOpointertothedatasectioninthelinkagesectionanddefineQO$DPastheaddressofthatpointer.'ThisargumentisoptionalNO2forall procedurekinds.&ThedefaultisFALSE.Forexample:#ODATA_SECTION_POINTER=TRUE @OYoucanusetheDATA_SECTION_POINTERargumentasOfollows:8a$routine% TALLY_HO,%data_section_pointer=TRUE $data_sectionTALLY:K.quad%09 $code_section.baseR27,&$LS.$;%Inform% assembler&that%R27->$LS LDQR1,%$DP$;%R1->$DS.base%R1,$DS*$;Inform% assembler%that%R1-$DS YLDQYR0,%TALLY$Y;% R0<-TALLY LDAR0,%1(R0)$;%R0<-R0++ STQR0,%TALLY$;% TALLY<-R0 0RET0(R26)$0;%Return x $end_routine%TALLY_HO* AOInthisexample,theDATA_SECTION_POINTERargumentUOis specifiedinordertoobtainlinkagetothedatasection.'TheOO5firstLDQ instructionloadsR1withthepointertothedataJOsectionthat$ROUTINEstoresinthelinkagesection.+TheJOnextthree instructions incrementthevalueintheTALLYQO>variableinthedatasection.)Finally,theroutinereturnsthe6O incrementedvaluetoitscallerinR0.f 2OLINKAGE_SECTIONMO(Thepsectnameand attributesofthelinkagesection.+ThisPOargumentisoptionalforall procedurekinds.)Ifomitted,theKOdefaultisthenameand attributesdefinedbythe$LINK$SO2lexicalstringsymbol.'Ifyouspecifyanameand attributesfor>OtheLINKAGE_SECTION argument,$ROUTINE redefinesPOthe$LINK$lexicalstringsymbolsuchthatthe specifiedval-NO<uesbecomethenewdefault.) Initially,$LINK$isdefinedasOfollows:IO$LINK$%=%4"$LINK$,OCTA,NOPIC,CON,REL,LCL,NOSHR,NOEXE,RD,NOWRT"rKOSinceyoumustdelimitthepsectnameand attributesus-LOingcommas,besuretoenclosethisargumentwithinangleKO5bracketstoavoidhavingthe assembler interpretthenameGOand attributesas different argumentsto $ROUTINE.ForOexample:7Ok-LINKAGE_SECTION=;OKINDQO( Specifiesthekindofroutinebeingdefined.(ThismustbeoneCOofthe following:*STACK, REGISTER,NULL,orBOUND.IOThisisanoptional argument.-ThedefaultisNULL.ForO2example:O KIND=STACKJ OHANDLER_REINVOKABLEMO( Specifiesabooleanvaluetoindicatewhetherthe conditionJOhandlercanbe re-invoked.*ThisargumentisoptionalandGOvalidonlywithSTACKandREGISTER procedures.*Itde-NO2faultstoFALSEifnovalueis specifiedandthe procedureDOkindisSTACKor REGISTER.NotethatthisargumentOOisonlyvalidifavalueisalso specifiedfortheHANDLER"O< argument.'Forexample:"OHANDLER_REINVOKABLE=TRUE[! 1OBASE_REG_IS_FPLO( SpecifiesabooleanvaluetoindicatewhetherregisterR29LO(FP)isusedasthe frame-pointerbaseregister(TRUE)orQOnot(FALSE).If specifiedasFALSE,R29mustbeusedtoholdRO2theaddressofthe procedure descriptor(ortheaddressofthe@Oaddressofthe proceduredescriptor-refertothe! OpenVMSO CallingStandard;.(ThusyoumayuseR29toholdaworkingNO<copyofthelinkage-sectionaddresspassedinR27.)Inaddi-OOtion,yourprologueandepilogue instruction sequencescanbeJOshorterandmore efficient.*However,youcannotnotmakeMOEstandardcallstootherroutinesifBASE_REG_IS_FPisspec-QOifiedasFALSE.ThisargumentisoptionalandvalidonlywithMOstackandregister procedurekinds.*ItdefaultstoTRUEifGOOthe proceduretypeisstackor register.'Forexample:OBASE_REG_IS_FP=FALSE )O REI_RETURNQO( Specifiesabooleanvaluetoindicatewhetherthisroutinere-KOturnsusinganREI instruction.+ThisargumentisoptionalDOandvalidonlywithSTACK, REGISTER,andNULLpro-OO2cedurekinds.*ItdefaultstoFALSEifthe procedurekindis5OSTACK, REGISTER,orNULL.Forexample:OREI_RETURN=TRUE)OSTACK_RETURN_VALUEJO( Specifiesabooleanvalue indicatingwhetherthisroutineJOhasastackreturnvalue.,ThisargumentisoptionalandDOvalidonlywithSTACK, REGISTER,andNULL procedureOO2kinds.)ItdefaultstoFALSEifthe procedurekindisSTACK,,OREGISTERorNULL.Forexample:!OSTACK_RETURN_VALUE=TRUE O RSA_OFFSETRO(Anintegervalue specifyingthestackoffset(inbytes)oftheOOregistersavearea.)ThisargumentisoptionalandvalidonlyGOforSTACK procedures.(IfyouspecifyBASE_REG_IS_FPasIO2TRUE,thevalueyouspecifywith RSA_OFFSETmustbeatHOleast8.( RSA_OFFSETdefaultsto8ifBASE_REG_IS_FPisV ,OHANDLERQO(Theaddressofan exceptionhandler.)ItisoptionalandvalidJOonlyforSTACKandREGISTER procedurekinds.'Bydefault,MOthe procedureisdefinednottohavean exceptionhandler.O2Forexample:OHANDLER=MY_HANDLER)O HANDLER_DATAOO(Theaddressofdataforthe specifiedhandler,ifany.,ThisMOargumentisoptionalandvalidonlyforstackandregisterMO procedurekindsandhasnodefaultvalue.(Youcannotspec-HO2ifya HANDLER_DATAargumentifyoudonotspecifythe+OHANDLER argument.'Forexample:&OHANDLER_DATA=MY_HANDLER_DATA! hOSYNCH_EXCEPTIONSIO(Anargumenttoindicatewhether exceptionsmustbesyn-LOcronizedornot.(ThisargumentisoptionalwithSTACKandKOREGISTERroutinesandisnotallowedwithotherkindsofMO2 routines.)ThisargumentdefaultstoTRUEifyouspecifyanGO exceptionhandlerwiththeHANDLER argument.' Otherwise,GOitdefaultstoFALSE.WhenthisargumentisTRUEand.  )~OUSES_VAX_ARGLISTIO( Specifiesabooleanvalue indicatingwhethertheroutineJOusesaVAXargumentlist.,ThisargumentisoptionalforLOall procedurekindsanddefaultstoFALSE.IfyouspecifyGO2this argument,$ROUTINE generatesa procedure signatureOblock.'Forexample:OUSES_VAX_ARGLIST=TRUE  OOVERRIDE_FLAGSIO( Specifies overridingflagsforthe PDSC$W_FLAGSfieldinOOthe procedure descriptor.'ThisargumentisoptionalandvalidMOforall procedurekinds.)However,itisrequiredforBOUNDGO2 procedureswhenthe parameter specifiedwiththePROC_DOVALUEargumentisanexternalorforward reference.0OThereisnodefault.'Forexample:%OhOVERRIDE_FLAGS=PARENT_FLAGS  2^ODEFAULT_SIGNATUREIO( Specifiesabooleanvaluetoindicatewhetherthestan-JOdard procedure signatureisused.*TRUEmeanstousetheNOstandard signature.,Itisoptionalandvalidforallproce-NO2durekinds.+ThedefaultisFALSEifyouspecifyeitherthe?OARGLISTorUSES_VAX_ARGLIST arguments.( Otherwise,GOthedefaultisTRUE.NotethatthisargumentmustbeMO<FALSEorblankifyouspecifyeithertheARGLISTorUSES_!O VAX_ARGLIST arguments. ODEFAULT_SIGNATURE=TRUE ! O COMMON_BASEIO(Anargumenttospecifyoneormorebase registersthatKOareusedincommonwithother routines.)ThisargumentisMOoptionalforallroutinekinds.(Bydefault,$ROUTINEinval-MO2idatesanyprevious.BASE directivesthatmaybeineffectKOwhenyouinvoke $ROUTINE.Inthisway,youare preventedLOfrom inadvertently processingthesecondor subsequentrou-PO<tinesinamodulewith.BASE directivesineffectthatapplyNOonlytoapreviousroutine.)However,youmaywishtoshareGOacommonbaseregister assignmentbetweenanumberofOOE routines.(Todoso,youcouldre-issuethe appropriate.BASEKO directiveor directivesaftereach invocationof $ROUTINE.NOAlternatively,youcanspecifyoneormorecommonbasereg-DOOisterswiththe COMMON_BASE argument,andissuetheQO appropriate.BASE directiveor directivesonlyonceatthebe-KOginningofthemodule.'SpecifythevaluefortheCOMMON_MOYBASEargumentasalistofinteger registers.'Forexample:OCOMMON_BASE= NIOInthisexample,$ROUTINE invalidatesanyprevious.BASELO directivesexceptthosefor registersR5andR13.+PreviousKO5.BASE directivesfor registersR5andR13are unaffected.O DescriptionKOs$ROUTINEdefinesaroutine,makesitthecurrentroutine,1Oandperformsthe followingactions: p ` MCreatesand associatesalinkagesection,codesection,and,(datasectionwiththeroutine. ` EDefinesa procedure descriptorandoptional signatureIblockin accordancewiththevaluesofmacro arguments. ` M Optionallystoresapointertothedatasectionwithinthelinkagesection. `W BWCreatesthe followingnumericandlexicalsymbols:!  SymbolD Description  A$CS9DAAddressofstartofthecurrent routine'sDcodesection. $DS9DAddressofstartofthecurrent routine'sDldatasection. $DP4DOptionaladdressofapointertothe2D>current routine'sdatasection.-This6Dsymbolhasavaluethatisanaddress7Dinthecurrent routine'slinkagesection.DHatwhichthe$ROUTINEmacrohas6DplacedtheaddressofthedatasectionD($DS)asfollows:D$DP&=%.D.ADDRESS%$DS.a$DPenablesa programmertoac-1cessthedataareaofthecurrent/routinefromitslinkagesection. $LS7DAddressofthecurrent routine'slinkageDsection.^$SIZE5D^Sizeoffixedareaofstackframeof2Dthecurrentroutine.-Thissymbolis1D validonlywithSTACKandREGISTERDg  routines. $RSA_: OFFSET6D Theoffsetwithinthefixedstackarea:D: totheregistersavearea.'Thissymbolis-D validonlywithSTACK routines.D $RSA_ENDTheoffsetwithinthefixedstackareato:De thethefirstbytebeyondtheendofthe*D registersavearea(ifany).7 $CODE$8D7 Alexicalstringsymbolthatdefinesthe8D  routine'scodepsectnameand attributes. $DATA$6D Alexicalsymbolthatdefinestherou-5Db tine'sdatapsectnameand attributes. $LINK$3D Alexicalstringsymbolthatdefines3D4the routine'slinkagepsectnameandD attributes.  `- D- Optionally generatesa standard, instructionprologue?sequenceatthe beginningofthecodesection.7  FWIfyouspecify /NAMES=AS_ISonthecommandline,allKbutthelastthreeofthesesymbolsaredefinedinbothEcomplete uppercaseandcomplete lowercase.'Thesesym-GabolsareintendedforyouruseoutsideofthemacrosE themselves.+Forexample,thevaluesofthesenumericEsymbolsmaybeusefulasamnemonicwhencodinganJk instructionwitharegisterasinthe followingexample:ldap SP,-$SIZE(SP) +CWThelastthreesymbols,$CODE$,$DATA$,and$LINK$Fareonlydefinedin uppercase.-TheyareusedbytheH$ROUTINEmacroforthedefaultcode,data,andlinkageJasectionpsectnamesand attributes.(YoucandefinetheseIsymbolspriortoinvoking$ROUTINEtoalterthedefault)programsectionsasfollows:o =-D$CODE$=%"MY_CODE,EXE,OCTA,SHR,NORD,NOWRT,GBL"=U-D$DATA$=%"MY_DATA,NOEXE,OCTA,NOSHR,RD,WRT,GBL"=-D$LINK$=%"MY_LINK,NOEXE,OCTA,SHR,RD,NOWRT,GBL"+pAWThese statementscause$ROUTINEtousetheaboveEpsectnamesand attributesbydefault..Ifyouspec-=ifyanyofthe CODE_SECTION, DATA_SECTION,or:aLINKAGE_SECTION argumentsinyour invocation>of $ROUTINE,$ROUTINEusesthepsectnameand5 attributes specifiedwiththe argument.S)>WIn addition,$ROUTINE redefinesthe correspond-<ing$CODE$, $DATA$,or$LINK$lexicalstringBsymboltothevalueyouspecifywhenyouspecify8aanyofthe CODE_SECTION, DATA_SECTION,or5LINKAGE_SECTION argumentswith $ROUTINE.OExamples%$ROUTINE&MAIN1,% KIND=NULL$ROUTINE&MAIN1, -4 KIND=STACK, 4-|SIZE=48, |-SAVED_REGS=FOTableA-1:8RegisterUsage ConventionsforOpenVMSAXP O OFForOpenVMS: OR0Intfuncretvalue OR1Scratch4  O  OR2-R15SavedO5R16-R215ArgumentOrR22-R24rScratch(OR25AIArgument information"OR26RAReturnaddress#O)R27PV Procedurevalue OfR28fVolatilescratch%OR29FPStackframebase!OR30SPStackpointer OR31Zero OYF0#YF-Pfunctionretvalue OF1(F-PcomplexfuncretvalueOF2-F9Saved4!  O "OF10-F15ScratchO5F16-F225ArgumentOrF23-F30rScratch OF31Zero O % 7O A.#MACRO-64#Alpha"AXP" Architecture#QuickOr ReferenceLOThisappendixprovidesfiguresandtablesshowingthedataKOOtypesand addressing capabilitiesoftheAlphaAXParchi-:#Odispr Displacementfield'OfncPALcodefunctionfield:OfaTheoperandisusedinanaddress calculationtoforman effectiveaddress.Thedatatypecodethatfollows indicates,theunitsofaddressability(orscalefactor)appliedtothisoperandwhenthe instructionisdecoded.6OiTheoperandisan immediateliteral.8OmTheoperandisbothreadandwritten.*OYrTheoperandisreadonly.+OwTheoperandiswriteonly.O:ObByteOMf F_floatingOg G_floatingOlLongwordOqQuadword4(  O )1OsIEEEsinglefloating (S_floating)1O5tIEEEdoublefloating (T_floating)OrwWordAOxThedatatypeis specifiedbythe instruction O LJ"+OA.1CRegisterUsage ConventionsO(TableA-1@(liststheregisterusage conventionsforOpenVMSEOAXP.MACRO-64 recognizesFPandSPasregistersyn-KOonyms,butdoesnot recognizeAI,RA,orPVasregisterO1 synonyms.*Om?+7OTableA-3:8 Instruction QualifierNotation O OF /QualifierMeaning Ob  OCChoppedrounding ODDynamicrounding+$(mode determinedby FPCR) OaI!aInexactresultenable OM#Minusinfinityrounding OS&Software completionenable OU%Floating underflowenable OTV#TIntegeroverflowenable Oz p#-OA.2C InstructionOperandNotationO(TableA-2@(showsthenotationfor instruction operands.)The,Onotationformatisasfollows:*#Om?%U$++O.x^- 4=OTableA-4:8F-PControlRegister(FPCR)Format O OFBitsSymbolMeaning Ob +O63SUMBitwiseORof<57:52>AO62:60RAZ/IGNVReadaszero;ignoredwhenwritten5O$59:58DYNIEEEroundingmode selected:|00Chopped01Minusinfinity10Normalrounding311Plusinfinity@Op57IOVIntegeroverflowof destination precisionOw16.541SUBS/SUM16.740 ADDS/SUIM17.02EFCMOVLE>O16.542MULS/SUM16.741 SUBS/SUIM17.02FFCMOVGT 5OA.7COpenVMSPALcode InstructionSummaryO(TableA-7>(liststheOpenVMS unprivilegedPALcodeinstruc-OtionsandTableA-827liststheOpenVMS privilegedPALcodeO instructions.*>Ol??*>Cm?Dr Q zY:OTableA-10:7Common Architecture Instructions O OFMnemonicFCodeOperands#F Operation Ob OADDF#15.080Fa.rf,Fb.rf,Fc.wf #Fc c  Fav &+ uFbvOADDF/C15.000O$ADDF/S$15.480OaADDF/SCa15.400{RQ O OMnemonicCodeOperands# Operation O 0S_ OADDF/SUC15.500O5ADDF/SU515.580OrADDF/Ur15.180OADDF/UC15.100OADDG#15.0A0Fa.rg,Fb.rg,Fc.wg #Fc c  Fav &+ uFbvO)ADDG/C)15.020OfADDG/Sf15.4A0OADDG/SC15.420OADDG/SU15.5A0OADDG/SUC15.520OYADDG/UY15.1A0OADDG/UC15.120OADDL.10.00Ra.rl,{Rb.rl/#b.ib},Rc.wqRc i  SEXT((Rav +?  Rbv)<31:0>)OADDL/V10.40OMADDQ.M10.20Ra.rq,{Rb.rq/#b.ib},Rc.wqRc iM  MRav 1M+ MRbvOADDQ/V10.60OADDS#16.080Fa.rs,Fb.rs,Fc.ws #Fc c  Fav &+ uFbvOADDS/C16.000O@ADDS/D@16.0C0O}ADDS/M}16.040OADDS/SU16.580OADDS/SUC16.500O4ADDS/SUD416.5C0OqADDS/SUIq16.780O ADDS/SUIC16.700O ADDS/SUID16.7C0O' ADDS/SUIM'16.740OdADDS/SUMd16.540OADDS/U16.180OADDS/UC16.100OADDS/UD16.1C0OXADDS/UMX16.140OADDT#16.0A0Fa.rt,Fb.rt,Fc.wt #Fc c  Fav &+ uFbvOADDT/C16.020OADDT/D16.0E0OKADDT/MK16.060OADDT/SU16.5A0OADDT/SUC16.520O ADDT/SUD 16.5E0O? ADDT/SUI? 16.7A0O|  ADDT/SUIC| 16.720O  ADDT/SUID 16.7E0O  ADDT/SUIM 16.760O2 ADDT/SUM2 16.560Oo ADDT/Uo 16.1A0O ADDT/UC 16.120O ADDT/UD 16.1E0O& ADDT/UM& 16.160 Oc AND.c 11.00Ra.rq,{Rb.rq/#b.ib},Rc.wqRc ic  c RavANDRbv O BEQ 39 Ra.rq,disp.al# IfRav  =, 0ThenPC A   PC + 8 {4 h *  SEXT(disp)} O BGE 3E Ra.rq,disp.al# IfRav   0ThenPC 0   z PC + & {4 V *v  SEXT(disp)} O BGT 3F Ra.rq,disp.al!# IfRav>0ThenPC *    u  PC  + !  {4 Q " *q   SEXT(disp)} OV BIC.V 11.08Ra.rq,{Rb.rq/#b.ib},Rc.wqRc iV  V RavAND{NOTRbv} O BIS. 11.20Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i   RavORRbvO BLBC 38 Ra.rq,disp.al# IfRav<0> C = 0ThenPC   PC N + {4 *  SEXT(disp)}O BLBS 3C Ra.rq,disp.al# IfRav<0> C = 1ThenPC   PC N + {4  *  SEXT(disp)} OJ BLEJ 3B Ra.rq,disp.al#J IfRav J J 0ThenPC 0 J   z J PC J + & J {4 V R *v J  SEXT(disp)} O BLT 3A Ra.rq,disp.al!# IfRav<0ThenPC *   u PC + ! {4 Q *q  SEXT(disp)} O BNE 3D Ra.rq,disp.al# IfRav  6  =B 0ThenPC W   PC + M {4 } *  SEXT(disp)}T  O OMnemonicCodeOperands# Operation O  O;BR;30[Ra.wq],disp.al #;Ra n; ;PC;PC v;  ;PC  ;+ l ;{4 D* ; SEXT(disp)} OxBSRx34 Ra.wq,disp.al #xRa nx xPC;PC vx  xPC  x+ l x{4 * x SEXT(disp)}OCALL_PAL00fnc.ir#TraptoPALcodeOCMOVEQ311.24Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav =,0ThenRc <   RbvO/CMOVGE3/11.46Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav //0ThenRc * /  u /RbvOlCMOVGTCl11.66Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav>0ThenRc % l  p lRbvOCMOVLBC611.16Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav<0> C=0ThenRc   RbvOCMOVLBS611.14Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav<0> C=1ThenRc   RbvO"CMOVLE3"11.64Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav ""0ThenRc * "  u "RbvO_CMOVLTC_11.44Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav<0ThenRc % _  p _RbvOCMOVNE311.26Ra.rq,{Rb.rq/#b.ib},Rc.wqIfRav 6 =B0ThenRc Q   RbvOCMPBGE.10.0FRa.rq,{Rb.rq/#b.ib},Rc.wqRc i +Bytewisecomparemaskof{Rav  R Rbv}OCMPEQ310.2DRa.rq,{Rb.rq/#b.ib},Rc.wqIfRav =,RbvThenRc   1ElseRc    0OSCMPGEQ#S15.0A5Fa.rg,Fb.rg,Fc.wq#SIfFav S='SFbvThenFc w S  S0.5ElseFc S  , S0.0OCMPGEQ/S15.4A5OCMPGLE#15.0A7Fa.rg,Fb.rg,Fc.wq#IfFav FbvThenFc e   0.5ElseFc    0.0O CMPGLE/S 15.4A7OFCMPGLT#F15.0A6Fa.rg,Fb.rg,Fc.wq##FIfFav<FbvThenFc ` F  F0.5ElseFc F   F0.0OCMPGLT/S15.4A6OCMPLE310.6DRa.rq,{Rb.rq/#b.ib},Rc.wqIfRav RbvThenRc u   1ElseRc   0OCMPLTE10.4DRa.rq,{Rb.rq/#b.ib},Rc.wqIfRav<RbvThenRc p   1ElseRc   0O:CMPTEQ#:16.0A5Fa.rt,Fb.rt,Fc.wq#:IfFav :=':FbvThenFc w :  :2.0ElseFc :  , :0.0Ow CMPTEQ/SUw16.5A5OCMPTLE#16.0A7Fa.rt,Fb.rt,Fc.wq#IfFav FbvThenFc e   2.0ElseFc    0.0O CMPTLE/SU16.5A7O-CMPTLT#-16.0A6Fa.rt,Fb.rt,Fc.wq##-IfFav<FbvThenFc ` -  -2.0ElseFc -   -0.0Oj CMPTLT/SUj16.5A6OCMPTUN#16.0A4Fa.rt,Fb.rt,Fc.wq+#IfFav UnorderedFbvThenFc P   2.0ElseFc    0.0O CMPTUN/SU16.5A4O!CMPULE6!10.3DRa.rq,{Rb.rq/#b.ib},Rc.wqIfRavU !E!RbvThenRc !  !1ElseRc !  * !0O^CMPULTF^10.1DRa.rq,{Rb.rq/#b.ib},Rc.wqIfRavU<RbvThenRc ^  ^1ElseRc ^  % ^0OCPYS#17.020Fa.rq,Fb.rq,Fc.wq #Fc c "Fav<63>|| Fbv<62:0>OCPYSE#17.022Fa.rq,Fb.rq,Fc.wq #Fc c % Fav<63:52>|| Fbv<51:0>O CPYSN# 17.021Fa.rq,Fb.rq,Fc.wq # Fc c  ' NOTFav<63>|| Fbv<62:0>OQ CVTDGQ 15.09E Fb.rd,Fc.wg #Q Fc cQ  'Q D_FloattoG_FloatofFbvO CVTDG/C 15.01EO CVTDG/S 15.49EO CVTDG/SC 15.41EOE CVTDG/SUE 15.59EO  CVTDG/SUC 15.51EO CVTDG/U 15.19EO CVTDG/UC 15.11EO8 CVTGD8 15.0ADp Fb.rg,Fc.wd #8 Fc c8  '8 G_FloattoD_FloatofFbvOu CVTGD/Cu 15.02DO CVTGD/S 15.4ADO CVTGD/SC 15.42DO, CVTGD/SU, 15.5ADOi  CVTGD/SUCi 15.52DO CVTGD/U 15.1ADO CVTGD/UC 15.12DO CVTGF 15.0ACu Fb.rg,Fc.wf # Fc c  ' G_FloattoF_FloatofFbvO\ CVTGF/C\ 15.02CO CVTGF/S 15.4ACO CVTGF/SC 15.42C UZ  O OMnemonicCodeOperands# Operation O O;CVTGF/SU;15.5ACOx CVTGF/SUCx15.52COCVTGF/U15.1ACOCVTGF/UC15.12CO/CVTGQ/15.0AFu Fb.rg,Fc.wq #/Fc c/ $/G_FloattoquadofFbvOlCVTGQ/Cl15.02FOCVTGQ/S15.4AFOCVTGQ/SC15.42FO"CVTGQ/SV"15.5AFO_ CVTGQ/SVC_15.52FOCVTGQ/V15.1AFOCVTGQ/VC15.12FOCVTLQ17.010 Fb.rl,Fc.wq #Fc c ,SEXT(Fbv<63:62> || Fbv<58:29>)OSCVTQFS15.0BCz Fb.rq,Fc.wf #SFc cS $SQuadtoF_FloatofFbvOCVTQF/C15.03COCVTQG15.0BEz Fb.rq,Fc.wg #Fc c $QuadtoG_FloatofFbvO CVTQG/C 15.03EOFCVTQLF17.030 Fb.rq,Fc.wl #FFc cF !FQuadtolongofFbvOCVTQL/SV17.530OCVTQL/V17.130OCVTQS16.0BCz Fb.rq,Fc.ws #Fc c $QuadtoS_FloatofFbvO:CVTQS/C:16.03COwCVTQS/Dw16.0FCOCVTQS/M16.07CO CVTQS/SUI16.7BCO- CVTQS/SUIC-16.73COj CVTQS/SUID16.7FCO CVTQS/SUIM16.77COCVTQT16.0BEz Fb.rq,Fc.wt #Fc c $QuadtoT_FloatofFbvO!CVTQT/C!16.03EO^CVTQT/D^16.0FEOCVTQT/M16.07EO CVTQT/SUI16.7BEO  CVTQT/SUIC16.73EOQ  CVTQT/SUID16.7FEO  CVTQT/SUIM16.77EO CVTST 16.2ACu Fb.rs,Fc.wt # Fc c  ' S_FloattoT_FloatofFbvO CVTST/S 16.6ACOE CVTTQE 16.0AFu Fb.rt,Fc.wq #E Fc cE  $E T_FloattoquadofFbvO CVTTQ/C 16.02FO CVTTQ/D 16.0EFO CVTTQ/M 16.06FO8 CVTTQ/SV8 16.5AFOu  CVTTQ/SVCu 16.52FO  CVTTQ/SVD 16.5EFO  CVTTQ/SVI 16.7AFO,  CVTTQ/SVIC16.72FOi  CVTTQ/SVID16.7EFO  CVTTQ/SVIM16.76FO  CVTTQ/SVM16.56FO CVTTQ/V 16.1AFO\ CVTTQ/VC\ 16.12FO CVTTQ/VD 16.1EFO CVTTQ/VM 16.16FVz  O OMnemonicCodeOperands# Operation O O;CVTTS;16.0ACu Fb.rt,Fc.ws #;Fc c; ';T_FloattoS_FloatofFbvOxCVTTS/Cx16.02COCVTTS/D16.0ECOCVTTS/M16.06CO/CVTTS/SU/16.5ACOl CVTTS/SUCl16.52CO CVTTS/SUD16.5ECO CVTTS/SUI16.7ACO" CVTTS/SUIC"16.72CO_ CVTTS/SUID16.7ECO CVTTS/SUIM16.76CO CVTTS/SUM16.56COCVTTS/U16.1ACOSCVTTS/UCS16.12COCVTTS/UD16.1ECOCVTTS/UM16.16CO DIVF# 15.083Fa.rf,Fb.rf,Fc.wf # Fc c    Fav & = N FbvOFDIVF/CF15.003ODIVF/S15.483ODIVF/SC15.403ODIVF/SU15.583O:DIVF/SUC:15.503OwDIVF/Uw15.183ODIVF/UC15.103ODIVG#15.0A3Fa.rg,Fb.rg,Fc.wg #Fc c  Fav &= NFbvO-DIVG/C-15.023OjDIVG/Sj15.4A3ODIVG/SC15.423ODIVG/SU15.5A3O!DIVG/SUC!15.523O^DIVG/U^15.1A3ODIVG/UC15.123ODIVS#16.083Fa.rs,Fb.rs,Fc.ws #Fc c  Fav &= NFbvO DIVS/C 16.003OQ DIVS/DQ 16.0C3O DIVS/M 16.043O DIVS/SU 16.583O DIVS/SUC 16.503OE DIVS/SUDE 16.5C3O DIVS/SUI 16.783O  DIVS/SUIC 16.703O  DIVS/SUID 16.7C3O8  DIVS/SUIM8 16.743Ou DIVS/SUMu 16.543O DIVS/U 16.183O DIVS/UC 16.103O, DIVS/UD, 16.1C3Oi DIVS/UMi 16.143O DIVT# 16.0A3Fa.rt,Fb.rt,Fc.wt # Fc c    Fav & = N FbvO DIVT/C 16.023O DIVT/D 16.0E3O\ DIVT/M\ 16.063O DIVT/SU 16.5A3O DIVT/SUC 16.523nW$ D O OMnemonicCodeOperands# Operation O O;DIVT/SUD;16.5E3OxDIVT/SUIx16.7A3O DIVT/SUIC16.723O DIVT/SUID16.7E3O/ DIVT/SUIM/16.763OlDIVT/SUMl16.563ODIVT/U16.1A3ODIVT/UC16.123O"DIVT/UD"16.1E3O_DIVT/UM_16.163 OEQV.11.48Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i RavXOR{NOTRbv}OEXCB18.0400# ExceptionbarrierOEXTBL.12.06Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i 5ByteextractlowfromRavatRbv<2:0>OSEXTLH.S12.6ARa.rq,{Rb.rq/#b.ib},Rc.wqRc iS 6SLongextracthighfromRavatRbv<2:0>OEXTLL.12.26Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i 5LongextractlowfromRavatRbv<2:0>OEXTQH.12.7ARa.rq,{Rb.rq/#b.ib},Rc.wqRc i 6QuadextracthighfromRavatRbv<2:0>O EXTQL. 12.36Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i  5 QuadextractlowfromRavatRbv<2:0>OFEXTWH.F12.5ARa.rq,{Rb.rq/#b.ib},Rc.wqRc iF 6FWordextracthighfromRavatRbv<2:0>OEXTWL.12.16Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i 5WordextractlowfromRavatRbv<2:0>OFBEQ31 Fa.rq,disp.al#IfFav ='0ThenPC <   PC + 2 {4 b *  SEXT(disp)}OFBGE36 Fa.rq,disp.al#IfFav 0ThenPC *   u PC + ! {4 Q *q  SEXT(disp)}O:FBGT:37 Fa.rq,disp.al!#:IfFav>0ThenPC % :  p :PC :+  :{4 L B*l : SEXT(disp)}OwFBLEw33 Fa.rq,disp.al#wIfFav ww0ThenPC * w  u wPC w+ ! w{4 Q *q w SEXT(disp)}OFBLT32 Fa.rq,disp.al!#IfFav<0ThenPC %   p PC +  {4 L *l  SEXT(disp)}OFBNE35 Fa.rq,disp.al#IfFav 6 =<0ThenPC Q   PC + H {4 x *  SEXT(disp)}O-FCMOVEQ#-17.02AFa.rq,Fb.rq,Fc.wq#-IfFav -='-0ThenFc 1 -  | -FbvOjFCMOVGE#j17.02DFa.rq,Fb.rq,Fc.wq#jIfFav jj0ThenFc j  j jFbvOFCMOVGT#17.02FFa.rq,Fb.rq,Fc.wq!#IfFav>0ThenFc    e FbvOFCMOVLE#17.02EFa.rq,Fb.rq,Fc.wq#IfFav 0ThenFc   j FbvO!FCMOVLT#!17.02CFa.rq,Fb.rq,Fc.wq!#!IfFav<0ThenFc  !  e !FbvO^FCMOVNE#^17.02BFa.rq,Fb.rq,Fc.wq#^IfFav ^6 ^=<^0ThenFc G ^  ^FbvOFETCH18.8000u0(Rb.ab)!#Prefetcharound(Rbv)OFETCH_M18.A000e0(Rb.ab)2#Prefetcharound(Rbv),modifyintentO INSBL. 12.0BRa.rq,{Rb.rq/#b.iq},Rc.wqRc i  4 ByteinsertlowfromRavatRbv<2:0>OQ INSLH.Q 12.67Ra.rq,{Rb.rq/#b.iq},Rc.wqRc iQ  5Q LonginserthighfromRavatRbv<2:0>O INSLL. 12.2BRa.rq,{Rb.rq/#b.iq},Rc.wqRc i  4 LonginsertlowfromRavatRbv<2:0>O INSQH. 12.77Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i  5 QuadinserthighfromRavatRbv<2:0>O INSQL. 12.3BRa.rq,{Rb.rq/#b.iq},Rc.wqRc i  4 QuadinsertlowfromRavatRbv<2:0>OE INSWH.E 12.57Ra.rq,{Rb.rq/#b.iq},Rc.wqRc iE  5E WordinserthighfromRavatRbv<2:0>O INSWL. 12.1BRa.rq,{Rb.rq/#b.iq},Rc.wqRc i  4 WordinsertlowfromRavatRbv<2:0> O JMP$ 1A.0[Ra.wq],(Rb.ab),hint # Ra n   PC;PC v   RbvAND{NOT3} O JSR" 1A.1Ra.wq,(Rb.ab),hint # Ra n   PC;PC v   RbvAND{NOT3}1O8  JSR_COROUTINEv1A.3Ra.wq,(Rb.ab),hint #8 Ra n8  8 PC;PC v8  8 RbvAND{NOT3} Ou LDA"u 08Ra.wq,disp.ab(Rb.ab) #u Ra nu   u Rbv 1u +u  SEXT(disp)O LDAH" 09Ra.wq,disp.ab(Rb.ab) # Ra n    Rbv 1 +  SEXT(disp * 65536) O LDF" 20Fa.wf,disp.ab(Rb.ab) # Fa i   ({Rbv V +  SEXT(disp)}) O, LDG", 21Fa.wg,disp.ab(Rb.ab) #, Fa i,  , ({Rbv V, +,  SEXT(disp)}) Oi LDL"i 28Ra.wq,disp.ab(Rb.ab) #i Ra ni  i  SEXT(({Rbv  i +U i SEXT(disp)})<31:0>)O LDL_L" 2ARa.wq,disp.ab(Rb.ab) # Ra n    SEXT(({Rbv  +U SEXT(disp)})<31:0>) O LDQ" 29Ra.wq,disp.ab(Rb.ab) # Ra n   ({Rbv [ +  SEXT(disp)})O LDQ_L" 2BRa.wq,disp.ab(Rb.ab) # Ra n   ({Rbv [ +  SEXT(disp)})O\ LDQ_U"\ 0BRa.wq,disp.ab(Rb.ab) #\ Ra n\  \ ({{Rbv q\ +$\  SEXT(disp)}ANDNOT7}) O LDS" 22Fa.ws,disp.ab(Rb.ab) # Fa i   ({Rbv V +  SEXT(disp)}) O LDT" 23Fa.wt,disp.ab(Rb.ab) # Fa i   ({Rbv V +  SEXT(disp)}): X   O OMnemonicCodeOperands# Operation O  O;MB;18.4000#;MemorybarrierOxMF_FPCR#x17.025Fa.rq,Fa.rq,Fa.wq #xFa ix xFPCROMSKBL.12.02Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i 2BytemasklowfromRavatRbv<2:0>OMSKLH.12.62Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i 3LongmaskhighfromRavatRbv<2:0>O/MSKLL./12.22Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i/ 2/LongmasklowfromRavatRbv<2:0>OlMSKQH.l12.72Ra.rq,{Rb.rq/#b.iq},Rc.wqRc il 3lQuadmaskhighfromRavatRbv<2:0>OMSKQL.12.32Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i 2QuadmasklowfromRavatRbv<2:0>OMSKWH.12.52Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i 3WordmaskhighfromRavatRbv<2:0>O"MSKWL."12.12Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i" 2"WordmasklowfromRavatRbv<2:0>O_MT_FPCR#_17.024Fa.rq,Fa.rq,Fa.wq#_FPCR _  _FaOMULF#15.082Fa.rf,Fb.rf,Fc.wf #Fc c  Fav & ^FbvOMULF/C15.002OMULF/S15.482OSMULF/SCS15.402OMULF/SU15.582OMULF/SUC15.502O MULF/U 15.182OFMULF/UCF15.102OMULG#15.0A2Fa.rg,Fb.rg,Fc.wg #Fc c  Fav & ^FbvOMULG/C15.022OMULG/S15.4A2O:MULG/SC:15.422OwMULG/SUw15.5A2OMULG/SUC15.522OMULG/U15.1A2O-MULG/UC-15.122OjMULL.j13.00Ra.rl,{Rb.rl/#b.ib},Rc.wqRc ij j SEXT((Rav j( j Rbv)<31:0>)OMULL/V13.40OMULQ.13.20Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i  Rav 1 hRbvO!MULQ/V!13.60O^MULS#^16.082Fa.rs,Fb.rs,Fc.ws #^Fc c^  ^Fav &^ ^^FbvOMULS/C16.002OMULS/D16.0C2O MULS/M 16.042OQ MULS/SUQ 16.582O MULS/SUC 16.502O MULS/SUD 16.5C2O MULS/SUI 16.782OE  MULS/SUICE 16.702O  MULS/SUID 16.7C2O  MULS/SUIM 16.742O MULS/SUM 16.542O8 MULS/U8 16.182Ou MULS/UCu 16.102O MULS/UD 16.1C2O MULS/UM 16.142O, MULT#, 16.0A2Fa.rt,Fb.rt,Fc.wt #, Fc c,   , Fav &,  ^, FbvOi MULT/Ci 16.022O MULT/D 16.0E2O MULT/M 16.062O MULT/SU 16.5A2O\ MULT/SUC\ 16.522O MULT/SUD 16.5E2O MULT/SUI 16.7A2HY  O OMnemonicCodeOperands# Operation O O; MULT/SUIC;16.722Ox MULT/SUIDx16.7E2O MULT/SUIM16.762OMULT/SUM16.562O/MULT/U/16.1A2OlMULT/UCl16.122OMULT/UD16.1E2OMULT/UM16.162O"ORNOT."11.28Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i" "RavOR{NOTRbv} O_RC_18.E000jRa.wq #_Ra n_ _ intr_flag; intr_flag _  _0 ORET$1A.2[Ra.wq],(Rb.ab),hint #Ra n PC;PC v RbvAND{NOT3}ORPCC18.C000jRa.wq #Ra n !Processcyclecounter ORS18.F000jRa.wq #Ra n  intr_flag; intr_flag   1OSS4ADDL.S10.02Ra.rl,{Rb.rl/#b.ib},Rc.wqRc iS SSEXT(((SLL(Rav,2)) S+* S Rbv)<31:0>)OS4ADDQ.10.22Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i  SLL(Rav,2) + ? RbvOS4SUBL.10.0BRa.rl,{Rb.rl/#b.ib},Rc.wqRc i SEXT(((SLL(Rav,2))   Rbv)<31:0>)O S4SUBQ. 10.2BRa.rq,{Rb.rq/#b.ib},Rc.wqRc i    SLL(Rav,2)   . RbvOFS8ADDL.F10.12Ra.rl,{Rb.rl/#b.ib},Rc.wqRc iF FSEXT(((SLL(Rav,3)) F+* F Rbv)<31:0>)OS8ADDQ.10.32Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i  SLL(Rav,3) + ? RbvOS8SUBL.10.1BRa.rl,{Rb.rl/#b.ib},Rc.wqRc i SEXT(((SLL(Rav,3))   Rbv)<31:0>)OS8SUBQ.10.3BRa.rq,{Rb.rq/#b.ib},Rc.wqRc i  SLL(Rav,3)  . Rbv O:SLL.:12.39Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i: :SLL(Rav,Rvb<5:0>) OwSRA.w12.3CRa.rb,{Rb.rq/#b.ib},Rc.wqRc iw wSRA(Rav,Rvb<5:0>) OSRL.12.34Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i SRL(Rav,Rvb<5:0>) OSTF"24Fa.rf,disp.ab(Rb.ab)#({Rbv + SEXT(disp)}) j   Fav O-STG"-25Fa.rg,disp.ab(Rb.ab)#-({Rbv -+- SEXT(disp)}) j -  -Fav OjSTL"j2CRa.rl,disp.ab(Rb.ab)#j({Rbv j+jSEXT(disp)})<31:0>  j e j Rav<31:0>OSTL_C"2ERa.ml,disp.ab(Rb.ab)#({Rbv +SEXT(disp)})<31:0>   e  Rav<31:0> OSTQ"2DRa.rq,disp.ab(Rb.ab)#({Rbv + SEXT(disp)}) j   RavO!STQ_C"!2FRa.mq,disp.ab(Rb.ab)#!({Rbv !+! SEXT(disp)}) j !  !RavO^STQ_U"^0FRa.rq,disp.ab(Rb.ab)#^({{Rbv ^+$*^ SEXT(disp)}ANDNOT7}) ^  < ^Rav OSTS"26Fa.rs,disp.ab(Rb.ab)#({Rbv + SEXT(disp)}) j   Fav OSTT"27Fa.rt,disp.ab(Rb.ab)#({Rbv + SEXT(disp)}) j   FavO SUBF# 15.081Fa.rf,Fb.rf,Fc.wf # Fc c    Fav &  c FbvOQ SUBF/CQ 15.001O SUBF/S 15.481O SUBF/SC 15.401O SUBF/SU 15.581OE SUBF/SUCE 15.501O SUBF/U 15.181O SUBF/UC 15.101O SUBG# 15.0A1Fa.rg,Fb.rg,Fc.wg # Fc c    Fav &  c FbvO8 SUBG/C8 15.021Ou SUBG/Su 15.4A1O SUBG/SC 15.421O SUBG/SU 15.5A1O, SUBG/SUC, 15.521Oi SUBG/Ui 15.1A1O SUBG/UC 15.121O SUBL. 10.09Ra.rl,{Rb.rl/#b.ib},Rc.wqRc i    SEXT((Rav  .  Rbv)<31:0>)O SUBL/V 10.49O\ SUBQ.\ 10.29Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i\   \ Rav 1\  n\ RbvO SUBQ/V 10.69O SUBS# 16.081Fa.rs,Fb.rs,Fc.ws # Fc c    Fav &  c FbvZ  O OMnemonicCodeOperands# Operation O O;SUBS/C;16.001OxSUBS/Dx16.0C1OSUBS/M16.041OSUBS/SU16.581O/SUBS/SUC/16.501OlSUBS/SUDl16.5C1OSUBS/SUI16.781O SUBS/SUIC16.701O" SUBS/SUID"16.7C1O_ SUBS/SUIM_16.741OSUBS/SUM16.541OSUBS/U16.181OSUBS/UC16.101OSSUBS/UDS16.1C1OSUBS/UM16.141OSUBT#16.0A1Fa.rt,Fb.rt,Fc.wt #Fc c  Fav & cFbvO SUBT/C 16.021OFSUBT/DF16.0E1OSUBT/M16.061OSUBT/SU16.5A1OSUBT/SUC16.521O:SUBT/SUD:16.5E1OwSUBT/SUIw16.7A1O SUBT/SUIC16.721O SUBT/SUID16.7E1O- SUBT/SUIM-16.761OjSUBT/SUMj16.561OSUBT/U16.1A1OSUBT/UC16.121O!SUBT/UD!16.1E1O^SUBT/UM^16.161OTRAPB18.0000$#Drainanypendingtraps{[Q O OMnemonicCodeOperands# Operation O ;\$ OUMULH.13.30Ra.rq,{Rb.rq/#b.ib},Rc.wqRc i {Rav F*fU Rbv}<127:64> O5WMB518.4400 #5Writememorybarrier OrXOR.r11.40Ra.rq,{Rb.rq/#b.ib},Rc.wqRc ir rRavXORRbv OZAP.12.30Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i /ZapfromRav,bytemaskRbv<7:0>OZAPNOT.12.31Ra.rq,{Rb.rq/#b.iq},Rc.wqRc i 4ZapfromRav,bytemaskNOTRbv<7:0> O IA5OA.8CPALcodeOpcodesin NumericalOrderO(TableA-9=(liststhePALcodeopcodesin numericalorder.*IOl?Jr.P1OA.9CCommon Architecture InstructionsO(TableA-10;(listscommon architecture instructions.*WhereJOenclosedinsquare brackets,Ra.wqdefaultstoR31.-This9Ooccursfor instructionsBR,JMP,andRET.*PO?Qql] B)OB.! Programming"with!MACRO-64GOdThisappendixcontains informationtohelpyouprogramEOmore effectivelyusingtheMACRO-64assemblylanguage)Owithinthe frameworkofthe$m OpenVMSCallingStandardb.'It1On discussesthe following information:}^S ` )TheOpenVMSCallingStandard `O 2O AccessingMemorywithBase Registers ` %TypesofData Structures `N NTypesofRoutines ` ExampleProgram `L LSelfAddressability ` 1 Optimizationand Automatic Alignment_)IOFormore informationontheAXP environment,youshould:Obecomefamiliarwiththe followingmanuals:` ` 0 Alpha Architecture ReferenceManual `O $O OpenVMSCallingStandard ` "AlphaAXP architecture fhN<a@ @ Xc̍id)RRD(^ҋDBRdRRX&kL (3)H$*1F$*J,J(1&]Ciu| ??OFigureB-2:7 AccessingMemoryviaBase AddressesBuOBKK<@@@@@@@@@@@! @@ @@@&@`4@@,M@@hE@@(@E@@(,AE@@(YˀcD@@@@@@@@@@@@@@@8H@B@D@N@ \N@~@ 8)I@@ @/HQ@?~@ D!HQ@N>N@(D)IQ@~BDZ 8XN@~@@?@@@@@@>@@?@@@@@@@@@@@@@@@@@?@@@@@@@8@@@@@@@@@@@@@@@@@@@@@?@@@@@@@@@@c@S5@@LR&A(4M @@D^AE@@DB"@(E@@DR"A$M@@c5@@x@ @@"@@@ @@@|x @@@@@@@@@ p|>@@>@@D"H@@@D"@@@@D@@D@@@D"@@@D"H@@@@>@@@@@c):c1@@@$)iRJ @@@|=I%3@@@I%B@@@@"RJ @@Bk"2k1@@N@@~@@@@~@@N@@B@@@й1@@NJR4@@ R@@PQR@@HQJR@@5 1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@p|>@@@D"H@@D"@@@D@@D@@D"@@D"H@@@>@@@@@@@@|@@@@p|>B @@D"HN Tsй@D"@~S$̈́@D E䂐@D~ P$DP@D"N $EH@D"HBDd5 @@>@@@@@@@@@@|@@p|>@@@D"H@@D"@@@D?@@D @@D" @@D"H @@@> @@ @@ @@ @@ @@ @@ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ?@  @  @  @  @  @ $ @ A @ A @ H O)% @ A@ȋQ @ AH(Q( @ AI(Q(% @  @  @  @            $ " 5Xc. Me h EE( E%E( E)e ( xEZc,' @ 8      @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@<  B@D  NQ9X 1UsN ~D)eiRJ$ ADE) Q$Q ~AD!D) Q$Q NAD)e)DRJ$Q BA8X. <1QcN @@ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @                       ?Qg8S$HU cH U9YHH $ BH CȈi̙q+'\%ƂH A&(H4$L)CH @"(HID(BI D@"(HID(BHI D@"(HID(CH J q" 'YȂH J@x B Cʱ k`Ʃ9H x&%!)&)jQ р@ ,A(z(J$) ?Q Q@@ A( ( ') >Q Q@ (@(K( )(1 BQ Q @ 8,A2' )(1 (x@  D (@   !DX B*ɱ@ tn *'J/<e) ^*x&*R@ T5(K !E B*"*@ T (J!E) B*"*R@ $ (J!e) B*"*R@ $ (K X +ɱ@ $ 'r@ @ 8 p@  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 1 c1@ (cJJ)% RJ@ ()Q 1@ D!@ ADE D " @ AH"(MA DP"@ AH(S@ <P@ AH"D1 D "!b@ AH "|  D"!@ AD @ D'! @ σO } D "@   @  @  @  @ <' < yO@ AD(@DD DQ "@ AH"((@DB DPṔ @ AH( !< @ @@  @  @@  @  @ 8yG q8@ $AE H$(E@ $A H  A@ 5@x j@ @ AL@  $1@ $A$D@ H$H @ $AD@ I$(@ A9> #s}@  @ @ @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ |@ >(@   (@  !M9V2 B*rd@ tn hʱ/|SEYJ ^*@ T5*R!QEQz B*@ T *!QEQ B*@ $ *R!SEYJ B*@ $ *R|M93 +r,g@ $kʱ  @  @ p @  @ yG ߇!8@ <Cq@ "(2E@ DQd""@ ""A@ DD"@x !@ @ <>C@@  ""1@ DD!b&@@ "" @ DD!"@@ "("@ DQD! "@> "!}@ D>C" @ @ @  @  @  @  @  @  @  @  @  @  @  @  @ ?D`qLD T1 )TGPB8d PB ED1 E{a )OB.1COpenVMSCallingStandardFOUAllOpenVMS languagessuppliedbyDigitalsupportthe$O OpenVMSCallingStandard,D.(WithmostcompiledAXPlan-Oguages,the$ OpenVMSCallingStandard is invisibletoyouAO^asthe programmer.,However,when programmingwithHOtheMACRO-64assembly language,youare responsibleforMOdefiningthe appropriatedata structuresandusing appropri-OOhate instruction sequencesinorderto implementroutinesthatOcomplywiththe$ OpenVMSCallingStandard .b ORefertoChapter6; fora descriptionofseverallibrarymacros>OthataresuppliedwiththeMACRO-64 Assembler.*bFlO'oc E&OAn importantroleofthe$ OpenVMSCallingStandard isHOsupportfor debugging, exception handling,and traceback9O5 routines.)Theseroutinesareaidedbythe+5 OpenVMSCallingO Standard@data structuresand conventionsto determinetheROcurrentroutineandthesourceofitscall.*In addition,theseIO> structuresand conventionsenablethedebuggertointer-SOpretother information,suchasdatastoredonthestackorinO registers.Ld"AOAgain,when programminginMACRO-64assemblylan-NOguage,itis importantthatyouasthe programmer correctlyJO5definethedata structuresandadheretothe conventionsOdefinedbythe$] OpenVMSCallingStandard P. 9OExampleB-1:8RoutineWithoutLinkagePairszB.enable% local_block z.psect%$LINKAGE,noexe7OLS:.procedure_descriptor%MY_PROC,%MY_CODE7z\;%MY_PROC% procedure% descriptor% details...OX_ADDR:&.address&X0$;%Store%address&of&X's%proc&descz.psect% $CODE,exe/OUMY_CODE:%;&R27%->%LS%upon&entry/z;%Prologue%omitted%for% clarity...AzLDQR27,X_ADDR-LS(R27);%R27%->%proc%desc&for%Xz-LDQ R26,8(R27)"$-;%R26%->%code%for%X V -1zuJSR R26,(R26)$u;%CALL&X V u2/z;%Epilogue%omitted%for% clarity...l ,6OExampleB-2:8RoutineWithLinkagePairszB.enable% local_block z.psect%$LINKAGE,noexe7OLS:.procedure_descriptor%MY_PROC,%MY_CODE4z;;MYPROC% procedure& descriptor% details...!OX_LP:p .LINKAGE_PAIR%X*$;%Store%address&of&X's%code+$;%followed%by%address&of&X's$;%proc&descz|.psect% $CODE,exe/OMY_CODE:%;&R27%->%LS%upon&entry/z ;%Prologue%omitted%for% clarity...=zTLDQR26,-LS(R27);%R26%->%code%for%XCzLDQR27,-LS(R27);%R27%->%proc%desc&for%XzJSR R26,(R26)$;%CALL&X/z,;%Epilogue%omitted%for% clarity...1+5e 7OB.2C AccessingMemorywithBase RegistersLOUTheAlphaAXP architectureisa base-register architecture.KOMemory locationscanonlybeaccessedrelativetoabase=Oaddressstoredinoneofthebase registers.f NLOTheAlphaAXP architecturehas31general,base registers,POR0throughR30.(R31isaspecialbase register,whichalwaysTO5readsaszero.'AnyattempttostoreavalueinR31isignored.Vg! ,HOSincememory-reference instructionsusea16-bit,signedNO displacementrelativetothebaseaddress, elevated-modepro-OO5gramsmayaccessthelowandhigh32Kbytesofthevirtual1OaddressspacerelativetoR31.&See"FigureB-1.*g"POhixJOHowever,theseareasofvirtualmemoryare typicallynot.O accessibleto user-mode programs.*jCk `&OBaseRegister ArchitectureKO4 Base-register architecturesuse differentmethodstoobtainQOaninitialbaseaddressforaroutine.( Typically, base-registerLO architecturesloadthecurrentprogramcounter(PC)intoaQO>base register.)Thus,datacanbeaccessedrelativetoaloca-OOtioninthecode.+Thismethodis inconsistentwiththehighNO performance objectivesoftheAlphaAXP architecturefortheOG followingreasons:l # ` HItrequiresplacingdataareasadjacenttocodeareas,O(whichresultsin inefficientuseofthe instructionanddatacaches. ` DThememory locationsneartheboundaryofthedataLYareaandcodewouldlikelybe duplicatedinboththein-J structioncacheandthedatacache,thus diminishingthe6  effectivenessofthecaching algorithms.m O ProcedureValue O4The$4 OpenVMSCallingStandard(4 simplifies obtainingabaseOOaddresswithout requiringthedataandcodeareastobead-JOjacent.-WhenaprogramorroutineneedstocallanotherNO>routine,itmustloadR27witha procedurevalue.)Thepro-SOcedurevalueisaspecialbaseaddresswhichistheaddressofHOthe procedure descriptoroftheroutineitiscalling.1n O Procedure DescriptorRO4The procedurevalueforagivenroutineistheaddressofthe4O procedure descriptorforthatroutine.SectionB.3.1 describes7Othe procedure descriptorinmoredetail.*nP?o! NTOThe procedure descriptorisadatablockthatresidesinaspe-SOcialdataareaownedbytheroutine.'ThisdataareacalledtheO5linkagesection.pDOUnlikeVAXVMSexternalroutinenames,whichrefer-LOenceitsentrypoint,AXPexternalroutinenames referenceJO5the procedure descriptorwhichcontainstheentrypoint'sOaddress.q zQOSincethecalledroutinehastheaddressofitsown procedureOO descriptorinR27,itcanaccessnotonlyitsown procedureRO5 descriptor,butmore importantly,itcanusethataddressasaQObaseaddressandaccessanydatathatiswithin32Kbyteson7Oeithersideofits procedure descriptor.r fOLinkageSectionNO4Thespecialdataareawherethe procedure descriptorresidesQOiscalledthelinkagesection.*ThelinkagesectionisactuallyNOaprogramsection(psect)thatcontainsthe routine'sproce-LO>dure descriptor.)Thelinkagesectionperformsthe followingO function:s! i ` IAllowsotherroutinestolinktotheroutineusingthe ( procedure descriptor. ` IUsesittolinktootherareasofmemoryinorderto$receiveandstoredata. ` NStoresthe addressesofother routines,allowingtheroutine$tocallthose routines.teOFigureB-2< illustrateshowyouaccessmemoryusingbaseO addresses:*tOFOu*v7w |  1JThecalledroutinecanaccessmemoryinitsownlinkageL(sectionrelativetoR27sinceR27containsabaseaddressNwithinitslinkagesection, specifically,theaddressofits  procedure descriptor. Y2EYSincememory-reference instructionsusea16-bitdis-M placementrelativetothebaseaddress,thelinkagesectionO canbeupto64KbytesinsizewithdirectaccessrelativectoR27.x =JWIn addition,thelinkagesectionpsect typicallyhastheCNOWRT attributeandcontainsonlyaddress constantsKandpossiblyother constantsinorderto facilitateplac-Maingthelinkagesectioninasharedsectioninasharableimage. 93J9IfthecalledroutineneedstoaccessmemorybeyonditsMownlinkagesection,itcanstore additionalbase addressesKinitslinkagesection,loadthemintobase registersasFBneeded,andtherebyaccessany legitimatelocationinmemory. 4LToaccess read/writedata,aseparate read/writedatasec-Ostionisdefinedina differentpsectwiththeWRT attributeNandtheaddressofthe read/writesectionisstoredinthe$linkagesection.y! WOAsshownin"FigureB-2,1thespecialbaseaddresspassedinPOR27providesthecalledroutinewithaseedofaddressabilityQO5fromwhichitcandirectlyaccessitsownlinkagesectionandPOfromwhichitcan indirectlyaccessallofmemory.'Eachrou-VOtineinacallchainreceivesitsseedofaddressabilityfromitsO>caller.*y"FOuvzL$OMAINProgramCallChainHO4Themainroutineinaprogramworksinthesameway.POThe operatingsystempassesitabaseaddresswithinitsownOOlinkagesectioninR27justlikeanyothercalling standard-KO> conformingroutine.+The operatingsystemcan establishitsOOownseedofaddressabilityinavarietyofways.)Theimpor-LOtant programming considerationisthatthemainroutineisROGgivenits requisiteseedofaddressabilityviathebaseaddressIOpassedinR27whenthe operatingsystemcallsthemainNOroutine.*Themainroutinemustinturnpassaseedofad-QOQ dressabilityinR27toanyroutinesthatitcalls,andsoon!Odownthecallchain.{! gOFigureB-3B illustratesprogramstartupandtheprogramcallOchain.*{OFO|}! Y%OThecallchainshowninFigureB-3! illustratesatypicalQO program'scallchain originatingwiththetransfertothepro-JO<gram'sentrypoint(MAIN)fromthe operatingsystem.(ThePOMAINroutinecallsroutineA,whichinturncallsB.AfullMOprologueandepiloguearerequiredforroutinesMAINandAOOEsincetheybothmakestandardcalls.)Thefullprologueallo-ROcatesthefixedstackareaandsavesthereturnaddress(R26),JO procedurevalue(R27),framepointer(R29),andanypre-QOOserved registersthataretobeusedbytheroutine.+Finally,POthefullprologue establishesthe routine'sframeasthecur-LOrentframe.,IfMAINorAneedtoaccesstheir respectiveKOYlinkagesectionsaftermakingastandardcall,theywouldOOsavea preservedregisterinthe prologue,moveR27tothatOO registerbeforeusingR27inastandardcall,usethatreg-SObistertoaccessthelinkagesectionafterthecall,andrestoreLOthatregisterinthe epilogue..SinceBdoesnotmakeanyPOstandardcalls,itsprologueandepiloguecanbe significantlyOl streamlined.*}MO| ~! OONotethatallthreeroutinesaccessdataintheir respectiveTOlinkagesectionsrelativetothebaseaddressthatisinR27onQO5entry.,ThecallerreferstothecalleebytheaddressoftheJOcallee's procedure descriptor.)Theprocedure-descriptorad-ROdressisalsocalledthe procedurevalue(PV),anditisthisRO>addressthatispassedtothecalleeinR27.*Tomakeacall,SOthecallermuststoretheaddressofthecallee's procedurede-QOscriptorinitsownlinkagesection.)ThecallercanthenloadSOHR27fromitsownlinkagesectionpriortothecall.(ThecallerVOthengoesontoobtaintheaddressofthecallee'scodefromtheNOcallee's procedure descriptor.)Withthecallee'scodeaddressJOR(CA)inR26andthecallee'sprocedure-descriptoraddressQOinR27,thecallercantransfercontroltothecalleewithaFOjump-to-subroutine(JSR) instructionthroughR26,stor-OO[ingthereturnaddressinR26.(Amoreoptimalcallsequence0OusingalinkagepairisshowninSectionB.3.3.*~w?dJ I (OTableB-1:8Frame Attributes O 3Null3FrameFFixedRegisterFrameFVariableRegisterFrame@FFixed@Stack@Frame FVariable Stack Frame O 2OE ExecutesinFrameofCallervYesNo E No @E No E No&O WhereCaller'sContextisO  Kept 3 -, Registers9 Registers:StackStack"O CanAllocateStackinO Proloque 3 - YesYesYesYes#OM MustAllocateStackinO Prologue 3M - M No M No@M YesYes+O CanAllocateStackinRoutineOb Body3 Restricted$No YesNo  Yes"O CanHavean ExceptionO) Handler 3 No YesYesYesYes6O Can Save/Restore Registers Restricted$No  No@ YesYes4O CanMakeStandardCalls Restricted$No  No @ No  Yes OC 5OB.3CData Structures'OUThissection describesthe$U OpenVMSCallingStandardUdataLO structures,andhowtousethemin practical applications.?OTherearethreedata structuresdefinedbythe OpenVMSO CallingStandard0thatyoushouldbefamiliarwith:q `  Procedure descriptor `O O Signatureblock ` Linkagepair: &OB.3.1C Procedure DescriptorLO4The procedure descriptorcontains informationthat describesPOtheroutine.(More importantly,itcontainstheaddressoftheNOcodefortheroutine.&Itincludesthe following information: ` !Stackusage(ifany) `O 'ORegister save/restoremasks `  Exceptionhandlers MOUsually,a routine'sname referencesthe routine's procedurePO descriptor,ratherthantheaddressofitscode.(Forexample,OO5aglobalnameforanexternalroutine representstheaddressQOwherethe procedure descriptorresides,nottheaddressoftheLO routine'scode.*ProgramswhichcalltheroutineobtainthePO>addressofitscodefromits procedure descriptororusingaOlinkagepair.+ FOThe.PROCEDURE_DESCRIPTORand.LOCAL_PROCEDURE_DESCRIPTORCO assembler directives define thename ofthe proce-HO5dure descriptor, and indicatesthattheblockofstor-FOage thatfollows isthe procedure descriptor for the9O specifiedroutine.0.PROCEDURE_DESCRIPTORand;O>.LOCAL_PROCEDURE_DESCRIPTORalso associatetheMOcodeaddresssofthe routine'sentrypointwiththeproce-NOdurename.'The associationbetweenthecodeaddressandtheKOH procedurenameallowsthe assemblerandlinkertoprocessBOthe .CODE_ADDRESSand .LINKAGE_PAIR directives.(For5Omore informationonlinkagepairs,seeSectionB.3.3.*?_ 5POYouneedtodeclarethecorrectamountofstorage,andspec-IOifythecorrectinitialvalues.'The.PROCEDURE_DESCRIPTOR?O5and.LOCAL_PROCEDURE_DESCRIPTOR directivesdonotJOcreatethestorageforthe procedure descriptor.-Instead,MOtheymarkthestoragethatfollowsasa proceduredescrip-KO>tor, resultinginaspecial object-modulerecord.-Usethe:O$ROUTINEand$PROCEDURE_DESCRIPTORmacrostoPObothmarkthe procedure descriptoranddefinethestorageforKOHthe procedure descriptor.)For informationonthesemacros, OseeChapter6.:xFor informationonthe procedure descriptorOformat,seethe$} OpenVMSCallingStandard p.*cmO'`!OB.3.2C SignatureBlockEO4The signatureblock describesthe parameters,parame-IOterpassingmethods,andreturnvalueusedbytherou-OOtine..Usingthe signatureblockis optional..Ifitisused,DO=the procedure descriptor referencesit.-$ROUTINEand?O$PROCEDURE_DESCRIPTORmacroscanbyusedtode-LOfinethe signatureblock.*For informationonthesemacros, OGseeGChapter6.* kO'! bOB.3.3CLinkagePairIO4Youcanmakecallstoroutinesmore efficientbyusing>Othe .LINKAGE_PAIRand.LOCAL_LINKAGE directives.CO .LINKAGE_PAIRand.LOCAL_LINKAGEstoreboththead-PO=dressofthe specified routine'scodeand procedure descriptor*O(atotaloftwo quad-words). EOForexample,the assemblerprovidesthe .CODE_ADDRESSEOand.LOCAL_CODE_ADDRESSS directivestoobtainthead-QO5dressofa routine'scode(a quadword).(ToobtaintheaddressNOofthe routine'scodeand procedure descriptor,youcanuse>Oeitherthe .CODE_ADDRESSor.LOCAL_CODE_ADDRESSSJO>in conjunctionwiththe.ADDRESS directive.)The followingMOexampleshowshowyouwouldusethese directivestoobtainNOthecodeaddressandand procedure descriptorofroutineX:t .CODE_ADDRESS%X:dt;%Store%address&of&X's%code&(entry%point).ADDRESSX;d;%Store%address&of&X's% procedure% descriptorAO .LINKAGE_PAIRperformsthesamefunctionasusingEO .CODE_ADDRESSand.ADDRESS together,asshownintheO5 followingexample: .LINKAGE_PAIR%XS)-OUsingLinkagePairsinRoutinesMO4Anotherexampleofhowyoucanuselinkagepairsisshown OinExampleB-1 andSExampleB-2.tExampleB-1vshowsaAOcodesequencethatdoesnotusealinkagepair:*PO*SPO*tPO OOWhilethepreviouscodesequenceworks correctly,ithastwoandofferstheleast capabilities.*Om?s OAregisterframe8routinecreatesitsownframeandthere-POforeexecutesinitsowncontext.(Aregister-frameroutineisIO5anintermediate-weightroutine,with intermediatecapabil-KOitiesand overhead.)Aregister-frameroutine maintainsthe3Ocontextofitscallersin registers.k OAstackframe;routinehastwo categories:)fixedandvari-Oable. 6 ` MWiththefixedframestack,thestackframesizedoesnotJ(vary.)AfixedstackframeroutinecreatesitsownframeOandstoresthecontextofitscalleronthestack.*AfixedIstackframeroutineisalsoan intermediateweightrou-E2tinewith intermediate capabilitiesand overhead.+TheGonly significant capabilitylackingwithafixedstackFframeroutineistheabilitytomakestandardcalls. `c JcWiththevariableframestack,thestackframesizemayIvary.,Avariablestackframeroutineisthefullfunc-Gtion, heavyweighttypeofroutine..ItcreatesitsownKlstackframeandstoresthecontextofitscallerontheMstack.'Thevariable stackframeroutineistheonlytypeof4routinethatcanmakestandardcalls.nD OAboundAframeroutineis generallyusedincompiledlan-HOguagessuchasAdaandPascalthatrequireadynamic,MO5uplevellinktodatainanouterroutine.+Most assembly-AOlanguage programmingdoesnotinvolveboundframeO routines.JV &OB.4.1CRoutine CapabilitiesNO4Thetypesof operationsthataroutinemayperformandtheKOamountofrequiredoverheadinthe routine'sprologueandOOepilogue instruction sequencesare differentforeachtypeofO=routine.NJOThe capabilitiesandoverhead requirementsofnullframe,MOregisterframe,fixedstackframe,andvariablestackframe'O5routinesare summarizedinQ5TableB-1:*Ql?p9OFormore informationon routines,seetheJ OpenVMSCallingO Standard . w@OB.4.2CEntryPrologueandExitEpilogue SequencesPO4Ingeneral,astandardsequenceof instructionsareusedwhenNOaroutinefirststartsandwhenit completes.*The followingJOcodeexampleshowsatypicalentryprologuesequenceforJO=avariable stack-frame procedure.*SeveralelementsoftheCOprologuemaybeomittedforlesscomplex routines.DOENTRY:KLDASP,&-32(SP);%Allocate%fixed%stack%area V 1zcSTQR27,%(SP)#c;%Save% procedure%value4zSTQR26,%8(SP);%Save%return%addressJzSTQR2,&16(SP);%Save%any% preserved&regs%that%are%used,z:STQFP,&24(SP);%Save%old%FPzMOVSP,&FP&;% Establish&current%framez $END_PROLOGUE/;%Marks%the&end%of%the%proloque 2 1ETheENTRYlabelmarksthecodeentrypointforthe(routine. 2AThe $END_PROLOGUEmacroisusedtomarktheendofthe proloque.- #JOThe followingcodeexampleshowsatypicalexitepilogueLOsequenceforavariablestackframe procedure.*Severalel-NO5ementsoftheepiloguemaybeomittedforroutinesoflessO complexity.z$BEGIN_EPILOGUE4;%Mark%the% beginning&of&the%epilogue 1zZMOVFP,&SP0Z;%Release%the%variable%stack%area5zLDQR28,%8(FP);%Fetch%return&address&/%8OCLEAR_X_ARRAY::zBSRR1,10$$;%R1%->%10$@O[10$:LDQR22,X_ARRAY_ADDR-10$(R1);%R22%->%X_ARRAY%0z RET(R26)$ ;%ReturnzS.endOB.5CExampleProgramHOUThe followingexampleshowsasimpleroutine, ROUTINE1,%Othatdoesthe following:Bq  ` <Takesasingle,longword parameterasinput. `O AOCallsanother function, ROUTINE2,passingitsown4 parameterasa parameterto ROUTINE2. `' G'AddsthereturnvaluefromROUTINE2andthevalueofManexternal longword,I,storingtheresultina register. ` KReturnstheresultoftheadditiontoitscallerinR0.>z$ROUTINE& ROUTINE1,% KIND=STACK,%SAVED_REGS=z$LINKAGE_SECTIONzI_ADDR:%.address%I%$;%Linkage&to&external&Iz\ $CODE_SECTION1$;%The%prologue% instruction%sequence,$;%is% generated%by%$ROUTINE%by$3;%defaultz;%Routine%bodyz.BASEpR27,$LS$$;%Inform% assembler&that&$-;%R27%->%linkage%sectionzuLDQR0,&I_ADDR$u;%R0%->%IzLDLR2,&(R0)$;%R2%<-%IzMOV1,%R25/$;%AI%<-%1&(R16%already%contains$L;Jthe& argument)z$CALLpROUTINE20$;%Call& ROUTINE2,% R27->linkage%sectzADDLR2,&R0,%R0%$;%retval%<-%retval&+%Iz$$RETURN.$$;%$RETURN& generates%the%epilogue$l;% sequence. z $END_ROUTINE%ROUTINE1DU Iw 0 BOTable5-3:8.ENABLEand.DISABLESymbolic Arguments O OLongFormFShortFormFDefault Condition:Function O O ALIGN_CODEODisabled4Thecode alignmentoptionalignscertainbranchtar-GDPgetlabels.)The ALIGN_CODEoptionisdisabledfortheEDassemblyunitifanyoneofthe followingistrue: T- <-/NOALIGNMENT=codeis specifiedonthecommandline. T >.DISABLE ALIGN_CODEis specifiedinthesource^program. T 6The/ALIGNMENT=codeoptionis defaulted. DbSeebSectionB.72ybfor informationon optimizationsandD automatic alignment.O4 ALIGN_DATAL4Disabled4When ALIGN_DATAis disabled,thedatastoragedi-DDrectivesputeach succeedingitemonthenextbyteD boundary.AD_When ALIGN_DATAisenabled,thedatastoragedi-HDrectivesputeach succeedingitemonnatural boundariesGD(suchaswordsonword boundaries, longwordsonlong-?Diword boundaries)addingpadbytesas necessary.ED Accessingdataonanythingotherthannaturalbound-GD; ariesusuallyincursa significant performancepenalty.ED Youcanenableordisablethe ALIGN_DATAoptionforED specificrangeswithinyourprogram.*Formoreinfor-6Df mationon automaticdata alignment,see$ f Section5.2.D Also,see SectionB.72! for informationon optimizationsandD  automatic alignment.*I%?*I$ ) ~?*I ?VJx , O O+LongFormShort+FormDefault+ Condition:Function OF OFLOATOEnabled?Controlswhetherthe assembler generatesfloating-pointFD instructionswhen optimizingcodeand performingcode-Dwlabel alignment.GD Currently,theonlyfloating-point instruction generatedBDIbythe assemblerduring optimizationand alignmentBD processingisFNOP,thefloating-point no-operationGD instruction.'Ifyouspecify.DISABLEFLOAT,theassem-JDSblerdoesnotgenerateanyfloating-point instructionsas=Dpartof optimizationand alignment processing.GD%Theinitialvalueofthisoptionis specifiedbythe4D~/ENVIRONMENT=[NO]FLOATcommandlineop-GDtion.-ThelastvalueoftheFLOAToptionattheendCD/ofassembly determineswhetherFLOATisenabledorD DISABLED.OGLOBALNGBLEnabled?WhenGLOBALisenabled,the assembler implicitlyEDZtreatsany undefinedsymbolasanexternal referenceDDdefinedinanothermodule.,IftheGLOBALoptionisHD  disabled,the assemblerissuesawarningand implicitlyEDctreatsthe undefinedsymbolasanexternal referenceJDassumedtobedefinedinanothermodule.'ThelastvalueID oftheGLOBALoptionattheendofassembly determinesBDm whethertheGLOBALoptionisenabledor disabled.Kz i  O O+LongFormShort+FormDefault+ Condition:Function OF gO LOCAL_BLOCKLSBDisabled4Usedtooverridethedefault assemblerbehaviortodefineHDa temporarylabelblock.+(A temporarylabelisoftheDwformn$where w n/w representsanumber.)*A temporaryMDlabelblockisusually delimitedbytwouserdefinedlocalBD(orgloballabels.'However,the.ENABLE LOCAL_BLOCKPD directivedefinesthestartofablockthatis terminatedby"Doneofthe following: T^ 5^Asecond.ENABLE LOCAL_BLOCK directive. T ;A.DISABLE LOCAL_BLOCK directivefollowedbyC6a user-definedlocalorgloballabel,ora.PSECT directive.O4PEEPHOLEO4Disabled4Peephole optimizationreducesthestrengthofcertainGD instructionsand eliminates instructionswhere possible.GDThePEEPHOLEoptionisdisabledfortheassemblyunit5D>ifanyoneofthe followingistrue: T 6/NOOPTIMIZE=PEEPHOLEis specifiedonthecommandline. T <.DISABLEPEEPHOLEis specifiedinthesourceprogram. Ts /s ThePEEPHOLEoptionis defaulted. D See SectionB.72y for informationon optimizationsandDP  automatic alignment.*K ?)Ld  O O+LongFormShort+FormDefault+ Condition:Function OF OSCHEDULEQDisabled4 Instruction scheduling optimizationreorders instructionsHDtomore optimallyutilizethe instruction pipeline.+TheFDwSCHEDULEoptionisdisabledfortheassemblyunitif1Danyoneofthe followingistrue: TT 6T/NOOPTIMIZE=SCHEDULEis specifiedonthecommandline. T, <,.DISABLESCHEDULEis specifiedinthesourceprogram. T /TheSCHEDULEoptionis defaulted. DSeeSectionB.72yfor informationon optimizationsandD automatic alignment. O *LL?7q [BOExampleB-4:8Enablingand DisablingData Alignment Oc.PSECT%D1,DATA,NONEXE@O.DISABLE% ALIGN_DATA;&This%is%the&default%state 1O.BYTEp1;&offset%=&0O;.QUADp2;;&offset%=&1O.PSECT% D2,DATA,NOEXE@O.ENABLE& ALIGN_DATA;&Turn%on% automatic& alignment P2O.BYTEp1;&offset%=&0O[.QUADp2I[;&offset%=&8%(pad%bytes%are%added%at%offsets%1&-%7){ >OTableB-2:8 DirectivesUsing Automatic Alignment O OF Directive3F AlignmentBoundary Ob O .WORD3 word(2)O$ .SIGNED_WORD3$ word(2)O .LONG3 longword(4)O .ADDRESS3 quadword(8)O .OCTA3 octaword(16)O  .QUAD3  quadword(8)O .CODE_ADDRESS3 quadword(8),O .LOCAL_CODE_ADDRESSquadword(8)Ox .LINKAGE_PAIR3x octaword(16)-O .LOCAL_LINKAGE_PAIRoctaword(16).Ol .PROCEDURE_DESCRIPTORIquadword(8)O .LOCAL_PROCEDURE_O3 DESCRIPTOR3 quadword(8).O .F_FLOATING(.FLOAT)longword(4)/O& .D_FLOATING (.DOUBLE)quadword(8)O .G_FLOATING3 quadword(8)O .S_FLOATING3 longword(4)O .T_FLOATING3 quadword(8)O .BLKA3 quadword(8)O .BLKD3 quadword(8)O .BLKF3 longword(4)O{ .BLKG3{ quadword(8)O .BLKL3 longword(4)On .BLKO3n octaword(16)O .BLKQ3 quadword(8)Ob .BLKS3b longword(4) O O Directive3 AlignmentBoundary O Ox .BLKT3x quadword(8)O .BLKW3 word(2)Ol .ASCID3l quadword(8)O .INSTRUCTION3 longword(4) O  # 0OB.6C EstablishingSelf-AddressabilityLOUAMACRO-64routinecan establishaddressabilitytoitsownTOlinkagesectionwithoutthehelpofitscaller(thecallingrou-OOtine).-Inthiscase,thecallerdoesnotpassthe procedureOO^valueinR27,asinastandardcall.+ Therefore,theroutineROmust establishitsownbaseaddresswithinitslinkagesection.G MOTo accomplishself-addressability,thecodeandlinkagesec-OOtionsmustbeadjacenttoeachother.)ThisrequiresthemtoPO5resideinthesamepsect.(Becausethe assemblerdoesnotal-JOlow placementofdataina EXE/NOMIXpsect, instructionsEOmustbeplacedinanEXE/MIXpsect.,When debugging,OO>thedebuggerviews executiontohave transferredintoadataKOarea,becausethedebuggerviewsallMIXpsectsasdata. MBNOTE MCThedebuggercan correctlydisplaydecodedinstruc-EtionsinaMIXpsect,butitcannotachievesource@Rline/program-counter correlationandsourceline scrolling. xOExampleB-32R representsthe CLEAR_X_ARRAYroutine,0Owhichhasno procedure descriptor.*OFO  FOOtherroutinesmaycallthe CLEAR_X_ARRAYroutineus-KOingonlyitscodeaddressanda nonstandardlinkage.,TheEO< CLEAR_X_ARRAYroutineexecutesinthecontextofitsTOcaller,itdoesnotcreateitsownframe.*It establishesabaseROaddressinitscodesectionandbecauseitslinkagesectionisTOEadjacenttoitscodesection,itcanaccessdatainitslinkageOsection.&nr6OB.7C Optimizationand Automatic Alignmentrangeof statements.t `J+OB.7.1C AutomaticData AlignmentQO4Accessto naturallyaligneddataisfasterthanaccesstoun-HOaligneddata.,MACRO-64doesnotaligndatabydefault.QOInstead,itplacesdataexactlyas specified,withnopadding.LO=With automaticdata alignment selected,data directivesareLO automaticallyalignedonanatural boundary.)PadbytesareNOaddedas necessarytoachievenatural alignment.'LabelsthatOOGoccurwiththedataare automaticallyalignedwiththedata. /OB.7.1.1C ControllingData AlignmentKO)Youcancontrolwhenyouwanttohavedata alignmentinLOyourprogram.&Youdothisbyusingthe.ENABLE ALIGN_DATACOand.DISABLE ALIGN_DATA directives.,Notethatauto-,The.ENABLE_ALIGN_DATA directivecausestheas-Lsemblertoaligndataobjectsonnaturalratherthanbyte boundaries.>OB.7.1.2C Directivesfor AutomaticData AlignmentFO)The followingMACRO-64datastorage directivesprovide/O optional, automatic alignment.'See>TableB-2.*>Dl?UKOSpecifya.PSECT directive alignment attributethatalignsROthepsectonaboundarythatisatleastas stringentasthe.O< automaticallyaligneddataitems.2OB.7.2C AutomaticCodeLabel AlignmentDO4 Automaticcodelabel alignmentimprovesI-cacheuti-FOlizationandmulti-instructionissue./This optimizationFOalignscertaincodelabelstoaquadwordboundaryby@O=paddingwithNOPandFNOP instructions.0Usethe=O/ENVIRONMENT=NOFLOAT qualifiertosuppressFNOPO instructions.NKOCodelabelsthatarethetargetofbackwardbranchesarePOaligned.)Also,labelsthatarethetargetofforwardbranchesPO5thatarenotalsothetargetofafallthrougharealigned. N@OUsethe/ALIGNMENT=CODE qualifierorthe.ENABLEKO ALIGN_CODE directivetoselect automaticcodelabelalign-O5ment.! )OB.7.3C Scheduling OptimizationOO4 Schedulingreorders instructionstoreducepipelinestallsandPO increasesthechancesformulti-instructionissue.(Itonlyre-ROorders instructions;itdoesnotchangethe instructionsortheSO= registersusedinthe instructions.'In addition, instructionsareOOnot scheduledacrosslabels.( Therefore,the structureofyour Oprogramis retained. p_UsNote p_FIfyouusethesameregisterfortwoormorelogi-EQcallydistinctactions,the scheduler schedulestheseKactionsseriallyinthesequenceyouspecify.'IfyouuseG different registersfortwoormore logicallydistinctJZactions,the scheduler schedulestheactionsin parallel,4 providingfaster execution performance.  COUsethe/OPTIMIZE=SCHEDULE qualifierorthe.ENABLEDOSCHEDULE directivetoselect scheduling optimization.m! C'OB.7.4CPeephole OptimizationJO4Peephole optimization restructuresyourprogramforfasterMO execution.+Todoso,itreducesthenumberof instructionsJOexecutedandreplaceslong-executing instructionswithin-KO= structionsthatrequireless executiontime.,AlthoughthisHO optimizationmayincreasethenumberof instructionsinIOmemory,thenumberactually executed,asyoufollowtheKOGcodepaths, decreasesorremainsthesame.*Peepholeopti-MOmizationmatchesshortcodepatternsandreplacesthemwithMOmoreoptimal sequences.)Italso eliminatesdeadcode.((NotePOQthatdeadcodeisoftencreatedbythecodechangesmadebyMOpeephole optimization.*Thisdeadcodeis eliminatedbysuc-LOcessive iterationswherepeephole optimizationis selected.)JOZPeephole optimization eliminatessomebranchesbyinliningGOor replicatingshort sequencesfromthebranchtarget.COUsethe/OPTIMIZE=PEEPHOLE qualifierorthe.ENABLEBOPEEPHOLE directivetoselectpeephole optimization.~2OB.7.5CUsingMACRO-64for PerformanceJO4 High-orderlanguage compilersdo optimizationscalledloopGO unrollingand inlining.*MACRO-64allowsyoutoperformKOthese optimizationsmanuallythroughcoding techniques,al-QO=thoughitdoesnotofferspecific qualifiersor directivesforOtheseoptimizations.f MOLoop unrollingreducesthenumberofbranchesthatmustbeMO executed.)Youcanunrollloopsusingthe.REPEAT directive.BO5The followingexampleshowsmanualloop unrolling:O10$:;&Copy%loopO.repeat&10*;&Unroll%the%loop,% factor=10<ILDAR18,&-1(R18);& Decrement% quad-word%countBLTR18,&20$/;&Branch%if% quad-word%count%<%0LDQR0,%(R17);&Load%a% quad-word!STQR0,%(R16)"!;&Store&the% quad-wordiLDAR16,&8(R16),i;& Increment%the%target&addressLDAR17,&8(R17),;& Increment%the%source&addressBR%10$OA20$:O.endrTf *DOLoop unrolling complimentedwithMACRO-64 shchedulingMOandpeephole optimizationscan significantlyincreaseperfor-NO5mance.'Forbetterloop scheduling,youcanmakethecounter5O decrementandtheloopexit separable.O10$:;&Copy%loopOZ.repeat&10*Z;&Unroll%the%loop,% factor=10<LDAR18,&-1(R18);& Decrement% quad-word%countLDQR0,%(R17);&Load%a% quad-word2BLTR18,&20$/2;&Branch%if% quad-word%count%<%0zSTQR0,%(R16)"z;&Store&the% quad-wordLDAR16,&8(R16),;& Increment%the%target&address LDAR17,&8(R17), ;& Increment%the%source&addressRBR%10$O20$:O.endr WNOHighoderlanguage compilersofteninlinearoutinecallifROthecalledroutineissmallandisdefinedinthesamemoduleTO5fromwhichitiscalled.(Toinlinearoutinecall,thecompilerROreplacestheroutinecallwiththebodyofthecalledroutine.NOYoucanusemacrostomanuallyinlineshort,localroutinesO>with MACRO-64../OB.7.6CViewing OptimizationResultsMO4Youcanviewtheresultsof optimizationby comparingcodeGOfrombeforeandafter optimization..Usethe/LISTandAO /MACHINE_CODEcommandline qualifiers describedinO=Section1.2.1.:D=Usingthese qualifiersprovidesyouwitha)Obinarymachinecodelisting.*O?$`F(O C.!Using"LSE!with!MACRO-64IOThisappendixexplainshowtousetheLanguage-SensitiveAOEditor(LSE)withtheMACRO-64 language..ForLSELOBtofunction correctly,LSEmustbe installedpriortotheOMACRO-64 assembler.qU +OC.1BInvokingLSEGOUTouseLSEwiththeMACRO-64 language,youmustnamePOyourprogramsourcefilewitha.M64file extension.'Forex-LOample,toeditafilenamed TEST.M64,enterthe followingO^command:O$&LSE%TEST.M64KOUsingthe.M64file extensioninvokestheLSEeditorand@OplacesyouintheMACRO-64language environment.M +#SOIfyouchoosetousea differentfile extension,youcanstillGOuseLSEintheMACRO-64language environment.(Forex-LO5ample,toeditafilenamed TEST.ASM,enterthe followingOcommand:+ $%LSE/LANGUAGE=MACRO64%TEST.ASM!&0OD.1B AssemblerFeaturesinMACRO-64HOUThissection describesMACRO-64featuresnotpresentinOVAXMACRO.O% ` .BASE directive LWThe.BASE directiveisprovidedforimplicitbaseregistersupport. `/ 7/.PROCEDURE_DESCRIPTORand.LOCAL_PROCEDURE_  DESCRIPTOR directives! eDWThese directivesmarkthe specified identifierasa7 procedure descriptor.,.PROCEDURE_DESCRIPTORGdeclaresan identifierasagloballabelthatdefinesCatheaddressofthe procedure's description(adataBaddress)and associatethe procedure'sentrypointB(acodeaddress)withthenameofthe procedure.2k.LOCAL_PROCEDURE_DESCRIPTORperformsaPsimilar function,definingalocallabelratherthanaglobalIlabel.*Nostorageis allocated.*Formore informationon!tthese directives,seetChapter5. ` 9 .LINKAGE_PAIRand.LOCAL_LINKAGE_PAIRdirec-Ltives*7lOMWThese directivescausealinkagepairtobestoredattheDcurrentpsectandcurrentlocationcounter..Alink-JagepairconsistsofacodeaddressandtheaddressofHathe specified identifier.+Formore informationonthese directives,seeChapter5. `9 19 .CODE_ADDRESSAND.LOCAL_CODE_ADDRESS directives*|lOA! NWThese directivescausethecode address(es)ofthe specifiedN identifier(s)tobeplacedatthecurrentpsectandcurrent!locationcounter.'SeeChapter5!Wformore information. ` .ELSE directive*kO)eAWMACRO-64 introducesanewconditional-assemblydi-Irective,.ELSE.Itcanbeusedin conjunctionwiththe>.IFand.ENDC directives(commontoVAXMACROBaand MACRO-64)tospecifyasequenceof statementsGtobe assembledwhenthe conditioninthe controllingL.IF directiveisfalse.*Whilethe.ELSE directiveissim-DkilartoVAXMACRO's .IF_FALSE directive,itdiffersFinthatyoumayspecifyatmostone.ELSE directiveEwithina .IF/.ENDCblock.+ .IF_FALSEisalsoprovided.tforVAXMACROcompatibility.)SeetChapter5tformore information. `L L.INCLUDE directive*7lO= ?WMACRO-64providesanew.INCLUDE directivethatJcausesa specifiedfiletobe textuallyincludedintheG assembly.'Theformatofthis directiveisasfollows:C.INCLUDE%"file_specification"%["Directory_search_list"]! NWTheeffectofthe.INCLUDE directiveissimilartothatofJthe#include directiveinCortheREQUIRE statementinBLISS. ` 6Optionalcase sensitivityin identifiers#! <WYoucanspecifythe /NAMES=AS_IS command-lineH qualifiertocausethe assemblerto distinguishbetweenL uppercaseand lowercaselettersin identifiersandexternal=asymbolnames.*Thedefaultis/NAMES=UPPERCASE;J uppercaseand lowercaselettersarenotdistinguished,as withVAXMACRO.'SeeXChapter1!formore information. ` BLexicaloperatorsupportfor10lexical operators.*XlO RuGWMACRO-64provides10lexical operators,threeofwhichCare compatiblewithVAXMACRO'sthreemacrostringA operators.,MACRO-64lexical operatorscanbeusedHainanycontext,andarenot restrictedtomacros.-SeeChapter3!Xformore information. `9 "9Lexicalstringsymbols*|lOv WSeecWChapter3!Wformore information. ` )Lexicalescapeoperator(%%)*clO WSeecWChapter3!Wformore information. ` :Lexical substitutionoperator(%lexsym_name%)*clO WSeecWChapter3!Wformore information. ` =Moreliberaluseofvalue-ofoperator( \ )*clOp F=WMACRO-64aswellasVAXMACRO recognizestheFvalue-ofoperator( \ )inmacro invocationsandinB default-valuestringsfor parametersin.MACROdi-Ga rectives.'In addition,MACRO-64 recognizesthevalue-of:operator( \ )inthe following contexts:T *J-DWitheitherorbothofthetwo argumentsinthe.IF5Y( DIFFERENTand.IF IDENTICAL directives.E-DWiththeargumenttothe.IFBLANKand.IFNOT_YBLANK directives.D-DWiththesecondargumenttothe.NCHRand.IRPCY directives.CW-DWiththesecondand subsequent argumentstotheY.IRP directive.:/-DWith argumentstolexical operators.)See5/Chapter4!Yformore information. ` MACRO64$symbol*5mOxp# FCWMACRO-64 implicitlydefinesanewsymbol, MACRO64$,Eforusein conditional assembly..Thissymbolisde-Gfinedinall uppercaseandall lowercaseletterswhenDa /NAMES=AS_ISis specifiedonthecommandline.)This/symbolmightbeusedasfollows:&>.MACRO% ADDRESS32& EXPR_LIST i.IF&DEFINED%MACRO64$i.LONG% EXPR_LISTi .IF_FALSEi^.ADDRESS% EXPR_LISTi.ENDC.ENDM% ADDRESS326 ADDRESS32% ` $ Automaticdata alignmentH=W.ENABLE_ALIGN_DATAcausesdatatobe naturallyaligned.'SeeChapter5. `/ / Optimizations*slO DWThe assembler optionallyperformsanumberofopti- mizations.(SeeChapter2u(commandline)andiChapter5 (.ENABLE). ` $OPDEFmacro*slOR*ismOHCW$OPDEFissuppliedinplaceofVAXMACRO's.OPDEF directive. `/ -/OpenVMSCallingStandardMacros:X/. $ROUTINE $SEND_PROLOGUE] $CALL] $LINKAGE_SECTION $CODE_SECTION $DATA_SECTIONP $LINKAGE_PAIRP $BEGIN_EPILOGUE $RETURN $END_EPILOGUED $PROCEDURE_ DESCRIPTOR ` ! .INSTRUCTION directiveHCWFormore informationonthe .INSTRUCTION directive, seeXChapter5. `/ 3/ .BEGIN_EXACTand .END_EXACT directives*XslO|pR=WFormore informationonthese directives,see>WChapter5.*>lOO?OD.2BVAXMACROFeaturesNotPresentinMACRO-64KOUThissectioncontainsfeaturesinVAXMACROthatarenot Opresentin MACRO-64.U+ `   EXE/NOEXE restrictionREWMACRO-64allowsonly instructionstobeplacedinaHpsectwitheithertheEXEorMIX attributes,orboth.KDatacanbeplacedinapsectwitheithertheNOEXEorCaMIX attributes,orboth.)VAXMACROallowsinstruc-Htionsandordatatobe arbitrarilyplacedinpsects. `9 C9Settingthecurrentlocationinan EXE/NOMIXpsect% FWMACRO-64doesnotpermitthecurrentlocationcounterCtobechangedinapsectwiththeEXEandNOMIXF attributes.'VAXMACROdoesnothavethis restriction. ` !Radixunary operatorsBWVAXMACROallowsunaryradix operatorsonexpres-Asions.+MACRO-64allowsunaryradix operatorsonlyFtospecifytheradixofnumeric constants.-TheoctalAaconstant^O123isvalidwithbothVAXMACROandE MACRO-64.*Theoctal expression^O(10+10)isvalid@withVAXMACRO;itisnotvalidwith MACRO-64. ` 'TheRegistermaskoperatorJ ?WTheVAXMACRO^Moperatorisnot supportedonC MACRO-64.)BecauseregistermasksarenotneededbyEanyMACRO-64 instructionsor directives,thereisno$aneedforthis operator. ` *.ALIGNdoesnotsupportPAGEHWBecausetheAlpha architecturehasvariablepagesizes,BMACRO-64doesnotsupportPAGEasanargumentto!the.ALIGN directive. ` >Nocount specifiersondatastorage directives7  FWMACRO-64doesnotallowarepeatcount expressiononIanydatastorage directivesuchas.BYTEor.WORD.TheH%REPEATlexicalfunctioncanbeusedforthispurpose. ` +Nosupportfor.CROSS/.NOCROSStGWThereisnosupportforthese directivesin MACRO-64. ` "Nosupportfor.DEBUGS)EWThereisnosupportforthis directivein MACRO-64.FHowever,eventhoughthis directiveisnot supported,DMACRO-64providessymbolic informationintheobject.amoduleforusebythe debugger. ` !No.DEFAULT directivex=WThis directiveinnot applicableon MACRO-64. ` 0.ENABLE/.DISABLE directive arguments! FWTheMACRO-64 assemblerdoesnotsupportthe following@ argumentstothe.ENABLEor.DISABLE directives:e3-D ABSOLUTE-Not applicableonMACRO-64O-DDEBUG-D SUPPRESSIONN-D TRACEBACK-D TRUNCATION `L &L.END directive differencesj@?WVAXMACROrequiresthe.END directive.)MACRO-64Gdoesnotrequirethis directive.(MACRO-64requirestheNoptional identifierthatfollowsthe.END directivetobea6a previouslydeclared procedure descriptor. ` +.ENTRY directivenot supported HFWInstead,a$ROUTINEmacrothat accomplishesasimilarfunctionisused. `/  /No.GLOBAL directive HCWThereisnosupportforthis directive.-VAXMACROHprovidedthis directiveforMACRO-11 compatibilityonly. `/ $/No .H_FLOATING directive HLWSincethisdatatypeisnotanativeMACRO-64type,this( directiveisnot supported. `/ /Changesto.IDENTHHWTheargumenttothe.IDENT directivemustbeaquotedliteral. `/ /No.LINK directive`7WThereisnosupportforthis directive. ` No.MASK directiveg=WThis directiveisnot applicableto MACRO-64. ` No.NTYPE directiveHAWThis directiveisnot supportedby MACRO-64.-TheC%TYPElexicaloperatorprovidesasimilar function. `/ /No.OPDEF directiveHDWThereisnosupportforthis directive.-The$OPDEF0macroprovidesasimilar function. `/ ,/ Differencesin.PSECT directiveHAWThe following.PSECT argumentsarenot supported: PAGE,LIB,andUSR. `/ /No.REFn directivesr9WThereisnosupportforthese directives. ` . Differencesin.RESTORE directive@WOn successive .RESTOREsforthesamepsect,VAXEMACROrestoresthecurrentlocationcountervalueasJthelastlocationcountervaluesavedforthepsectbe-Daing restored.*MACRO-64restoresthecurrentlocationLcountervalueasthelocationcountervaluesavedforthe%matching.SAVE directive. ` "No .TRANSFER directivep7WThereisnosupportforthis directive. ` . Differenceswith.ENDMand.ENDRS! )?WVAXMACRO considersthe.ENDMand.ENDRdirec-Htivestobesynonymsofeachother.'MACRO-64 considersE.ENDMand.ENDRtobe distinct.)YoumustendmacroGa definitionswith.ENDMandyoumustendrepeatrangeswith.ENDR.O E."Error!MessagesLOThisappendix describesthemessagesproducedbytheAlphaOMACRO-64 assembler.NOThe descriptionofeachmessagegivesthe severity,followedDOby additional explanatorytextand suggestedaction.>O ADDTRUNC,-Storinganaddress expressionintoaE(storage allocationlessthanthesizeofanaddress-willresultindata truncation.Informational:4KThe assemblerhasstoredavaluetooHulargeforthe allocatedspace.+Data truncationhasoc-curred.hUserAction:"hAllocatemorestorage.! AO ALIGNFILLIGN,-Theoptional.ALIGNfillpatternisJ(beingignored.'Itisonlyvalidforpsectsthatdonot4possesstheEXEandNOMIX attributes.Warning:>`Theoptionalfillpattern specifiedisignoredSusinceitisonlyvalidforpsectsthatdonotpossesstheEXE!andNOMIX attributes.hUserAction:9hOmitthefillpatternorspecifytheMIXpsect attribute. :OALIGNFILLTRUNC,-Thevalue specifiedforthe@(.ALIGNoptionalfillpatternshouldbeaninte-Kgerintherangeof0...255.)Data truncationwillFoccurwiththe currently specifiedfillpatternina"2bytestorage location.Warning:A`Thevalue specifiedasthefillpatternforthe:&.ALIGN directiveshouldbeintherange0&...e&255.(DataL~ truncationoccurswhenthe specifiedvalueisoutofthisrange.rUserAction:>rSpecifyasmallervalueforthefillpattern.H7OALIGNLABELIGN,,The ALIGN_LABELoptionhas6(beenreplacedbythe ALIGN_CODEoption.Error:;The ALIGN_LABELoptionhasbeenreplacedby"the ALIGN_CODEoption.UserAction:-Usethe recommendednewoption. bThe indicatedmacro parameternameisillegal.^UserAction:3^ExamineyoursourcecodeandconsultChapter1.* zlOw.O BADMACRONAME,,Illegalmacroname.kError:3kThe indicatedmacronameisillegal.UserAction:1Checkyoursourcecodeandconsult^Chapter2.*!lORi R(=O BADOPERAND,,Invalidoperandtypefor operator.kError:=kTheresolvedoperandtypeisinvalidforthe specified operator.^UserAction:7^Consultthe documentation descriptionsof2 operators, operands,and expressions.!3O BADPARAMSTR,,Illegal parameterstring.kError:=kThestring specifiedasamacro parameterisinvalid.^UserAction:6^Checkyoursourcecodeandconsultthedocumentation.d! 2:BO BASEFAIL,,ArgumentNinvalid.&The assemblerfailedC(tofindabaseregister specifiedwithapreviousF.BASE directivetoformaregister expressionoftheform offset(Rn).uError:DuThe assemblerfailedtofindabaseregisterspec-Hifiedwithaprevious.BASE directivetoformavalid:&register expressionoftheform offset(Rn).UserAction::Checktheuseof.BASE directivesandthe- instructioninthesourcecode.\! 2?O BEGEXPSC,, .BEGIN_EXACTisnotvalidinapsect3(withtheNOEXEandNOMIX attributes.Error:BA .BEGIN_EXACT directiveisnotvalidinapsect3withtheNOEXEandNOMIX attributes.UserAction:$Checkyoursourcecode.E;O BYTEALIGNIGN,,The BYTE_ALIGNoptionhasbeen0(replacedbythe ALIGN_DATAoption.Error::The BYTE_ALIGNoptionhasbeenreplacedby"the ALIGN_DATAoption.UserAction:-Usethe recommendednewoption.g =9O CONPSECTATTR,- ContradictoryPSECT attribute.kError:EkA previously specifiedpsect attribute conflictswith)theflaggedpsect attribute.^UserAction:6^Consultthe documentation descriptionof9the.PSECT directiveandpsect attributes.K !DOCONTEOF,-Endoffile encounteredafterlinecontin-(uation.Error:?The assembler encounteredendoffilewhentheBpreviousline encountered specifieda continuation.UserAction:$Checkyoursourcecode.9ODATAALIGNTOBIG,,Datarequires alignmenttoo(largeforPSECT.Error:AThe alignmentrequiredfora specifieddataitem*istoolargeforthepsect.UserAction:4Checkthepsect attributesandinsureLthatthepsect alignmentisgreaterthanorequaltothe4hrequired alignmentofthedataitems.>ODATANOTINNOEXE,,Data declarationsmustbeina7(psectwiththeMIX,orNOEXE attribute.Error:@Adata declaration,suchasadatastoragedi-Nrective,hasbeen specifiedinapsectwith incorrectpsectu attributes.UserAction:4MakesurethepsecthastheMIX,or hNOEXE attributeset.)sAODIRNOTINNOEXE,- Directivemustbeinapsectwith*(theMIX,orNOEXE attribute.Error:?The directive specifiedmustappearinapsect4withtheMIXorNOEXE attributeset.UserAction:6Checktoinsurethatapsectwiththe8 appropriate attributeshasbeen specified. ]@O DISPTOOLGE,,Branchoffsetistoolargeforthis( instruction.Error:IThe specifiedoffsetistoolargeforthis instruction.^UserAction:<^Checktherangeofthe specifiedtarget.(It7mustbeinthe inclusiverange-1048576...1 +1048575. U;O DUPLEXTERN,-EXTERNitemismultiplydefined.kError:AkTheitemdeclaredas externallydefinedwiththeC .EXTERNAL attributealsohasa conflictingmultiple3 definitionwithinthisassemblyunit.UserAction:<Checkthe definitionsofthe specifieditem. -! 9O DUPLGLOBAL,, Duplicateglobalname detected.kWarning:<`kA duplicateglobalhasbeendetectedbythe assembler.^UserAction:<^Checkall referencesinyoursourcecodetothisname. 7ODUPMACPARAMNAME,, Duplicatemacro parameter(name.Error:;The indicatedmacro parameternamehasbeen duplicated.UserAction:$Checkyoursourcecode.X.CO ENDEXPSC,- .END_EXACTisnotvalidinapsectwith-(theNOEXEandNOMIX attributes.Error:@A .END_EXACT directiveisnotvalidinapsect3withtheNOEXEandNOMIX attributes.UserAction:$Checkyoursourcecode.w+OEOLEXP,,Endofline expected.kError:>kThe assemblerexpectednomoreinputfromthecurrentline.^UserAction:$^Checkyoursourcecode.BBOESCAPE,,Illegalescapesequenceinstringliteral;&(expected\,",x,orX.Error:>The specifiedescapesequence specifiedinthe'stringliteralisillegal.UserAction:$Checkyoursourcecode. ! 2n?OEXP32BITTRUNC,,Expectedanintegerintherange@(0...(2^32)-1forunsigned expressionOR-D(2^31)... +(2^31)-1forsigned expression.-Data# truncationto32bits.uWarning:=`uIntegerfoundwasnotintheexpectedrange.UserAction:8Checkyoursourcecode.(Theliteralmusthbeintherange0Rh...1h(2^32)-1foranunsigned expressionOR-(2^31)...3" +(2^31)-1forsigned expression.+Data0 truncationto32bitswilloccur.!>O EXP32BITTYPE,,Expectedanintegerintherange@(0...(2^32)-1forunsigned expressionOR->(2^31)... +(2^31)-1forsigned expression.Error:@Expectedanunsignedintegervalueintherange u0u...Au(2^32)-1orasignedintegervalueintherange-(2^31)... +(2^31)-1.hUserAction:$hCheckyoursourcecode." :OEXPBINEXPTERM,,FoundXXXXXwhen expectinga7(binaryoperatoror expression terminator.Error:>The assemblerexpectedabinary operator,suchUastheplussign( + )forbinary addition,oranitemtoendCuthe expression,suchastherightbracket( > ).UserAction:4Checktheflaggediteminthesourceh statement.o#)EAO EXPFPREG,,ArgumentNinvalid.(Expectedafloating(point register.Error:<The instructionargumentcitedisinvalid..A2floatingpointregisteris expected.UserAction:7Checkyoursourcecodeandtheinstruc-tiondocumentation.c$)9>O EXPGENREG,,ArgumentNinvalid.*Expectedagen-(eral register.Error:<The instructionargumentcitedisinvalid..A*generalregisteris expected.UserAction:7Checkyoursourcecodeandtheinstruc-tiondocumentation.% @O EXPIDPROC,-ArgumentNinvalid.'Expectedaniden-4(tifier representinga procedurevalue.Error:ATheargumentcitedisinvalid.(The assemblerex-Fpectedauser identifierwhich representsa procedureuvalue.UserAction:7Checkyoursourcecodeandtheinstruc-htiondocumentation.'&The instructionargumentcitedisinvalid.+The4u assemblerexpectedanintegerliteral.UserAction:7Checkyoursourcecodeandtheinstruc-htiondocumentation.+ >O EXPREGOFF,,ArgumentNinvalid.*Expectedagen-@(eralregister expressionoftheform offset(Rn).Error:AThecitedargumentisinvalid.(The assemblerex-Kpectedageneralregister expressionoftheforminteger_*u offset(Rn)forthis argument.UserAction:9Checkthesourcecodeandthe instructionhdocumentation.,>O EXPRESEXP,-ArgumentNinvalid.*Expectedanex-A(pressionwithnoforward references resolvabletopsect+/-offset.Error:<Theargumentcitedisinvalid.,The assemblerBuexpectedan expressionwithnoforward references.UserAction:7Checkyoursourcecodeandtheinstruc-htiondocumentation.f- )<9O EXPSTACKOVER,-InternalSEM expressionstack( overflow.Fatal:-Aninternalerrorhas occurred.^UserAction:5^Gatherasmuch informationaspossibleHaboutthe circumstancesunderwhichtheerror occurred,andsubmitanSPR.. @O EXPTOOCMPLX,, Expressionistoocomplextoevalu-(ate.Error:DThe expressionistoocomplexforthe assemblerto evaluate.UserAction:4Trygroupingthe expression componentsFusinganglebrackets(<>).*Themostcomplexexpres-Khsionformhandledbythe assemblerresolvestotheform:C OPERATOR whereOPERATORisoneof:(+,-, %*,/,@,\,&,orIr!.)Consultthe documentationforfurther descriptionsof6the assembler evaluationof expressions./! )AO EXPZEROFF,,ArgumentNinvalid.&Expectedageneral?(register expressionoftheform0(Rn)or(Rn).Error:<Thecitedargumentisinvalid.,The assemblerKexpectedageneralregister expressionoftheform0(Rn).UserAction:7Checkyoursourcecodeandtheinstruc-tiondocumentation.0! ;O FOUNDEXP,-FoundXXXXXwhen expectingoneof!(the following:'XXXXX.Error:BAn unexpecteditemwasfoundinalocationwhere) somethingelsewas expected.UserAction:6Checkthe unexpecteditemfoundinthe>source statement.)Examinethoseitemscitedas expected7has alternativesforthe unexpecteditem.1&O GENERROR,, GeneratedERROR:kError:>kThiswas generatedusingthe.ERROR directive.UserAction:&Examineyoursourcecode.2w&O GENPRINT,, GeneratedPRINT:kInformational:2KkThis statementwas generatedwitha.PRINT directive.^UserAction:&^Examineyoursourcecode.@ 3w'OGENWARN,, GeneratedWARNING:kWarning:4`kThiswas generatedusingthe.WARNING directive.^UserAction:&^Examineyoursourcecode.=4)=OHEXSTR,,Illegal hexadecimalescapesequencein(stringliteral.Error:;The specified hexadecimalescapesequenceisinvalid.UserAction:4Checkyoursourcecodeandthedocu- mentation.5 COIDFOUND,,Found identifierintheopcodefieldwhenB( expectingoneofthe following:)opcode, directive,5macro invocation,orsymbol definition.Error:?The identifiercitedwas unexpected.*Rather,anIuopcode, directive,macro invocation,orsymbol definitionwas expected.hUserAction:$hCheckyoursourcecode.:6! CO IDTOOLONG,, Identifierislongerthan31 characters.kError:?kThe identifierexceedsthe31 charactermaximumsize.^UserAction:4^Checkyoursourcecodeandrenameor$truncatethe identifier.7w.O ILLASCII,,IllegalASCII constant.kError:=kThe assemblerfoundanillegalASCIIconstant2withthe6Aor^aradix specifier.^UserAction:$^Checkyoursourcecode.8w-OILLBIN,,Illegalbinary constant.kError:>kThe assemblerfoundanillegalbinaryconstant2withthe^Bor^bradix specifier.^UserAction:$^Checkyoursourcecode.9w.OILLDEC,-Illegaldecimal constant.kError:>kThe assemblerfoundanillegalbinaryconstant2withthe^Dor^dradix specifier.^UserAction:$^Checkyoursourcecode.I:)AO ILLEXPON,,Illegalexponentinfloatingpointcon-(stant.Error:BThe specifiedexponentofthefloatingpointcon-stantisillegal.UserAction:4Checkyoursourcecodeandthedocu- mentation.;w8O ILLFLOAT,-Illegalfloatingpoint constant.kError:AkThe specifiedfloatingpointconstantisillegal.UserAction:4Checkyoursourcecodeandthedocu-^ mentation.<w2OILLHEX,,Illegal hexadecimal constant.kError:>kThe assemblerfoundanillegalbinaryconstant2withthe^Xor^xradix specifier.^UserAction:$^Checkyoursourcecode..=+OILLIFOP,-Illegal.IF operator.kError:=kAnillegaloperatorwas encounteredasa.IF operator.^UserAction:4^Checkyoursourcecodeandthedocu-. mentationforthe.IF directive.!> w;OILLINCL,,Illegal.INCLUDEfilespecification.kError:=kAnillegal.INCLUDE directivewas encountered.UserAction:7Checktheuseofthe.INCLUDE directive!^byyoursourcecode.R ?w,OILLOCT,,Illegaloctal constant.kError:>kThe assemblerfoundanillegalbinaryconstant2withthe^Oor^oradix specifier.^UserAction:$^Checkyoursourcecode.{@ )Q?OILLOPERANDMIX,,Illegaloperandmixingforopera-(tor.Error:ATheresolvedoperandtypesareinvalidwhenused3togetherwiththe specified operator.UserAction:7Consultthe documentation descriptionsof2 operators, operands,and expressions.A AO ILLPROCRET,-Illegal procedurereturn;linkagereg-C(ister (argument1)mustbeR31whensoftwarehint (argument3)is1.Error:%Illegal procedurereturn.UserAction:3Checkthe instruction arguments.)WhenEargument3,softwarehint,is1,thefirstargument<h specifyingthelinkageregistermustbeR31.`B6AO ILLRADIX,-Illegalradix specifierinnumericcon-5(stant;specifyA,B,C,D,O,orX.Error:?The assemblerfoundanillegalradix specifier.^UserAction::^CheckyoursourcecodeanduseoneofA, B,C,D,O,orX.UC! )+AO INCLDEPTH,,.INCLUDEnestdepthexceedsN-check"(forcircular .INCLUDE.Error:BThemaximumlevelofincludefiledepthhasbeen exceeded.UserAction:8Checkyoursourcecodeforcircularfile inclusion.D w1O INCLOPEN,-.INCLUDEfileopenerror.kError:1kIncludedfilecouldnotbeopened.UserAction:>Checkthefile attributes,etc.(ofthespeci-^fied.INCLUDEfile.E)W;O INSNOTINPSC,- InstructionsmustbeinaMIX,1(NOEXE;MIX,EXE;or NOMIX,EXEPSECT.Error:CAn instructionhasbeen specifiedinapsectwith' incorrectpsect attributes.UserAction:4MakesurethepsecthasMIX,orEXE&andNOMIX attributesset.lF )B@O INTERNAL,,Internal assemblererror.(Pleasesubmit(anSPR.Fatal:-Aninternalerrorhas occurred.^UserAction:5^Gatherasmuch informationaspossibleHaboutthe circumstancesunderwhichtheerror occurred,andsubmitanSPR.aG! 7GOINTERR,,Internal processingerrorintheSYN facility.kFatal:-kAninternalerrorhas occurred.UserAction:5Gatherasmuch informationaspossibleH^aboutthe circumstancesunderwhichtheerror occurred,andsubmitanSPR.H! DO INVALIGNFILL,,Invalidoptionalfillpattern specified"(with.ALIGN directive.Error:5Aninvalidfillpatternwas specified.^UserAction:7^Checkthesecondargumenttothe.ALIGNL directivewhichisthe alignmentfill specifier.(Theargu-Jmentmustresolvetoaninteger.'Checkyoursourcecode*handthe.ALIGNdocumentation.I BO INVBASEEXP,,Invalid expressionfor.BASE directive.kError:AkThe expressionisnotvalidfor.BASE directive.UserAction::The expression specifiedforabaseregis-H^terwiththe.BASE directiveshouldcontainnoforwardP referencesandresolvetooneofthe followingatthispointIin assembly:)psect+/-offset,externalsymbol referencePh+/-offset,integer,label+/-offsetwherethelabelisde-FfinedinapsectwiththeEXEandNOMIX attributes.IConsultthe documentationforfurther descriptionofthe1r assembler evaluationof expressions.J@O INVBASEREG,-Invalidbaseregister specified.+Base8(registermustbeoneofR0throughR30.Error:-Invalidbaseregister specified.^UserAction:<^Specifyabaseregisterasageneralregis-#terfromtherangeR0...*R30.)R31cannotbe specifiedNasabaseregisterandis implicitlydefinedas.BASER31, h0.  KBO INVBRTGT,,Invalidbranchtarget.)Branchtargetla-B(belmustbedefinedinsamepsectasthebranch5 instructionwhich referencesthelabel.Error:CThe specifiedlabel referencedasthetargetofaJubranch instructionmustbedefinedinthesamepsectin$whichitis referenced.hUserAction:0hConsultthe documentationformore" informationonlabels.LtAOINVCA,,Invalidcodeaddress specifiedwithproce-=(dure descriptor.,Codeaddressmustbeanon-A temporarylabeldefinedinapsectwiththeEXE@orMIX attributeafteritsusewith .PROCEDURE_2 DESCRIPTOR.Error:?Thecodeaddress specifiedasthesecondargu-=&menttothe.PROCEDURE_DESCRIPTOR directiveis~invalid.UserAction:/Thecodeaddressmustbeanon-Er temporarylabeldefinedinapsectwiththeEXEor7NOMIX attribute.'Checkyoursourcecode.M:OINVEXP,,FoundXXXXXwhen expectingavalid( expression.Error:AOneofthe followingwasexpectedbytheassem-Mbler:*integer,floatingpoint constant, identifier, register,Euperiod( . ),leftbracket( < ),unary operator.UserAction:6Checkthe unexpecteditemfoundinthehsource statement.N! )Z@OINVEXPRFORDIR,,Invalid expressiontypefordirec-(tive.Error:CThe assemblerresolvedvalueforthe expressionin-thecited directiveisinvalid.UserAction:3Consultthe documentationforfurtherA explanationofthe directive argumentsandtypes.`O26>OINVEXPRFORSYM,,Invalid expressiontypeforsym-(bol.Error:?The assemblerresolvedvalueforthe expressionMwhichisassignedtoalocalorglobalsymbolisinvalid.UserAction:4 ExpressionsassignedtoasymbolmustGcontainnoforward referencesandresolvetoaninte-Ihgeror psect/label+/-offset.*Consultthe documentationIforfurther descriptionsofhowthe assembler determines*symboland expressionvalues._P 5AO INVFPCONST,,Invalidfloatingpointvalue detected.@(Checkvaluerangeforfloatingpointdatatype.Error:CAninvalidfloatingpointvaluehasbeen detected.^UserAction:;^Checkthe specifiedrangeforthe directivetype.Q)eBO INVINSQUAL,, Instruction qualifierlist specifiedis$(invalidfortheopcode.Error:>The instruction qualifier(s) specifiedwiththe"opcodeis/areinvalid.UserAction:7Consultthe documentationforacompleteAlistofopcodesandvalid instruction qualifiers.yR )ODOINVLCA,,Invalidor undefinedcodeaddressfoundfor ( procedure descriptor.Error:@Aninvalidor undefinedcodeaddress corresponds4tothe specified procedure descriptor.UserAction:8Checkyoursourcecodeforthe specifiedcodeaddress.hS! )>CO INVLISTOPT,,Invalidoption specifiedwiththe.LIST(or.SHOW directive.Error:EAninvalidoptionhasbeen specifiedwiththe.LISTor.SHOW directive.UserAction:9Consultthe documentationforvaliddirec-tiveoptions.ZT! 0=OINVLPD,,Invalid procedure descriptor specified.kError:CkAninvalid procedure descriptorhasbeen specified.KTherewasno definitionofa procedure descriptorbythe specifiedname.UserAction:$Checkyoursourcecode.pU )F=O INVNLISTOPT,,Invalidoption specifiedwiththe)(.NLISTor.NOSHOW directive.Error:>Aninvalidoptionhasbeen specifiedwiththe*.NLISTor.NO_SHOW directive.UserAction:9Consultthe documentationforvaliddirec-tiveoptions.V EOINVOFF,, Attemptingtospecifydata intializationwithF(currentpsectoffsetthatisoutsidetherangeof0to 2147483647.Error:FThecurrentpsectoffsetisinvalidfor specifyingaudatainitialization.UserAction:8Checkyoursourcecodeandthevalueof&hthecurrentpsectoffset.N W =O INVREPCOUNT,-Theintegervalueofthe.REPEAT@( expressionisnotwithinthe inclusiverangeof:0...65535.'Azerovalueisassumed.Warning:<`Thevalueofthe.REPEAT expressionmustbe*uinthe inclusiverangeof0u...%-u65535.) Therefore,azero) expressionvalueisassumed.hUserAction:8hSpecifya repetitioncountbetween0and65535.^X )4Aninvalidoptionhasbeen specifiedwiththe! .SAVE_PSECT directive.UserAction:9Consultthe documentationforvaliddirec-tiveoptions.MY #:O INVTEMPLAB,,Invaliduseof temporarylabel.kError:DkA temporarylabel referenceisnotallowedinthiscontext.^UserAction:2^Consultthe documentationonuseof: temporarylabelsforafurther description.Z @OINVTERM,,FoundNwhen expectingavalidexpres-(sionterm.Error::An unexpecteditemwasfoundwhereanex-Jpressionwas expected.)Itexpectedoneofthe following:Qufloatingpointnumber,integer, register,decimalpoint( . ),2 identifier,orleftbracket( < ).hUserAction:8hChecktheitemflaggedbythe assembler.[ w6O LABELNOTDEF,, Undefinedlabel encountered.kError:/kThe specifiedlabelis undefined.UserAction:8Consultthe documentationfor descriptions!^ofthevalidlabels.H\9O LABELREDECL,,Illegal redefinitionoflabel.kError:AkThelabelisbeing illegallydefinedinmultiple+placesinthisassemblyunit.^UserAction:;^Checkall referencestothislabelinyoursourcecode.]:OLABNOTINPSECT,,Labelmustbedeclaredina(PSECT.Error:CA temporary,local,orgloballabel declarationis>beingmadeandnopsecthasbeen established.UserAction:4Makesurethea.PSECT directivehasLbeenissuedpriortothe appearanceofthelabeldeclara-(htioninthesourcestream.L^"8OLEXOPEDITSPEC,- Unrecognizededit specifier:kError:BkTheedit specifierforthe%EDITlexicaloperatoris unrecognized.^UserAction:6^Checkyoursourcecodeandconsultthe0 documentationonlexical operators._ _AO LEXOPENDM,-Illegal modificationof.ENDM directive*(keywordbylexical operation.Error:<Whileyourmacro definitioncontainsa.ENDMI directivethatendsthemacro definition,the.ENDMdi-NurectiveismodifiedbyalexicaloperatorsuchthatitcanFnolongerbe recognizedasa.ENDM directivekeyword%&afterlexical processing.UserAction:4Changethe statementtoavoidmodify-Fingthe.ENDM directivekeywordwithlexicaloperatorr processing.` WAO LEXOPENDR,,Illegal modificationof.ENDR directive*(keywordbylexical operation.Error:=Whileyourrepeatrangecontainsa.ENDRdi-Mrectivethatendstherepeatblock,the.ENDR directiveisMumodifiedbyalexicaloperatorsuchthatitcannolongerJbe recognizedasa.ENDR directivekeywordafterlexical& processing.UserAction:4Changethe statementtoavoidmodify-Fingthe.ENDR directivekeywordwithlexicaloperatorr processing.a ZBO LEXOPSYNTAX,,Illegallexicaloperatorsyntax(miss-E(ingleftorright parenthesis,missingcomma,etc.).Error:CThe indicatedlexicaloperatorhasasyntaxerror.^UserAction:7^Checkthesourcecodetoinsurecorrect2syntaxand placementof parenthesis.b! )nAOLEXSYM,,XXXXXisalreadyalexicalstringsymbol:(name;itcannotalsobeanumericsymbol.Error:AYoucannothavealexicalandnumericsymbolbythissamename.UserAction:8Checkyoursourcecodeandremoveeither8thelexicalornumericsymbol definition. c)a3OLIBMOD_BADFORMAT,-LibrarymoduleXXXXX>(containsillegalsyntax(missing.MACROorla-=bel preceding.MACRO,missingornotmatching3.ENDM,orothermacrosyntaxerror).uError:,uIllegalsyntaxwas encountered.UserAction:-Checkthesyntaxofthemacro.dw;O LIBMOD_EMPTY,,LibrarymoduleXXXXXisempty.kWarning:9`kThe assembler encounteredanemptylibrarymodule.^UserAction:(^Replacethelibrarymodule.e )a9O LIBMOD_EXTRA,,LibrarymoduleXXXXXcontains@( extraneoustextafter.ENDM;extratextignored.Warning:8`The assembler encountered extraneousetextMaftera.ENDM directiveinalibrarymodule.(Thistextisuignored.UserAction:(Correctthelibrarymodule.(f8OLIBMOD_NOT_FOUND,,LibrarymoduleXXXXXnot(found.Error:;The indicatedlibrarymodulewasnotfound.^UserAction:7^Checkthespellingofthemacrolibraryandmodulenames.g (using different alphabeticcasethanin.MCALL+ directiveormacro invocation.Error:>Thereisan alphabeticcase differencebetweenNuthat specifiedinthemacrolibraryandthe alphabeticcaseofthemacroname.hUserAction::hCheckthecaseofthemacronameinyourJsourcecodeandthecaseofthemacrointhe specifiedmacrolibrary.i )V9O MACEXPNEST,-Macro expansionexceedsmaximum<(nestingdepth(macro recursionnot detected).Error:BThemacroisnot recursivebutexceedsthemaxi-+mum allowable expansiondepth.UserAction:7Checkyoursourcecodeforpossiblere- structuring.j :OMACPARAMGENDEF,,Youmayspecifya generatedE(labeldefaultvalue,oradefaultstringvalue,butnotboth.Error:BAdefaultstringvalueANDa generatedlabelde-Jufaultvaluehavebothbeen specified,whenonlyonemaybe specified.hUserAction:&hExamineyoursourcecode.~k)T4OMACPARAMSYNTAX,,Illegalmacro parameter9(syntax:-FoundXXXXXwhen expectingoneofXXXXX.Error:0Macro parametersyntaxisinvalid.UserAction:3Try replacingthe unexpectedargument0withoneofthoseitemscitedasI expected c.l! )V9O MACRECURSE,, Recursivemacroexceedsmaximum+(macro expansionnestingdepth.Error:=Themacrois recursiveandexceedsthemaxi-)mum expansionnestingdepth.UserAction:;Checkyoursourcecodeforamissingbasis*stepinthe recursivemacro.m ~?OMACZERO,,Cannotevaluate expression.*Azeroex-'(pressionvalueisassumed.Informational:5KThe assemblercannotevaluatethisex-Fpressionduetoerrors encountered., Therefore,azerouvalueisassumed.UserAction:2Checkthe expressionforforwardorhexternal references.9n BOMAXIF,-Maximumnestingof.IF directives exceeded.kError:@kThemaximumdepthnestingof.IF directiveshasbeen exceeded.^UserAction:7^Checkyoursourcecodeforpossiblere- structuring.  ow2O MISSENDC,,Missing.ENDC directive(s).kWarning:8`kThe assemblerdidnotfinda terminating(.ENDC conditional directive.^UserAction:$^Checkyoursourcecode.pw2O MISSINGENDM,-Missing.ENDM directive.kError::kNo terinating.ENDM directivewasfoundto&matcha.MACRO directive.^UserAction:$^Checkyoursourcecode."qw2O MISSINGENDR,,Missing.ENDR directive.kError:;kThe assemblerexpectedto encountera.ENDR@ directiveto terminatea.IRPor.REPEATblock.^UserAction:$^Checkyoursourcecode.pr )F?O MISSQUOTE,,Missingclosing double-quote character(instringliteral.Error:<Theclosing double-quoteismissingfromthestringliteral.UserAction:3Checkyoursourcecodeandinserta9closing double-quoteforastringliteral.bs 28>O MODCODLOCCTR,, RestoringthelocationcounterinB(thecurrentcontextcausesanillegal modificationBofthelocationcounterforanEXE,NOMIXpsect.Error:DThelocationcountercannotbemodifiedinapsect1uwiththeEXEandNOMIX attributes.UserAction:<Ifyouneedtomodifythelocationcounter,ChspecifytheMIXpsect attribute..Consultthedocu-G mentationforacomplete descriptionoftheMIXpsect attribute.&t 9ONOBEGEX,- Unmatched .END_EXACT directiveen-( countered.Error:;A .END_EXACT directivewas encounteredprior)toa .BEGIN_EXACT directive.UserAction:$Checkyoursourcecode.u DONOCA,,Nocodeaddress specifiedasargument2with (.PROCEDURE_DESCRIPTOR.Error:<Nocodeaddresswas specifiedasthesecond>argumenttothe.PROCEDURE_DESCRIPTOR directive.UserAction:/Thecodeaddressmustbeanon-E temporarylabeldefinedinapsectwiththeEXEor7hNOMIX attribute.'Checkyoursourcecode.wv! )MGONOQUAL,- Instruction qualifiersarenotvalidwiththis(opcode.Error:?No instruction qualifiersmaybe specifiedwiththisopcode.UserAction:7Consultthe documentationforacompleteAlistofopcodesandvalid instruction qualifiers.w)hFO NOTAQUAL,,Anitem specifiedinthe qualifierlistis#(notavalid qualifier.Error:>The instruction qualifier(s) specifiedwiththe"opcodeis/areinvalid.UserAction:7Consultthe documentationforacompleteAlistofopcodesandvalid instruction qualifiers.fx)<:ONOTENOUGHARGS,-Notenough argumentsforin-( struction.Error:;The instructionneedsoneormore argumentsthan specified.UserAction:1Checktheargumentnumbersandre-Aquiredformatsas specifiedinthedocumentation.Py)&9O NOTINMACRO,-This statementmustonlyoccur(withinamacro.Error:AThe statement specifiedisonlyallowedwithinamacro.UserAction:6Consultthe documentation descriptionof$the statement specified.z;O NOTINSEM,,Missing functionalityin assembler.kError:0kMissing functionalityin assembler.UserAction:"PleasesubmitanSPR.t {! )n@ONUMSYM,,XXXXXisalreadyanumericsymbolname;;(itcannotalsobealexicalstringsymbol.Error:AYoucannothavealexicalandnumericsymbolbythissamename.UserAction:8Checkyoursourcecodeandremoveeither8thelexicalornumericsymbol definition.@|The instructioncontainsoneormore argumentsthan necessary.UserAction:1Checktheargumentnumbersandre-Aquiredformatsas specifiedinthedocumentation.)_:OTOOMANYMACARG,,More arguments specifiedthan$(definedforthismacro.Error:9More argumentshavebeen specifiedontheCmacrocallthanwere specifiedforits definition.UserAction:7Checkthemacro definitionandpointof'callinyoursourcecode.})INDEXINDEX!i  iAAJS9Absolute expressionAbsolute expressionDS8 AccessingmemoryAccessing memorye-S8AddressAddressOS!!N8baseregister(.BASE)base register (.BASE)3H)N8localcodestorage directive(.LOCAL_CODE_ADDRESS)local code storage directive (.LOCAL_CODE_ADDRESS)r#7%N9storage directive(.CODE_ADDRESS)storage directive (.CODE_ ADDRESS)*LS9.ADDRESS directive.ADDRESS directive3S 8 AddressingAddressingNS  N8 controlling alignmentcontrolling alignmentISN9tolinkagesectionto linkage sectionnS%118Addressstorage directive (.ADDRESS)Address storage directive (.ADDRESS)DS8.ALIGN directive.ALIGN directive<S 9ANDoperatorAND operator/S 8ArgumentArgument/SN8actualactualHSN9 determininglengthdetermining lengthd/SN8formalformal9S N8inamacroin a macro6S N8numberofnumber ofZWS%%9 ArithmeticshiftoperatorArithmetic shift operatorDS8.ASCIC directive.ASCIC directiveHS8.ASCID directive.ASCID directiveDS9.ASCII directive.ASCII directive^S++8ASCIIstringstorage directiveASCII string storage directiveDSN8counted(.ASCIC)counted (.ASCIC)BSN9string(.ASCII)string (.ASCII)YS&&N8string descriptor(.ASCID)string descriptor (.ASCID)TS##N8zero-terminated(.ASCIZ)zero-terminated (.ASCIZ)DS9.ASCIZ directive.ASCIZ directivepS&228Assembly termination directive(.END)Assembly termination directive (.END)YPS8 Assignment statementAssignment statement]M**3 Automatic alignment directivesAutomatic alignment directives<MN3SeeTableB-2See Table B- 2!i  iBBFS8.BASE directive.BASE directiveN>S8BaseregisterBase registereDSN9definingaddressdefining addressdS ,,8Baseregister directive(.BASE)Base register directive (.BASE)RS  8$BEGIN_EPILOGUEmacro$BEGIN_EPILOGUE macroE^PS!!9 .BEGIN_EXACT directive.BEGIN_EXACT directiveBS8BinaryoperatorBinary operatorBS8.BLKA directive.BLKA directiveBS9.BLKD directive.BLKD directiveBS8.BLKF directive.BLKF directiveBS8.BLKG directive.BLKG directiveBS9.BLKL directive.BLKL directiveBS8.BLKO directive.BLKO directive3S9.BLKQ directiveBS8.BLKS directive.BLKS directiveBS8.BLKT directive.BLKT directiveBS9.BLKW directive.BLKW directiveBS8.BLKx directive.BLKx directive{S+888Blockstorage allocation directive(.BLKx)Block storage allocation directive (.BLKx)BS9.BYTE directive.BYTE directive#bS++8Bytestorage directive(.BYTE)Byte storage directive (.BYTE)#!i  iCCFS 8$CALLmacro$CALL macroJPRfLSN8 instructionsequenceinstruction sequenceT:S9 CharactersetCharacter setKSN8insource statementin source statementr@S8 CharacterstringCharacter stringHSN9 determininglengthdetermining lengthd>S8$CODE$symbol$CODE$ symbolVS""8 .CODE_ADDRESS directive.CODE_ADDRESS directive*JS9 $CODE_SECTIONmacro$CODE_SECTION macro8S 8Colon( : )Colon ( : )ASN8inlabelfieldin label fieldajS%119 Conditionalassemblyblock directiveConditional assembly block directive-SN8.ELSE.ELSE>-SN8.ENDC.ENDC`)S  N9.IF.IFSS##8Created temporarylabelCreated temporary label-SN8rangerange<S 9$CSsymbol$CS symbol<US$$8CurrentlocationcounterCurrent location counter!i  iDD>S8$DATA$symbol$DATA$ symbol8S 8DataStorageData Storage7S N9 ALIGN_DATAALIGN_DATAHBS8Data structuresData structures<S N8linkagepairlinkage pairLSN9 procedure descriptorprocedure descriptorBSN8 signatureblocksignature blockJS8 $DATA_SECTIONmacro$DATA_SECTION macroLS""9DateandtimelexicalDate and time lexical-SN8%TIME%TIMEg1S 8 DelimiterDelimiterBSN9stringargumentstring argument_S''8Direct assignment statementDirect assignment statement;S 8 DirectivesDirectives<S N9as operatorsas operatorscISN8forauto alignmentfor auto alignmentNSN8general assemblergeneral assembler5SN9macromacro1F29Disable assembler functions directive- (.DISABLE)Disable assembler functions directive (.DISABLE)85S8.DOUBLE directive1/D18Double-precisionIEEE directive(.T_- FLOATING)Double-precision IEEE directive (.T_ FLOATING)<S 8$DPsymbol$DP symbol<WS%%9.DSABL,DISABLE directive.DSABL, DISABLE directive8<S 8$DSsymbol$DS symbol<RS  8 .D_FLOATING directive.D_FLOATING directive1!i  iEE>S8%EDITlexical%EDIT lexical$US&&9Element extractionlexicalElement extraction lexical3S N8%ELEMENT%ELEMENT/DS8%ELEMENTlexical%ELEMENT lexical/BS9.ELSE directive.ELSE directive>US$$8.ENABL,ENABLE directive.ENABL, ENABLE directiveFYS&&8Enable assembler functionsEnable assembler functionsFBS9.ENDC directive.ENDC directive`*?/9End conditionalassembly directive-(.END)End conditional assembly directive (.END)`@S8.END directive.END directiveYsS'449Endmacro definition directive(.ENDM)End macro definition directive (.ENDM)eBS8.ENDM directive.ENDM directiveeBS8.ENDR directive.ENDR directivelNS9 $END_EPILOGUEmacro$END_EPILOGUE macroELS8 .END_EXACT directive.END_EXACT directiverNS8 $END_PROLOGUEmacro$END_PROLOGUE macroCHS9 $END_ROUTINEmacro$END_ROUTINE macroRS8EpiloguesequenceEpilogue sequence}5S N8 beginningbeginning^DS9.ERROR directive.ERROR directivew@S8ErrormessagesError messagesBS8.EVEN directive.EVEN directiveOS##9Exact InstructionblockExact Instruction block5S N8 beginningbeginning/SN8endingendingr1F.8Exact Instructionblock directive-(.BEGIN_EXACT)Exact Instruction block directive (.BEGIN_EXACT)OS!!8 ExclusiveORoperatorExclusive OR operator7S 8 ExpressionExpression3S N9absoluteabsolute>SN8 evaluationofevaluation of3S N8externalexternal/SN9globalglobal=S N8 relocatablerelocatableYS&&8 .EXTERNAL,EXTRN directive.EXTERNAL, EXTRN directiveJS9External expressionExternal expressionBS9ExternalsymbolExternal symbolcS ++N8 attribute directive (.EXTERNAL)attribute directive (.EXTERNAL)7S N8definingdefiningHDS9%EXTRACTlexical%EXTRACT lexical8!i  iFF+S8FieldsFields5SN8commentcommentVn1SN9labellabelV]5SN8operandoperandVg7S N8operatoroperatorVcgS$//9Floating-point arithmetic directiveFloating-point arithmetic directive9S N8 .S_FLOATING.S_FLOATING9S N8 .T_FLOATING.T_FLOATINGqS'229Floating-point constants (.D_FLOATING)Floating-point constants (.D_FLOATING)1JS  8Floating-pointnumberFloating-point number;S N8 arithmeticarithmetic/SN9formatformat9S N8 .F_FLOATING.F_FLOATING9S N8 .G_FLOATING.G_FLOATINGKSN8insource statementin source statement~1SN9storagestorage15SN8storingstoring9S N8 .S_FLOATING.S_FLOATING9S N9 .T_FLOATING.T_FLOATINGaS!,,8Floating-pointstorage directiveFloating-point storage directive9S N8 .D_FLOATING.D_FLOATING19S N9 .F_FLOATING.F_FLOATING9S N8 .G_FLOATING.G_FLOATINGBS8FormalargumentFormal argument]S((9 .F_FLOATING,FLOAT directive.F_FLOATING, FLOAT directiveNS  8 .F_FLOATING directive.F_FLOATING directive!i  iGGFS8Global expressionGlobal expression<S 9GloballabelGlobal labelaBS8GlobalsymbolGlobal symbol3S N8definingdefiningHRS  9 .G_FLOATING directive.G_FLOATING directive!i  iIIDS9.IDENT directive.IDENT directivegS"--8Identification directive(.IDENT)Identification directive (.IDENT)>S8.IF directive.IF directive@S9.IFx directive.IFx directiveJS8 .IF_FALSE directive.IF_FALSE directiveHS8.IF_TRUE directive.IF_TRUE directiveTS##9.IF_TRUE_FALSE directive.IF_TRUE_FALSE directive@S8.IIF directive.IIF directive6L18 Immediate conditionalassemblyblock- directive(.IIF)Immediate conditional assembly block directive (.IIF)HS9.INCLUDE directive.INCLUDE directiveOS!!8 InclusiveORoperatorInclusive OR operator}S,998 Indefiniterepeatargument directive(.IRP)Indefinite repeat argument directive (.IRP).C28 Indefiniterepeat character directive-(.IRPC)Indefinite repeat character directive (.IRPC)NS  8 Instruction directiveInstruction directiveTS!!8 .INSTRUCTION directive.INSTRUCTION directive7S 9 InstructionsInstructions<S N8as operatorsas operatorsc-S8IntegerIntegerKSN9insource statementin source statementxDS8%INTEGERlexical%INTEGER lexicalAHS8Invoking assemblerInvoking assemblerBS9.IRPC directive.IRPC directive@S8.IRP directive.IRP directive!i  iKKDS8KeywordargumentKeyword argument!i  iLL)S9LabelLabelFSN8created temporarycreated temporary/SN8globalglobala-SN9locallocala5S N9 temporarytemporaryaTS!!N8 user-defined temporaryuser-defined temporaryDS8Labeling directiveLabeling directiveESN9.LOCAL_DESCRIPTOR.LOCAL_DESCRIPTORMSN8.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTORUS&&8Length DetermininglexicalLength Determining lexical1SN9%LENGTH%LENGTHHBS8%LENGTHlexical%LENGTH lexicalHYS&&8 %%-Lexicalescapeoperator%%-Lexical escape operator^S))9Lexicalescapeoperator(%%)Lexical escape operator (%%)FS8Lexical operatorsLexical operators+SN8listlist 7S N9 processingprocessing<S N8syntaxrulessyntax rulesKS!!8LexicalstringsymbolLexical string symbolZS''N9withquotedstringliteralwith quoted string literal QS""8LexicalstringsymbolsLexical string symbols HS8.LIBRARY directive.LIBRARY directive>S9$LINK$symbol$LINK$ symbolVS""8 .LINKAGE_PAIR directive.LINKAGE_PAIR directiveJS8 $LINKAGE_PAIRmacro$LINKAGE_PAIR macroPS!!9$LINKAGE_SECTIONmacro$LINKAGE_SECTION macrogS"--8Linking directive(.LINKAGE_PAIR)Linking directive (.LINKAGE_PAIR)BS8.LIST directive.LIST directive SS%%9Listingcontrol directiveListing control directive/SN8.IDENT.IDENT-SN8.LIST.LIST /SN9.NLIST.NLISTo1SN8.NOSHOW.NOSHOWuhS"..8Listing directive(.SHOW,NOSHOW)Listing directive (.SHOW, NOSHOW)XS&&8ListingtableofcontentsListing table of contents6K,8Localaddressstorage directive-(.LOCAL_CODE_ADDRESS)Local address storage directive (.LOCAL_CODE_ADDRESS):S 8LocallabelLocal labela/SN9savingsavingCS8LocallabelblockLocal label block/SN8endingendingH3S N9startingstartingH/D-9Locallinking directive(.LOCAL_- LINKAGE_PAIR)Local linking directive (.LOCAL_ LINKAGE_PAIR)<S 8LocalsymbolLocal symbolbS((9.LOCAL_CODE_ADDRESS directive.LOCAL_CODE_ADDRESS directivebS((8.LOCAL_LINKAGE_PAIR directive.LOCAL_LINKAGE_PAIR directivez&8%8.LOCAL_PROCEDURE_DESCRIPTOR- directive.LOCAL_PROCEDURE_DESCRIPTOR directiveBS9%LOCATElexical%LOCATE lexicalOUS&&8Locationcontrol directiveLocation control directive/SN8.ALIGN.ALIGN-SN9.BLKx.BLKx@S8LocationcounterLocation counter1SN8currentcurrent,A18Locationcounter alignment directive-(.ODD)Location counter alignment directive (.ODD)+@/9Locationcountercontrol directive-(.EVEN)Location counter control directive (.EVEN)IM  3LogicalANDoperatorLogical AND operatorAMN3SeeANDoperatorSee AND operator\M**3Logical exclusiveORoperatorLogical exclusive OR operatorTM&&N2See ExclusiveORoperatorSee Exclusive OR operator\M**3Logical inclusiveORoperatorLogical inclusive OR operatorTM&&N3See InclusiveORoperatorSee Inclusive OR operatorFS8.LONG directive.LONG directive%jS#//8Longwordstorage directive(.LONG)Longword storage directive (.LONG)#@S 9$LSsymbol$LS symbol<R!i  jMM+A+9MACRO-64 AssemblerforOpenVMS-AXPSystemsMACRO-64 Assembler for OpenVMS AXP Systems;S N8 introductionintroductionBS9Macro argumentsMacro arguments/SN8actualactual/SN8ARGSARGSLoBSN9ARGS parametersARGS parameterso;S N8 concatenatedconcatenated5S N8 delimiteddelimited/SN9formalformal9S N8 FUNC_RETURNFUNC_RETURNy1SN8keywordkeyword/SN9KINDKIND?I1SN8LOCALLOCALRn'S  N8LSLSl-SN9NAMESNAMES\9S N8 NONSTANDARDNONSTANDARD|7S N8 positionalpositional-S  N9RlsRlsNk1SN8RSA_ENDRSA_END<7S N8 RSA_OFFSETRSA_OFFSET<7S N9 SAVED_REGSSAVED_REGSI?S N9 SCRATCH_REGSSCRATCH_REGSVt;S N8 SET_ARG_INFOSET_ARG_INFOqASN8SIGNATURE_BLOCKSIGNATURE_BLOCK{/SN9SIZESIZE<IGSN8STACK_RETURN_VALUESTACK_RETURN_VALUErESN8STANDARD_PROLOGUESTANDARD_PROLOGUEC/SN9stringstring)S  N8TIETIExCSN8USES_VAX_ARGLISTUSES_VAX_ARGLISTzdS ,,9Macrocall directive (.LIBRARY)Macro call directive (.LIBRARY)A:S 8MacrocallsMacro callsz<S N8as operatorsas operatorsc/SN9nestednested5KSN8numberof argumentsnumber of argumentsZUS$$8MACROcommand qualifiersMACRO command qualifiers$DS9Macro definitionMacro definitiony>SN8defaultvaluedefault value/SN8endingendinge:S N9labelinginlabeling inlS$008Macro definition directive(.MACRO)Macro definition directive (.MACRO),lS$008Macrodeletion directive (.MDELETE)Macro deletion directive (.MDELETE)IDS9.MACRO directive.MACRO directive,`S**8Macroexit directive(.MEXIT)Macro exit directive (.MEXIT)PBS8Macro expansionMacro expansion{3S N9printingprinting{9S N8 terminatingterminatingPjS#//8Macroinclude directive (.INCLUDE)Macro include directive (.INCLUDE)jS#//9Macrolibrary directive (.LIBRARY)Macro library directive (.LIBRARY)<S 8MacronameMacro name/S8MacrosMacrosyDSN9callingroutinescalling routinesJYS&&N8$CALL instructionsequence$CALL instruction sequenceKISN8definingaroutinedefining a routineGBSN8endingroutinesending routines0MS  N9forcallingroutinesfor calling routines0QS  N8inepiloguesectionsin epilogue sectionsEGQS  N8inprologuesectionsin prologue sectionsBGASN9insourcecodein source codePFSN8MACRO-64suppliedMACRO-64 supplied+WS%%N8MACRO-64suppliedlibraryMACRO-64 supplied library*OS!!N9makingmultiplecallsmaking multiple callsT3SN8nestednested5VS%%N8passingnumericvaluetopassing numeric value to5S N9 recursiverecursive57S N8 redefiningredefining53S N8suppliedsuppliedZLSN9 switchingpsectsswitching psects67G<S N8syntaxrulessyntax rules\BSN8withinroutineswithin routines.WS&&N9withsamenameasopcodewith same name as opcode5DS8.MCALL directive.MCALL directiveA6S9.MDELETE directiveI+S8MemoryMemory5S N8 accessingaccessingeSS%%9Messagedisplay directiveMessage display directive/SN8.ERROR.ERRORw/SN8.PRINT.PRINT/S 9MessagesMessages/SN8errorserrors*?.9Messagewarningdisplay directive-(.WARN)Message warning display directive (.WARN)DS9.MEXIT directive.MEXIT directiveP!i  jNNBS8.NARG directive.NARG directiveZBS8.NCHR directive.NCHR directivedDS8.NLIST directive.NLIST directiveoFS9.NOSHOW directive.NOSHOW directiveu+S8NumberNumberCd-N2SeealsoInteger,Floating-point'number,andPackeddecimalstringSee also Integer, Floating-point number, and Packed decimal stringKSN9insource statementin source statementwqS&338Numberof arguments directive(.NARG)Number of arguments directive (.NARG)ZsS'448Numberof characters directive(.NCHR)Number of characters directive (.NCHR)d[S''9Numeric complementoperatorNumeric complement operator<S8NumericsymbolNumeric symbolZS''N8withlexicalstringsymbolwith lexical string symbol BS9NumericsymbolsNumeric symbols !i  jOO:S8ObjectmoduleObject module9S N8 identifyingidentifying/SN8namingnaming -SN9titletitle [S))8 Obtaining informationlexicalObtaining information lexical-SN8%TYPE%TYPEmFS9.OCTA directive.OCTA directive{jS#//8Octawordstorage directive(.OCTA)Octaword storage directive (.OCTA){@S8.ODD directive.ODD directive@S9One's complementOne's complement>SN8of expressionof expression+S8OpcodeOpcode7S N9 redefiningredefining5cS--N8withthesamenameasamacrowith the same name as a macro5<S 8$OPDEFmacro$OPDEF macro1S9OperandOperandh3S 8OperatorOperatorc)S  N8ANDANDDSN9 arithmeticshiftarithmetic shift/SN8binarybinary7S N8 complementcomplement<S N9 exclusiveORexclusive OR<S N8 inclusiveORinclusive OR6SN8numeric complement>SN9radixcontrolradix control-SN8unaryunary@S8OperatorfieldOperator fieldc!i  iPPFS9.PACKED directive.PACKED directive>S8.PACKEDmacro.PACKED macrojS#//8Packedstorage directive (.PACKED)Packed storage directive (.PACKED)BS9.PAGE directive.PAGE directivedS ,,8Pageejection directive(.PAGE)Page ejection directive (.PAGE)4S 8Period(.)Period (.)US$$N9currentlocationcountercurrent location counterHS8 PermanentsymbolPermanent symbolJS8 PositionalargumentPositional argumentDS9.PRINT directive.PRINT directivefS **8.PROCEDURE_DESCRIPTOR directive.PROCEDURE_DESCRIPTOR directiveZS&&8$PROCEDURE_DESCRIPTORmacro$PROCEDURE_DESCRIPTOR macro>S9ProgramsectionProgram section7S N8 attributesattributes+SN8codecode2+SN9datadata23S N8definingdefining1S N8 directivedirective/S8.PSECT.PSECT3S 9.RESTORE.RESTORE-S8.SAVE.SAVE1SN8linkagelinkage2+SN9namenameMS  N8 restoringcontextofrestoring context ofGSN8savingcontextofsaving context ofISN9savinglocallabelsaving local label1S 8 ProloguesProloguesASN8entryandexitentry and exitNS9ProloguesequencePrologue sequence}/SN8endingendingDS8.PSECT directive.PSECT directive!i  iQQFS9.QUAD directive.QUAD directivejS#//8Quadwordstorage directive(.QUAD)Quadword storage directive (.QUAD)KS!!8QuotedstringliteralQuoted string literalZS''N9withlexicalstringsymbolwith lexical string symbol !i  iRRQS""9RadixcontroloperatorRadix control operatorQS$$8Range extractionlexicalRange extraction lexical3S N8%EXTRACT%EXTRACT8BS9RegisternameRegister namePS!!8 Relocatable expressionRelocatable expression8S 8RepeatblockRepeat blockNS  N9argument substitutionargument substitutionPS!!N8 character substitutioncharacter substitutionPS!!N9 terminating repetitionterminating repetitionRfS!--8Repeatblock directive (.REPEAT)Repeat block directive (.REPEAT)FS8.REPEAT directive.REPEAT directiveBS9%REPEATlexical%REPEAT lexicalWkS#008Repeatrangeend directive(.ENDR)Repeat range end directive (.ENDR)lBS8.REPT directive.REPT directiveiS#..9.RESTORE_PSECT,.RESTORE directive.RESTORE_PSECT, .RESTORE directiveBS8$RETURNmacro$RETURN macroEDS8$ROUTINEmacro$ROUTINE macroB7S N9 qualifiersqualifiers3S 8RoutinesRoutines<MN3SeeTableB-1See Table B- 1:S N8boundframebound frameRS##N9definingtypebymacrodefining type by macro?8S N8nullframenull frame9S N8 performanceperformance@SN9registerframeregister frame:S N8stackframestack frameFS8$RSA_ENDsymbol$RSA_END symbol<PS9 $RSA_OFFSETsymbol$RSA_OFFSET symbol<C!i  jSS]S((8 .SAVE_PSECT,.SAVE directive.SAVE_PSECT, .SAVE directive@S8ShiftoperatorShift operatorUS$$9.SHOW,.NOSHOW directive.SHOW, .NOSHOW directive+A28Signedbytedata directive (.SIGNED_-BYTE)Signed byte data directive (.SIGNED_ BYTE).D58Signedwordstorage directive (.SIGNED_-WORD)Signed word storage directive (.SIGNED_ WORD)PS!!9 .SIGNED_BYTE directive.SIGNED_BYTE directiveTS!!8 .SIGNED_WORD directive.SIGNED_WORD directive_S ++8Single-precisi& onIEEE directiveSingle-precision IEEE directive9S N9 .S_FLOATING.S_FLOATINGDS 8$SIZEsymbol$SIZE symbol<CPS!!8$STACK_ARG_SIZEsymbol$STACK_ARG_SIZE symbol>3S 9 StatementsStatements>SN8 charactersetcharacter setr1SN8commentcommentnBSN9 continuationofcontinuation ofY-SN8fieldfieldU/SN8formatformatR-SN9labellabel]1SN8operandoperandg3S N8operatoroperatorc-SN9typestypesBS8StringargumentString argumentMS""8StringeditinglexicalString editing lexical-SN8%EDIT%EDIT$BS9%STRINGlexical%STRING lexical_OS##8StringlocatinglexicalString locating lexical1SN8%LOCATE%LOCATEOQS$$8String repeatinglexicalString repeating lexical1SN9%REPEAT%REPEATW-S8StringsStringsUS$$N8 date/timelexical(%LEX)date/time lexical (%LEX)g]S((N9 determininglength (%LENGTH)determining length (%LENGTH)HSS##N8editinglexical(%EDIT)editing lexical (%EDIT)$aS**N8 extractingelements (%ELEMENT)extracting elements (%ELEMENT)/[S''N9 extractingrange (%EXTRACT)extracting range (%EXTRACT)8YS&&N8locatinglexical (%LOCATE)locating lexical (%LOCATE)Ox&:)N8 obtaining informationlexical(%TYPE)obtaining information lexical (%TYPE)mhS"..N9 obtainingvaluelexical (%STRING)obtaining value lexical (%STRING)_[S''N8 repeatinglexical (%REPEAT)repeating lexical (%REPEAT)WpS(448Subconditionalassemblyblock directiveSubconditional assembly block directive5S N9 .IF_FALSE.IF_FALSE3S N8.IF_TRUE.IF_TRUE?SN8.IF_TRUE_FALSE.IF_TRUE_FALSEYS&&9 .SUBTITLE,SBTTL directive.SUBTITLE, SBTTL directive/D/9Subtitlelistingcontrol directive- (.SUBTITLE)Subtitle listing control directive (.SUBTITLE)/S8SymbolSymbolESN9definedby$CALLdefined by $CALL>KSN8definedby$ROUTINEdefined by $ROUTINE;MS  N8 determiningvalueofdetermining value of7S N9externalexternal3SN8globalglobalESN8inoperandfieldin operand fieldGSN9inoperatorfieldin operator field-SN8locallocal<S N8macronamemacro name9S N9 permanentpermanentBSN8registernameregister name5S N8 undefinedundefinedH?S N9 user-defineduser-definedjS#//8Symbol attribute directive(.WEAK)Symbol attribute directive (.WEAK)RS  8 .S_FLOATING directive.S_FLOATING directive!i  iTT2S 8TabstopsTab stopsKSN9insource statementin source statementWBS8 TemporarylabelTemporary labela;S N8 user-defineduser-definedTS$$9TerminMACRO statementTerm in MACRO statement>S8%TIMElexical%TIME lexicalgDS8.TITLE directive.TITLE directive wS)669Titlelistingcontrol directive(.TITLE)Title listing control directive (.TITLE) >S8%TYPElexical%TYPE lexicalmRS  8 .T_FLOATING directive.T_FLOATING directive!i  iUU@S9UnaryoperatorUnary operatorNS8 User-definedsymbolUser-defined symbol]S((8 User-defined temporarylabelUser-defined temporary label-SN9rangerange!i  jVVQS$$8Value conversionlexicalValue conversion lexical3S N8%INTEGER%INTEGERAOS##9Value obtaininglexicalValue obtaining lexical1SN9%STRING%STRING_+S8ValuesValuesNS  N8 converting (%INTEGER)converting (%INTEGER)A!i  iWWBS9.WARN directive.WARN directiveBS8.WEAK directive.WEAK directiveFS8.WORD directive.WORD directive"bS++9Wordstorage directive(.WORD)Word storage directive (.WORD)" w6OTOOMANYMACPARAMS,,Toomanymacroparame-(ters.Error:7Toomanymacro parametersare specified.^UserAction:$^Checkyoursourcecode.* w0O TRUNCDATA,,Data truncationwarning.kWarning:C`kThe specifieddatavalueisoutofrangeforthe? specified directive.'Data truncationwilloccur.^UserAction:%^Specifyasmallervalue.;OUNDCA,, Undefinedcodeaddress specifiedwith ( procedure descriptor.Error:?Thecodeaddress specifiedasthesecondargu-=menttothe.PROCEDURE_DESCRIPTOR directiveisu undefined.UserAction:/Thecodeaddressmustbeanon-Eh temporarylabeldefinedinapsectwiththeEXEor7NOMIX attribute.'Checkyoursourcecode.gO UNEXPIFF,, Unexpected .IF_FALSE(.IFF) directive.kError:;kThe assembler encounteredan unexpected.IF_FALSE directive.^UserAction:;^Checkyoursourcecodetoinsurethatthis3 directiveoccurswithina.IFblock.Q '=O UNEXPIFT,- Unexpected.IF_TRUE(.IFT) directive.kError:;kThe assembler encounteredan unexpected.IF_TRUE directive.^UserAction:;^Checkyoursourcecodetoinsurethatthis3 directiveoccurswithina.IFblock.g )=9O UNEXPIFTF,, Unexpected.IF_TRUE_FALSE(.IFTF)( directive.Error:;The assembler encounteredan unexpected.IF_  TRUE_FALSE directive.UserAction:;Checkyoursourcecodetoinsurethatthis3 directiveoccurswithina.IFblock.w5O UNEXPMEXIT,, Unexpected.MEXIT directive.kError:5kThe assembler encounteredan unexpected.MEXIT directive.^UserAction:$^Checkyoursourcecode.  T *4OUNKDIR,,Unknown directiveXXXXXfound.kError:,kAninternalerrorhasoccured.UserAction:5Gatherasmuch informationaspossibleG^aboutthe circumstancesunderwhichtheerroroccurred'andpleasesubmitanSPR.H)4OUNKENDISOPTION,,Unknown.ENABLE/.DISABLE(option specified.Error:;Theoption specifiedfor.ENABLE/.DISABLEis incorrect.UserAction:2Checktheoption specifiedwiththe&.ENABLE/.DISABLE directive.6 2O UNKNOWNATTR,,UnknownPSECT attribute.kError:CkThe specifiedpsect attributeisnot recognizedbythe assembler.^UserAction:6^Consultthe documentation descriptionof!the.PSECT directive.8:O UNTERMEX,-N Unterminated .BEGIN_EXACTdirec-.(tive(s)detectedinpsectXXXXX.Error:6 Unmatched .BEGIN_EXACT directive(s)occur%forthe indicatedpsect.UserAction:$Checkyoursourcecode. v=OVAXDIR,,VAXMACRO-32 directive(s)or option(s)=(beingignored.+ Continuing processingwithnextline.Informational:1KAVAXMACRO-32 directiveoroption1uhasbeen specifiedandisignored.UserAction:3RemovetheVAXMACRO directivesfrom)hyourAlphaMACRO-64program. ! ?O VMACELSE,-Youcannotspecify.ELSEinthesame@(.IFblockwitheither .IF_FALSE(.IFF),.IF_TRUE/(.IFT),or.IF_TRUE_FALSE(.IFTF).Error:<A.ELSE directivewas encounteredwithintheBusame.IFblockasa .IF_FALSE, .IF_TRUE,or.IF_FALSE directive.hUserAction:8hCheckyoursourcecodeandremoveeither;the.ELSE directiveorthe.IF_x directive.8O WRONGMACID,-Macronamein.ENDMdoesnot'(match corresponding.MACRO.Error:?Themacroname specifiedastheoptionalargu-Fmenttothe.ENDM directivedoesnotmatchthenameAu specifiedwiththe corresponding.MACRO directive.UserAction:1Checkyoursoucecodeformatching)h .MACRO/.ENDM directivepairs.=! 2:OWRONGPL,,Thecodeaddress specifiedinthe5(.PROCEDURE_DESCRIPTOR directivemustoc-@curBEFOREits definitionasalocalorgloballabel.uError:BuThecodeaddress specifiedasthesecondargument>tothe.PROCEDURE_DESCRIPTOR directivemustoc-C&curBEFOREits definitionasa non-temporarylabelF~definedinapsectwiththeEXEorNOMIX attribute.UserAction:$Checkyoursourcecode.*v  !!"""""""""""""#######$$$%%&%%%'%%()*+,-----------........./////////000000011111112222222233333333444444445555556666667666666888888899999::::;;;;;<<<<<<<<<<<<<<<<<<<<<<=======>>>>??????@AAAAAAAABBCCDDCECFFFFFFFGGGGGGGGGGGGGHHHHHHHHIIIIIIIIIJJJJJJJKKKKKKKLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMNNNNNNNNNNOOOOOOOPPPPPPPQQQQQQQRRRRRRSSSSSSSSTTTTTUUUUTTTTTTTTTTVVVVVVVWWWWWXXXXXXXYYYYYYZZZZZ[[[[[[[[\\\\\]]]]]]]]^^^^^^^_______````````aaaaaaabaaaaaaaaacccccccccccccddddddddddddeeeeeeeefffffffggggggggggggghhhhhhhhhhhhhiiiiiiiiiiiijjjjjjjjkkkkkklllllllmmmmmmmnnnnnnnnooooooopppppppppppppppppppppqqqqqqqqrrrrrrrssssssssssttttttttttuuuuuuuuuuuvvvvvvwwwwwwxxxxxxxyyyyyyzzzzz{{{{{{|||||||}}}}}}}~~~~~~~~~~~~~~~~}PrefacePrefacePrefacePrefacePrefacePrefacePrefacePrefacePrefacePrefacePreface1. Introduction1.1 Language Features1.1 Language Features/1.1.1 Alpha AXP Native Mode Instructions)1.1.2 Direct Assignment Statements!1.1.3 Assembler Directives!1.1.3 Assembler Directives+1.1.3.1 General Assembler Directives+1.1.3.1 General Assembler Directives1.1.3.2 Macro Directives/1.2 Invoking MACRO-64 on OpenVMS Systems/1.2 Invoking MACRO-64 on OpenVMS Systems/1.2 Invoking MACRO-64 on OpenVMS Systems/1.2 Invoking MACRO-64 on OpenVMS Systems/1.2 Invoking MACRO-64 on OpenVMS Systems/1.2 Invoking MACRO-64 on OpenVMS Systems$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers$1.2.1 Command Line Qualifiers22. Components of MACRO-64 Source Statements22. Components of MACRO-64 Source Statements22. Components of MACRO-64 Source Statements"2.1 Source Statement Format"2.1 Source Statement Format"2.1 Source Statement Format6Table 2- 1: Using Tab Stops in Statement Fields"2.1 Source Statement Format"2.1 Source Statement Format"2.1 Source Statement Format"2.1 Source Statement Format2.1.1 Label Field2.1.1 Label Field2.1.1 Label Field2.1.1 Label Field2.1.1 Label Field2.1.1 Label Field2.1.2 Operator Field2.1.2 Operator Field2.1.2 Operator Field2.1.2 Operator Field2.1.3 Operand Field2.1.3 Operand Field2.1.3 Operand Field2.1.3 Operand Field2.1.3 Operand Field2.1.3 Operand Field2.1.3 Operand Field2.1.4 Comment Field2.1.4 Comment Field2.1.4 Comment Field2.1.4 Comment Field2.2 Character Set2.2 Character Set2.2 Character SetATable 2- 2: Special Characters Used in MACRO-64 StatementsATable 2- 2: Special Characters Used in MACRO-64 Statements2.3 Numbers2.3.1 Integers2.3.1 Integers2.3.1 Integers2.3.1 Integers2.3.1 Integers2.3.1 Integers#2.3.2 Floating-Point Numbers#2.3.2 Floating-Point Numbers#2.3.2 Floating-Point Numbers#2.3.2 Floating-Point Numbers#2.3.2 Floating-Point Numbers#2.3.2 Floating-Point Numbers#2.3.2 Floating-Point Numbers2.4 Quoted Literals2.4 Quoted Literals2.4 Quoted Literals2.4 Quoted Literals2.4 Quoted Literals2.5 Symbols2.5.1 Permanent Symbols2.5.1 Permanent Symbols2.5.1 Permanent Symbols2.5.1 Permanent Symbols12.5.2 User-Defined Symbols and Macro Names12.5.2 User-Defined Symbols and Macro Names12.5.2 User-Defined Symbols and Macro Names12.5.2 User-Defined Symbols and Macro Names12.5.2 User-Defined Symbols and Macro Names12.5.2 User-Defined Symbols and Macro Names12.5.2 User-Defined Symbols and Macro Names&2.5.3 Determining Symbol Values22.5.3.1 Using Symbols in the Operator Field22.5.3.1 Using Symbols in the Operator Field22.5.3.1 Using Symbols in the Operator Field22.5.3.1 Using Symbols in the Operator Field22.5.3.1 Using Symbols in the Operator Field12.5.3.2 Using Symbols in the Operand Field12.5.3.2 Using Symbols in the Operand Field12.5.3.2 Using Symbols in the Operand Field12.5.3.2 Using Symbols in the Operand Field12.5.3.2 Using Symbols in the Operand Field12.5.3.2 Using Symbols in the Operand Field12.5.3.2 Using Symbols in the Operand Field.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code.2.6 Temporary Labels Within Source Code2.7 Label Addresses>2.7.1 Label Addresses, Optimization, and Code Alignment>2.7.1 Label Addresses, Optimization, and Code Alignment>2.7.1 Label Addresses, Optimization, and Code Alignment>2.7.1 Label Addresses, Optimization, and Code Alignment92.7.2 Label Addresses and Automatic Data Alignment92.7.2 Label Addresses and Automatic Data Alignment92.7.2 Label Addresses and Automatic Data Alignment92.7.2 Label Addresses and Automatic Data Alignment92.7.2 Label Addresses and Automatic Data Alignment92.7.2 Label Addresses and Automatic Data Alignment92.7.2 Label Addresses and Automatic Data Alignment92.7.2 Label Addresses and Automatic Data Alignment 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions 2.8 Terms and Expressions42.9 Unary Operators for Terms and Expressions-Table 2- 3: Summary of Unary Operators$2.9.1 Radix Control Operators$2.9.1 Radix Control Operators$2.9.1 Radix Control Operators$2.9.1 Radix Control Operators$2.9.1 Radix Control Operators$2.9.1 Radix Control Operators(2.9.2 Numeric Complement Operator(2.9.2 Numeric Complement Operator(2.9.2 Numeric Complement Operator(2.9.2 Numeric Complement Operator2.10 Binary Operators.Table 2- 4: Summary of Binary Operators2.10 Binary Operators2.10 Binary Operators2.10 Binary Operators'2.10.1 Arithmetic Shift Operator"2.10.2 Logical AND Operator+2.10.3 Logical Inclusive OR Operator+2.10.4 Logical Exclusive OR Operator(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements(2.11 Direct Assignment Statements$2.12 Current Location Counter$2.12 Current Location Counter$2.12 Current Location Counter$2.12 Current Location Counter$2.12 Current Location Counter$2.12 Current Location Counter$2.12 Current Location Counter$2.12 Current Location Counter#3. MACRO-64 Lexical Operator,3.1 Processing with Lexical Operators,3.1 Processing with Lexical Operators"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax"3.2 Lexical Operator Syntax53.3 Numeric Symbols and Lexical String Symbols53.3 Numeric Symbols and Lexical String Symbols53.3 Numeric Symbols and Lexical String Symbols53.3 Numeric Symbols and Lexical String Symbols53.3 Numeric Symbols and Lexical String Symbols53.3 Numeric Symbols and Lexical String Symbols53.3 Numeric Symbols and Lexical String Symbols(3.4 Lexical Substitution Operator(3.4 Lexical Substitution Operator(3.4 Lexical Substitution Operator"3.5 Lexical Escape Operator"3.5 Lexical Escape OperatorCExample 3- 1: Lexical Processing Without the Escape Operator"3.5 Lexical Escape Operator"3.5 Lexical Escape Operator"3.5 Lexical Escape Operator<Example 3- 2: Lexical Processing With Escape Operator"3.5 Lexical Escape Operator"3.5 Lexical Escape Operator"3.6 Using Lexical Operators,Example 3- 3: Using Lexical Operators<Example 3- 4: Source Statements After Macro Expansion3.7 Lexical Operators/Table 3- 1: Summary of MACRO-64 Lexicals %EDIT %EDIT %EDIT %EDIT %EDIT %EDIT %EDIT %EDIT %EDIT %EDIT %EDIT%ELEMENT%ELEMENT%ELEMENT%ELEMENT%ELEMENT%ELEMENT%ELEMENT%ELEMENT%ELEMENT%EXTRACT%EXTRACT%EXTRACT%EXTRACT%EXTRACT%EXTRACT%EXTRACT%EXTRACT%EXTRACT%INTEGER%INTEGER%INTEGER%INTEGER%INTEGER%INTEGER%INTEGER%LENGTH%LENGTH%LENGTH%LENGTH%LENGTH%LENGTH%LENGTH%LOCATE%LOCATE%LOCATE%LOCATE%LOCATE%LOCATE%LOCATE%LOCATE%REPEAT%REPEAT%REPEAT%REPEAT%REPEAT%REPEAT%REPEAT%REPEAT%STRING%STRING%STRING%STRING%STRING%STRING%STRING%STRING %TIME %TIME %TIME %TIME %TIME %TIME %TYPE %TYPE %TYPE %TYPE %TYPE %TYPE#Table 3- 2: %TYPE Attributes %TYPE %TYPE %TYPE %TYPE %TYPE %TYPE4. Macro Arguments4. Macro Arguments4. Macro Arguments4. Macro Arguments4. Macro Arguments4. Macro Arguments4. Macro Arguments 4.1 Using Macro Arguments 4.1 Using Macro Arguments 4.1 Using Macro Arguments 4.1 Using Macro Arguments 4.1 Using Macro Arguments4.2 Using Default Values4.2 Using Default Values4.2 Using Default Values4.2 Using Default Values"4.3 Using Keyword Arguments"4.3 Using Keyword Arguments"4.3 Using Keyword Arguments"4.3 Using Keyword Arguments"4.3 Using Keyword Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.4 Using String Arguments!4.5 Argument Concatenation!4.5 Argument Concatenation!4.5 Argument Concatenation!4.5 Argument Concatenation!4.5 Argument Concatenation!4.5 Argument Concatenation!4.5 Argument Concatenation,4.6 Passing Numeric Values of Symbols,4.6 Passing Numeric Values of Symbols,4.6 Passing Numeric Values of Symbols,4.6 Passing Numeric Values of Symbols)4.7 Using Created Temporary Labels)4.7 Using Created Temporary Labels)4.7 Using Created Temporary Labels)4.7 Using Created Temporary Labels)4.7 Using Created Temporary Labels)4.7 Using Created Temporary Labels'5. MACRO-64 Assembler Directives$5.1 Program Sections (Psects)$5.1 Program Sections (Psects)$5.1 Program Sections (Psects)$5.1 Program Sections (Psects)$5.1 Program Sections (Psects)$5.1 Program Sections (Psects)$5.1 Program Sections (Psects)$5.1 Program Sections (Psects)#5.2 Automatic Data Alignment#5.2 Automatic Data Alignment5.3 Directives5.3 Directives:Table 5- 1: Summary of General Assembler Directives:Table 5- 1: Summary of General Assembler Directives5.3 Directives.Table 5- 2: Summary of Macro Directives5.3 Directives.ADDRESS.ADDRESS.ADDRESS.ADDRESS.ADDRESS.ADDRESS.ADDRESS .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ALIGN .ASCIC .ASCIC .ASCIC .ASCIC .ASCIC .ASCIC .ASCIC .ASCIC .ASCID .ASCID .ASCID .ASCID .ASCID .ASCID .ASCID .ASCID .ASCID .ASCII .ASCII .ASCII .ASCII .ASCII .ASCII .ASCII .ASCIZ .ASCIZ .ASCIZ .ASCIZ .ASCIZ .ASCIZ .ASCIZ .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE .BASE.BEGIN_EXACT.BEGIN_EXACT.BEGIN_EXACT.BEGIN_EXACT.BEGIN_EXACT.BEGIN_EXACT.BEGIN_EXACT.BEGIN_EXACT.BEGIN_EXACT .BLK x .BLK x .BLK x .BLK x .BLK x .BLK x .BLK x .BLK x .BLK x .BLK x .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE .BYTE.CODE_ADDRESS.CODE_ADDRESS.CODE_ADDRESS.CODE_ADDRESS.CODE_ADDRESS.CODE_ADDRESS.CODE_ADDRESS.D_FLOATING.D_FLOATING.D_FLOATING.D_FLOATING.D_FLOATING.D_FLOATING.D_FLOATING.DISABLE.DISABLE.DISABLE.DISABLE.DISABLE.DISABLE .ELSE .ELSE .ELSE .ELSE .ELSE .ELSE .ELSE .ELSE.ENABLE.ENABLE.ENABLE.ENABLE.ENABLE:Table 5- 3: .ENABLE and .DISABLE Symbolic Arguments:Table 5- 3: .ENABLE and .DISABLE Symbolic Arguments:Table 5- 3: .ENABLE and .DISABLE Symbolic Arguments:Table 5- 3: .ENABLE and .DISABLE Symbolic Arguments.ENABLE.ENABLE.ENABLE.ENABLE.ENABLE.ENABLE.ENABLE.ENABLE.ENABLE.ENABLE .END .END .END .END .END .END .END .ENDC .ENDC .ENDC .ENDC .ENDC .ENDM .ENDM .ENDM .ENDM .ENDM .ENDM .ENDM .ENDR .ENDR .ENDR .ENDR .ENDR .ENDR.END_EXACT.END_EXACT.END_EXACT.END_EXACT.END_EXACT .ERROR .ERROR .ERROR .ERROR .ERROR .ERROR .ERROR .ERROR .EVEN .EVEN .EVEN .EVEN .EVEN.EXTERNAL.EXTERNAL.EXTERNAL.EXTERNAL.EXTERNAL.EXTERNAL.EXTERNAL.EXTERNAL.F_FLOATING.F_FLOATING.F_FLOATING.F_FLOATING.F_FLOATING.F_FLOATING.F_FLOATING.G_FLOATING.G_FLOATING.G_FLOATING.G_FLOATING.G_FLOATING.G_FLOATING.G_FLOATING .IDENT .IDENT .IDENT .IDENT .IDENT .IDENT .IDENT .IDENT .IF .IF .IF .IF .IF .IF .IFFTable 5- 4: Condition Tests for Conditional Assembly Directives .IF .IF .IF .IF .IF .IF .IF .IF .IF .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IF_x .IIF .IIF .IIF .IIF .IIF .IIF .IIF .IIF .IIF .IIF .IIF .IIF.INCLUDE.INCLUDE.INCLUDE.INCLUDE.INCLUDE.INCLUDE.INCLUDE.INCLUDE.INSTRUCTION.INSTRUCTION.INSTRUCTION.INSTRUCTION.INSTRUCTION.INSTRUCTION.INSTRUCTION .IRP .IRP .IRP .IRP .IRP .IRP .IRP .IRP .IRP .IRP .IRP .IRP .IRP .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC .IRPC.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LIBRARY.LINKAGE_PAIR.LINKAGE_PAIR.LINKAGE_PAIR.LINKAGE_PAIR.LINKAGE_PAIR.LINKAGE_PAIR.LINKAGE_PAIR.LINKAGE_PAIR .LIST .LIST .LIST .LIST .LIST .LIST.LOCAL_CODE_ADDRESS.LOCAL_CODE_ADDRESS.LOCAL_CODE_ADDRESS.LOCAL_CODE_ADDRESS.LOCAL_CODE_ADDRESS.LOCAL_CODE_ADDRESS.LOCAL_CODE_ADDRESS.LOCAL_LINKAGE_PAIR.LOCAL_LINKAGE_PAIR.LOCAL_LINKAGE_PAIR.LOCAL_LINKAGE_PAIR.LOCAL_LINKAGE_PAIR.LOCAL_LINKAGE_PAIR.LOCAL_LINKAGE_PAIR".LOCAL_PROCEDURE_DESCRIPTOR".LOCAL_PROCEDURE_DESCRIPTOR".LOCAL_PROCEDURE_DESCRIPTOR".LOCAL_PROCEDURE_DESCRIPTOR".LOCAL_PROCEDURE_DESCRIPTOR".LOCAL_PROCEDURE_DESCRIPTOR".LOCAL_PROCEDURE_DESCRIPTOR".LOCAL_PROCEDURE_DESCRIPTOR .LONG .LONG .LONG .LONG .LONG .LONG .LONG .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MACRO .MCALL .MCALL .MCALL .MCALL .MCALL .MCALL .MCALL .MCALL.MDELETE.MDELETE.MDELETE.MDELETE.MDELETE.MDELETE.MDELETE .MEXIT .MEXIT .MEXIT .MEXIT .MEXIT .MEXIT .MEXIT .MEXIT .MEXIT .MEXIT .NARG .NARG .NARG .NARG .NARG .NARG .NARG .NARG .NARG .NARG .NCHR .NCHR .NCHR .NCHR .NCHR .NCHR .NCHR .NCHR .NCHR .NCHR .NCHR .NLIST .NLIST .NLIST .NLIST .NLIST .NLIST.NOSHOW.NOSHOW.NOSHOW.NOSHOW.NOSHOW.NOSHOW .OCTA .OCTA .OCTA .OCTA .OCTA .OCTA .OCTA .ODD .ODD .ODD .ODD .ODD .ODD.PACKED.PACKED.PACKED.PACKED.PACKED .PAGE .PAGE .PAGE .PAGE .PAGE .PAGE .PRINT .PRINT .PRINT .PRINT .PRINT .PRINT .PRINT.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTOR.PROCEDURE_DESCRIPTOR .PSECT .PSECT .PSECT .PSECT .PSECT .PSECT .PSECT-Table 5- 5: Program Section Attributes-Table 5- 5: Program Section Attributes-Table 5- 5: Program Section Attributes5Table 5- 6: Default Program Section Attributes .PSECT .PSECT .PSECT .PSECT .PSECT .PSECT .PSECT .PSECT .PSECT .QUAD .QUAD .QUAD .QUAD .QUAD .QUAD .QUAD.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.REPEAT.RESTORE_PSECT.RESTORE_PSECT.RESTORE_PSECT.RESTORE_PSECT.RESTORE_PSECT.RESTORE_PSECT.SAVE_PSECT.SAVE_PSECT.SAVE_PSECT.SAVE_PSECT.SAVE_PSECT.SAVE_PSECT.SAVE_PSECT.S_FLOATING.S_FLOATING.S_FLOATING.S_FLOATING.S_FLOATING.S_FLOATING.S_FLOATING .SHOW .SHOW .SHOW .SHOW .SHOW7Table 5- 7: .SHOW and .NOSHOW Symbolic Arguments .SHOW .SHOW .SHOW .SHOW.SIGNED_BYTE.SIGNED_BYTE.SIGNED_BYTE.SIGNED_BYTE.SIGNED_BYTE.SIGNED_BYTE.SIGNED_BYTE.SIGNED_BYTE.SIGNED_WORD.SIGNED_WORD.SIGNED_WORD.SIGNED_WORD.SIGNED_WORD.SIGNED_WORD.SIGNED_WORD.SUBTITLE.SUBTITLE.SUBTITLE.SUBTITLE.SUBTITLE.SUBTITLE.SUBTITLE.T_FLOATING.T_FLOATING.T_FLOATING.T_FLOATING.T_FLOATING.T_FLOATING.T_FLOATING .TITLE .TITLE .TITLE .TITLE .TITLE .TITLE .TITLE .TITLE .WARN .WARN .WARN .WARN .WARN .WARN .WARN .WEAK .WEAK .WEAK .WEAK .WEAK .WEAK .WEAK .WEAK .WORD .WORD .WORD .WORD .WORD .WORD .WORD"6. MACRO-64 Supplied Macros"6. MACRO-64 Supplied Macros$6.1 MACRO-64 Supplied Library$6.1 MACRO-64 Supplied Library$6.1 MACRO-64 Supplied Library$6.1 MACRO-64 Supplied Library$6.1 MACRO-64 Supplied Library%6.2 Routines and Lexical Scope%6.2 Routines and Lexical Scope%6.2 Routines and Lexical Scope*6.2.1 Routines and Program Sections*6.2.1 Routines and Program Sections*6.2.1 Routines and Program Sections*6.2.1 Routines and Program Sections*6.2.1 Routines and Program Sections36.3 Using Macros to Control Program Sections&6.3.1 Defining Program Sections&6.3.1 Defining Program Sections&6.3.1 Defining Program Sections&6.3.1 Defining Program Sections)6.3.2 Using Macro Specific Symbols)6.3.2 Using Macro Specific Symbols)6.3.2 Using Macro Specific Symbols)6.3.2 Using Macro Specific Symbols$6.3.3 Defining Procedure Type$6.3.3 Defining Procedure Type$6.3.3 Defining Procedure Type.6.3.4 Using Macros in Prologue Sections.6.3.4 Using Macros in Prologue Sections.6.3.4 Using Macros in Prologue Sections.6.3.5 Using Macros in Epilogue Sections.6.3.5 Using Macros in Epilogue Sections56.4 Programming Examples Using Supplied Macros2Example 6- 1: Program Using Supplied Macros56.4 Programming Examples Using Supplied Macros 6.5 Using the $CALL Macro 6.5 Using the $CALL Macro 6.5 Using the $CALL Macro 6.5 Using the $CALL Macro 6.5 Using the $CALL Macro 6.5 Using the $CALL Macro'6.5.1 Using $CALL in Source Code(Example 6- 2: Program Using $CALL'6.5.1 Using $CALL in Source Code%6.6 Programming Considerations86.6.1 Making Multiple Calls From the Same Routine86.6.1 Making Multiple Calls From the Same Routine86.6.1 Making Multiple Calls From the Same Routine!6.6.2 Non-Standard Linkage!6.6.3 Routine Restrictions!6.6.3 Routine Restrictions6.7 Macro Descriptions6.7 Macro Descriptions6.7.1 Syntax Rules6.7.1 Syntax Rules$BEGIN_EPILOGUE$BEGIN_EPILOGUE$BEGIN_EPILOGUE$BEGIN_EPILOGUE$BEGIN_EPILOGUE$BEGIN_EPILOGUE$BEGIN_EPILOGUE$BEGIN_EPILOGUE $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL!Table 6- 1: ARGS Arguments $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL $CALL$CODE_SECTION$CODE_SECTION$CODE_SECTION$CODE_SECTION$CODE_SECTION$CODE_SECTION$DATA_SECTION$DATA_SECTION$DATA_SECTION$DATA_SECTION$DATA_SECTION$DATA_SECTION$END_EPILOGUE$END_EPILOGUE$END_EPILOGUE$END_EPILOGUE$END_EPILOGUE$END_EPILOGUE$END_EPILOGUE$END_EPILOGUE$END_PROLOGUE$END_PROLOGUE$END_PROLOGUE$END_PROLOGUE$END_PROLOGUE$END_PROLOGUE$END_PROLOGUE$END_ROUTINE$END_ROUTINE$END_ROUTINE$END_ROUTINE$END_ROUTINE$END_ROUTINE$END_ROUTINE$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_PAIR$LINKAGE_SECTION$LINKAGE_SECTION$LINKAGE_SECTION$LINKAGE_SECTION$LINKAGE_SECTION$LINKAGE_SECTION $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF $OPDEF.PACKED.PACKED.PACKED.PACKED.PACKED.PACKED.PACKED.PACKED.PACKED.PACKED.PACKED.PACKED$PROCEDURE_DESCRIPTOR$PROCEDURE_DESCRIPTOR$PROCEDURE_DESCRIPTOR$PROCEDURE_DESCRIPTOR$PROCEDURE_DESCRIPTOR$PROCEDURE_DESCRIPTOR$PROCEDURE_DESCRIPTOR$RETURN$RETURN$RETURN$RETURN$RETURN$RETURN$RETURN$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE$ROUTINE9A. MACRO-64 Alpha AXP Architecture Quick Reference9A. MACRO-64 Alpha AXP Architecture Quick Reference9A. MACRO-64 Alpha AXP Architecture Quick Reference#Figure A- 1: Data Structures'Figure A- 2: Instruction Formats%A.1 Register Usage Conventions=Table A- 1: Register Usage Conventions for OpenVMS AXP=Table A- 1: Register Usage Conventions for OpenVMS AXP=Table A- 1: Register Usage Conventions for OpenVMS AXP=Table A- 1: Register Usage Conventions for OpenVMS AXP=Table A- 1: Register Usage Conventions for OpenVMS AXP'A.2 Instruction Operand Notation'A.2 Instruction Operand Notation/Table A- 2: Instruction Operand Notation/Table A- 2: Instruction Operand Notation/Table A- 2: Instruction Operand Notation/Table A- 2: Instruction Operand Notation/Table A- 2: Instruction Operand Notation)A.3 Instruction Qualifier Notation1Table A- 3: Instruction Qualifier Notation-A.4 F-P Control Register (FPCR) Format5Table A- 4: F-P Control Register (FPCR) Format&A.5 Decodable Pseudo-Operations.Table A- 5: Decodable Pseudo-Operations.Table A- 5: Decodable Pseudo-Operations.Table A- 5: Decodable Pseudo-Operations.Table A- 5: Decodable Pseudo-Operations.Table A- 5: Decodable Pseudo-Operations9A.6 Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical OrderATable A- 6: Common Architecture Opcodes in Numerical Order.A.7 OpenVMS PALcode Instruction Summary<Table A- 7: OpenVMS Unprivileged PALcode Instructions<Table A- 7: OpenVMS Unprivileged PALcode Instructions<Table A- 7: OpenVMS Unprivileged PALcode Instructions<Table A- 7: OpenVMS Unprivileged PALcode Instructions<Table A- 7: OpenVMS Unprivileged PALcode Instructions:Table A- 8: OpenVMS Privileged PALcode Instructions:Table A- 8: OpenVMS Privileged PALcode Instructions:Table A- 8: OpenVMS Privileged PALcode Instructions:Table A- 8: OpenVMS Privileged PALcode Instructions:Table A- 8: OpenVMS Privileged PALcode Instructions-A.8 PALcode Opcodes in Numerical Order5Table A- 9: PALcode Opcodes in Numerical Order5Table A- 9: PALcode Opcodes in Numerical Order5Table A- 9: PALcode Opcodes in Numerical Order5Table A- 9: PALcode Opcodes in Numerical Order5Table A- 9: PALcode Opcodes in Numerical Order5Table A- 9: PALcode Opcodes in Numerical Order+A.9 Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Archite|I Icture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions4Table A- 10: Common Architecture Instructions#B. Programming with MACRO-64#B. Programming with MACRO-64#B. Programming with MACRO-64#B. Programming with MACRO-64#B.1 OpenVMS Calling Standard#B.1 OpenVMS Calling Standard#B.1 OpenVMS Calling Standard#B.1 OpenVMS Calling Standard/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers5Figure B- 1: Base Register Memory Displacement/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers7Figure B- 2: Accessing Memory via Base Addresses/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base Registers&Figure B- 3: Program Call Chain/B.2 Accessing Memory with Base Registers/B.2 Accessing Memory with Base RegistersB.3 Data StructuresB.3 Data StructuresB.3 Data Structures!B.3.1 Procedure Descriptor!B.3.1 Procedure Descriptor!B.3.1 Procedure Descriptor!B.3.1 Procedure Descriptor!B.3.1 Procedure DescriptorB.3.2 Signature BlockB.3.3 Linkage PairB.3.3 Linkage PairB.3.3 Linkage PairB.3.3 Linkage Pair2Example B- 1: Routine Without Linkage PairsB.3.3 Linkage PairB.3.3 Linkage PairB.3.3 Linkage PairB.3.3 Linkage Pair/Example B- 2: Routine With Linkage PairsB.3.3 Linkage PairB.3.3 Linkage PairB.4 Types of RoutinesB.4 Types of RoutinesB.4 Types of RoutinesB.4 Types of RoutinesB.4 Types of RoutinesB.4 Types of RoutinesB.4 Types of RoutinesB.4 Types of Routines!B.4.1 Routine Capabilities!B.4.1 Routine Capabilities#Table B- 1: Frame Attributes!B.4.1 Routine Capabilities7B.4.2 Entry Prologue and Exit Epilogue Sequences7B.4.2 Entry Prologue and Exit Epilogue Sequences7B.4.2 Entry Prologue and Exit Epilogue Sequences7B.4.2 Entry Prologue and Exit Epilogue Sequences7B.4.2 Entry Prologue and Exit Epilogue SequencesB.5 Example ProgramB.5 Example Program+B.6 Establishing Self-Addressability+B.6 Establishing Self-Addressability+B.6 Establishing Self-Addressability0Example B- 3: Establishing a Base Address+B.6 Establishing Self-Addressability/B.7 Optimization and Automatic Alignment/B.7 Optimization and Automatic Alignment/B.7 Optimization and Automatic Alignment/B.7 Optimization and Automatic Alignment/B.7 Optimization and Automatic Alignment/B.7 Optimization and Automatic Alignment%B.7.1 Automatic Data Alignment)B.7.1.1 Controlling Data Alignment:Example B- 4: Enabling and Disabling Data Alignment)B.7.1.1 Controlling Data Alignment6B.7.1.2 Directives for Automatic Data Alignment7Table B- 2: Directives Using Automatic Alignment7Table B- 2: Directives Using Automatic Alignment6B.7.1.2 Directives for Automatic Data Alignment+B.7.2 Automatic Code Label Alignment+B.7.2 Automatic Code Label Alignment+B.7.2 Automatic Code Label Alignment$B.7.3 Scheduling Optimization$B.7.3 Scheduling Optimization"B.7.4 Peephole Optimization"B.7.4 Peephole Optimization+B.7.5 Using MACRO-64 for Performance+B.7.5 Using MACRO-64 for Performance+B.7.5 Using MACRO-64 for Performance+B.7.5 Using MACRO-64 for Performance)B.7.6 Viewing Optimization Results!C. Using LSE with MACRO-64C.1 Invoking LSEC.1 Invoking LSEC.1 Invoking LSEC.2 Running DiagnosticsC.2 Running Diagnostics$D. Differences from VAX MACRO$D. Differences from VAX MACRO$D. Differences from VAX MACRO)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-64)D.1 Assembler Features in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-645D.2 VAX MACRO Features Not Present in MACRO-64E. Error MessagesE. Error MessagesADDTRUNC, Storing an address expression into a storage allocation less than the size of an address will result in data truncation.ALIGNFILLIGN, The optional .ALIGN fill pattern is being ignored. It is only valid for psects that do not possess the EXE and NOMIX attributes.ALIGNFILLTRUNC, The value specified for the .ALIGN optional fill pattern should be an inte- ger in the range of 0 . . . 255. Data truncation will occur with the currently specified fill pattern in a byte storage location.XALIGNLABELIGN, The ALIGN_LABEL option has been replaced by the ALIGN_CODE option.;ALIGNTOBIG, Specified alignment too large for PSECT.PASCIITRUNC, ASCII constant contains too many characters; value truncated.2BADALIGN, Alignment specifier out of range.1BADENDARG, Bad argument to .END directive.:BADINSARG, Argument N invalid for this instruction.0BADLIB, Error opening library file XXXXX.5BADMACPARAMNAME, Illegal macro parameter name.(BADMACRONAME, Illegal macro name.5BADOPERAND, Invalid operand type for operator.-BADPARAMSTR, Illegal parameter string.BASEFAIL, Argument N invalid. The assembler failed to find a base register specified with a previous .BASE directive to form a register expression of the form offset(Rn).ZBEGEXPSC, .BEGIN_EXACT is not valid in a psect with the NOEXE and NOMIX attributes.VBYTEALIGNIGN, The BYTE_ALIGN option has been replaced by the ALIGN_DATA option.3CONPSECTATTR, Contradictory PSECT attribute.BCONTEOF, End of file encountered after line contin- uation.CDATAALIGNTOBIG, Data requires alignment too large for PSECT.]DATANOTINNOEXE, Data declarations must be in a psect with the MIX, or NOEXE attribute.TDIRNOTINNOEXE, Directive must be in a psect with the MIX, or NOEXE attribute.CDISPTOOLGE, Branch offset is too large for this instruction.3DUPLEXTERN, EXTERN item is multiply defined.2DUPLGLOBAL, Duplicate global name detected.7DUPMACPARAMNAME, Duplicate macro parameter name.XENDEXPSC, .END_EXACT is not valid in a psect with the NOEXE and NOMIX attributes.$EOLEXP, End of line expected.QESCAPE, Illegal escape sequence in string literal; expected \, ", x, or X.EXP32BITTRUNC, Expected an integer in the range 0 . . . (2^32)-1 for unsigned expression OR - (2^31) . . . +(2^31)-1 for signed expression. Data truncation to 32 bits.EXP32BITTYPE, Expected an integer in the range 0 . . . (2^32)-1 for unsigned expression OR - (2^31) . . . +(2^31)-1 for signed expression.\EXPBINEXPTERM, Found XXXXX when expecting a binary operator or expression terminator.HEXPFPREG, Argument N invalid. Expected a floating point register.DEXPGENREG, Argument N invalid. Expected a gen- eral register.^EXPIDPROC, Argument N invalid. Expected an iden- tifier representing a procedure value.<EXPINTPAL, Expected integer expression or PAL opcode.PEXPLAB, Argument N invalid. Expected a label de- fined in the same psect.mEXPLITVAL, Argument N invalid. Expected an inte- ger literal value in the inclusive range 0 . . . 255.1EXPMACRONAME, Expected a valid macro name.rEXPPALOPLIT, Argument N invalid. Expected an integer literal value in the inclusive range 0 . . . 67108863.fEXPREGOFF, Argument N invalid. Expected a gen- eral register expression of the form offset(Rn).yEXPRESEXP, Argument N invalid. Expected an ex- pression with no forward references resolvable to psect +/- offset.<EXPSTACKOVER, Internal SEM expression stack overflow.<EXPTOOCMPLX, Expression is too complex to evalu- ate.gEXPZEROFF, Argument N invalid. Expected a general register expression of the form 0(Rn) or (Rn).HFOUNDEXP, Found XXXXX when expecting one of the following: XXXXX.!GENERROR, Generated ERROR:!GENPRINT, Generated PRINT:"GENWARN, Generated WARNING:EHEXSTR, Illegal hexadecimal escape sequence in string literal.IDFOUND, Found identifier in the opcode field when expecting one of the following: opcode, directive, macro invocation, or symbol definition.:IDTOOLONG, Identifier is longer than 31 characters.(ILLASCII, Illegal ASCII constant.'ILLBIN, Illegal binary constant.(ILLDEC, Illegal decimal constant.?ILLEXPON, Illegal exponent in floating point con- stant.1ILLFLOAT, Illegal floating point constant.,ILLHEX, Illegal hexadecimal constant.%ILLIFOP, Illegal .IF operator.4ILLINCL, Illegal .INCLUDE file specification.&ILLOCT, Illegal octal constant.<ILLOPERANDMIX, Illegal operand mixing for opera- tor.~ILLPROCRET, Illegal procedure return; linkage reg- ister (argument 1) must be R31 when software hint (argument 3) is 1.\ILLRADIX, Illegal radix specifier in numeric con- stant; specify A, B, C, D, O, or X.NINCLDEPTH, .INCLUDE nest depth exceeds N - check for circular .INCLUDE.*INCLOPEN, .INCLUDE file open error.VINSNOTINPSC, Instructions must be in a MIX, NOEXE; MIX,EXE; or NOMIX,EXE PSECT.@INTERNAL, Internal assembler error. Please submit an SPR.=INTERR, Internal processing error in the SYN facility.SINVALIGNFILL, Invalid optional fill pattern specified with .ALIGN directive.:INVBASEEXP, Invalid expression for .BASE directive.`INVBASEREG, Invalid base register specified. Base register must be one of R0 through R30.INVBRTGT, Invalid branch target. Branch target la- bel must be defined in same psect as the branch instruction which references the label.INVCA, Invalid code address specified with proce- dure descriptor. Code address must be a non- temporary label defined in a psect with the EXE or MIX attribute after its use with .PROCEDURE_ DESCRIPTOR.=INVEXP, Found XXXXX when expecting a valid expression.>INVEXPRFORDIR, Invalid expression type for direc- tive.;INVEXPRFORSYM, Invalid expression type for sym- bol.iINVFPCONST, Invalid floating point value detected. Check value range for floating point data type.RINVINSQUAL, Instruction qualifier list specified is invalid for the opcode.PINVLCA, Invalid or undefined code address found for procedure descriptor.NINVLISTOPT, Invalid option specified with the .LIST or .SHOW directive.6INVLPD, Invalid procedure descriptor specified.RINVNLISTOPT, Invalid option specified with the .NLIST or .NOSHOW directive.INVOFF, Attempting to specify data intialization with current psect offset that is outside the range of 0 to 2147483647.INVREPCOUNT, The integer value of the .REPEAT expression is not within the inclusive range of 0 . . . 65535. A zero value is assumed.KINVSAVEOPT, Invalid option specified with the .SAVE_PSECT directive.2INVTEMPLAB, Invalid use of temporary label.AINVTERM, Found N when expecting a valid expres- sion term.0LABELNOTDEF, Undefined label encountered.2LABELREDECL, Illegal redefinition of label.8LABNOTINPSECT, Label must be declared in a PSECT.2LEXOPEDITSPEC, Unrecognized edit specifier:WLEXOPENDM, Illegal modification of .ENDM directive keyword by lexical operation.WLEXOPENDR, Illegal modification of .ENDR directive keyword by lexical operation.oLEXOPSYNTAX, Illegal lexical operator syntax (miss- ing left or right parenthesis, missing comma, etc.).aLEXSYM, XXXXX is already a lexical string symbol name; it cannot also be a numeric symbol.LIBMOD_BADFORMAT, Library module XXXXX contains illegal syntax (missing .MACRO or la- bel preceding .MACRO, missing or not matching .ENDM, or other macro syntax error).3LIBMOD_EMPTY, Library module XXXXX is empty.cLIBMOD_EXTRA, Library module XXXXX contains extraneous text after .ENDM; extra text ignored.8LIBMOD_NOT_FOUND, Library module XXXXX not found.KLOCCTRNOTDATA, Location counter cannot be set in an EXE,NOMIX PSECT.MACCASEMATCH, Library macro name is spelled using different alphabetic case than in .MCALL directive or macro invocation.`MACEXPNEST, Macro expansion exceeds maximum nesting depth (macro recursion not detected).pMACPARAMGENDEF, You may specify a generated label default value, or a default string value, but not both._MACPARAMSYNTAX, Illegal macro parameter syntax: Found XXXXX when expecting one of XXXXX.QMACRECURSE, Recursive macro exceeds maximum macro expansion nesting depth.QMACZERO, Cannot evaluate expression. A zero ex- pression value is assumed.9MAXIF, Maximum nesting of .IF directives exceeded.,MISSENDC, Missing .ENDC directive(s).,MISSINGENDM, Missing .ENDM directive.,MISSINGENDR, Missing .ENDR directive.KMISSQUOTE, Missing closing double-quote character in string literal.MODCODLOCCTR, Restoring the location counter in the current context causes an illegal modification of the location counter for an EXE, NOMIX psect.=NOBEGEX, Unmatched .END_EXACT directive en- countered.QNOCA, No code address specified as argument 2 with .PROCEDURE_DESCRIPTOR .ENOQUAL, Instruction qualifiers are not valid with this opcode.RNOTAQUAL, An item specified in the qualifier list is not a valid qualifier.=NOTENOUGHARGS, Not enough arguments for in- struction.ANOTINMACRO, This statement must only occur within a macro.4NOTINSEM, Missing functionality in assembler.aNUMSYM, XXXXX is already a numeric symbol name; it cannot also be a lexical string symbol.5OPTIGN, VAX MACRO -32 option(s) being ignored.OVERLAP, Overlapping initializers detected at off- set NN. Multiple initial values are specified for the same PSECT offset.IPSECTALIGNCON, PSECT alignment conflicts with earlier declaration.HPSECTATTRCON, PSECT attribute conflicts with earlier declaration.^REDUNDELSE, You cannot specify more than one .ELSE directive within a single .IF block.3RESTOREWOSAVE, PSECT .RESTORE without .SAVE.>SAVESTACKOVER, Internal SEM PSECT .SAVE stack overflow.*SRCREAD, Error reading source file.4SYMBOLREDECL, Illegal redefinition of symbol.9TOOMANYARGS, Too many arguments for instruc- tion.KTOOMANYMACARG, More arguments specified than defined for this macro.5TOOMANYMACPARAMS, Too many macro parame- ters.*TRUNCDATA, Data truncation warning.IUNDCA, Undefined code address specified with procedure descriptor.JUNDEFSYM, Undefined symbol or label. Assuming .EXTERNAL definition.-UNEXPELSE, Unexpected .ELSE directive.-UNEXPENDC, Unexpected .ENDC directive.-UNEXPENDM, Unexpected .ENDM directive.-UNEXPENDR, Unexpected .ENDR directive.7UNEXPIFF, Unexpected .IF_FALSE (.IFF) directive.6UNEXPIFT, Unexpected .IF_TRUE (.IFT) directive.>UNEXPIFTF, Unexpected .IF_TRUE_FALSE (.IFTF) directive./UNEXPMEXIT, Unexpected .MEXIT directive.-UNKDIR, Unknown directive XXXXX found.AUNKENDISOPTION, Unknown .ENABLE/.DISABLE option specified.,UNKNOWNATTR, Unknown PSECT attribute.TUNTERMEX, N Unterminated .BEGIN_EXACT direc- tive(s) detected in psect XXXXX.kVAXDIR, VAX MACRO -32 directive(s) or option(s) being ignored. Continuing processing with next line.VMACELSE, You cannot specify .ELSE in the same .IF block with either .IF_FALSE (.IFF), .IF_TRUE (.IFT), or .IF_TRUE_FALSE (.IFTF).KWRONGMACID, Macro name in .ENDM does not match corresponding .MACRO.WRONGPL, The code address specified in the .PROCEDURE_DESCRIPTOR directive must oc- cur BEFORE its definition as a local or global label.WRONGPL, The code address specified in the .PROCEDURE_DESCRIPTOR directive must oc- cur BEFORE its definition as a local or global label. }12345678FRONT_PREFACE10111213141516171819INTRO_CHAPINTRO_FEAT22NAT_MODE_DIR_ASSIGN_STATEMENTSASMB_DIR26GEN_ASMB_DIR28MAC_DIRINTRO_INVOKE3132333435COMM_LINE_QUAL373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081SOURCE_CHAP83842_SOURCE_STATEMENT_FORMAT8687USE_TABS_FIELDS89RU_COD_SOURCE9192LABEL_SEC94959697980_OPERATORFIELD1001011021_OPERANDFIELD1041051061071081092_COMMENTFIELD1111121130_CHARACTERSET115116MACRO_CHARS_TAB1181_NUMBERS2_INTEGERS2_SUBFORM1122123124125FPNUMBERS_SEC1272_SUBFORM21291301311322_QUOTED_LITERALS134135136137SYMBOLS_SEC4_PERMANENTSYMBOLS140141142MACRO_NAME_SEC144145146147148149SYMBOL_VAL_SECUS_OP_FIELD152153154155US_OPAND_FIELD157158159160161162LOCAL_LABELS2_SUBFORM3165166167168169170171172173174175176LABEL_ADDRESSESLABEL_ADDRESSES_OPT179180181LAB_ADDR_AUTO_ALIGN183184185186187188189TERMS_SEC191192193194195196197198OP_FORM_TERM_OP200201202203204205206207208209210211UNARY_SECUNARY_OPER_TABRADIX_OPER_SEC2_SUBFORM4216217218219NUMERIC_OPER_SEC2_SUBFORM7222223BINARY_SECBINARY_OPS_TAB2262272288_ARITHMETICSHIFTOPERATOR9_LOGICALANDOPERATOR10_LOGICALINCLUSIVEOROPERATOR11_LOGICALEXCLUSIVEOROPERATORASSIGN_SEC2_SUBFORM8235236237238239240241LOCA_COUNTER_SEC2432442_SUBFORM9246247248249ALPHA_LEXICALSPROC_LEX_OP252LEX_OP_SYNTAX254255256257258259260261262263264265NUMERIC_SYMB267268269270271272LEX_SUB_OPER274275LEX_EXC_OPER277L_P_W_E_O279280281L_P_WITH_E_O283284USING_LEXICAL_OPERATORSEXAMP_USING_LEXEXA_AFT_EXPLEXICAL_OPERATORS_1SUMM_ALPH_LEXBK_ADDED_62912922932942952962972983_EDIT_13_EDIT_2BK_ADDED_7302303304305306307308309BK_ADDED_8311312313314315316317318BK_ADDED_9320321322323324325BK_ADDED_10327328329330331332BK_ADDED_11334335336337338339340BK_ADDED_12342343344345346347348BK_ADDED_13350351352353354355356BK_ADDED_14358359360361362BK_ADDED_15364365366367368TYPE_ATTRIBUTES370371372373374375ARGU_CHAP377378379380381382ZERO_ARGS3843853863871_DEFAULTVALUES389390391KEYWORD_ARGUMENTS393394395396STRING_ARGUMENTS3983994004014024034044054064074084094104114124134144154164174182_ARGUMENTCONCATENATION4204214224234244253_PASSINGNUMERICVALUESOFSYMBOLS427428429LOCAL_LABELS_SEC431432433434435DIRECT_CHAPPROGRAM_SECTIONS4384394404414424434445_AUTO_DATA_ALIGNMENT446DIR_ECTIVES448ASSEMBLER_DIRECTIVES_TAB450451MACRO_DIRS453BK_ADDED_65455456457458459460BK_ADDED_664624634644654664674684694705_ALIGN_15_ALIGN_25_ALIGN_3BK_ADDED_684754764774784794804815_ASCID_DIRECTIVE4834844854864874885_ASCID_15_ASCID_2BK_ADDED_69492493494495496497BK_ADDED_70499500501502503504BK_ADDED_71506507508509510511512513514515516517518519BK_ADDED_72521522BK_ADDED_73524525BEGIN_EXACT_DIRECTIVE527528529530531532533534BLK_BOOK_REF536537538539540541542543544BK_ADDED_74546547548549550551BK_ADDED_76553554555556557558BK_ADDED_77560561562563564565BK_ADDED_79567568569570571BK_ADDED_80573574575576577578579BK_ADDED_81581582583584ENABLE_DISABLE586587588589590591592593BK_ADDED_83BK_ADDED_84BK_ADDED_85BK_ADDED_86598BK_ADDED_87600601602603604605BK_ADDED_89607608609610BK_ADDED_90612613614615616617BK_ADDED_92619620621622623END_EXACT_DIRECTIVE625626627628BK_ADDED_94630631632633634635636BK_ADDED_95638639640641BK_ADDED_97643644645646647648649BK_ADDED_99651652653654655656BK_ADDED_101658659660661662663BK_ADDED_102665666667668669670671BK_ADDED_104673674675676677678COND_ASMB_DIRS6806816825_IF_15_IF_25_IF_35_IF_46875_IF_5BK_ADDED_1066906916926936946956966975_IFX_15_IFX_25_IFX_35_IFX_4BK_ADDED_108703704705706707708709710711712713BK_ADDED_1107157167177187197207215_INSTRUCTION723724725726727728BK_ADDED_112730731732733734735736737738739740741BK_ADDED_113743744745746747748749750751752753754BK_ADDED_114756757758759760761762763764765766BK_ADDED_115768769770771772773774BK_ADDED_1167767777787797805_LOCAL_CODE_ADDRESS7827837847857867875_LOCAL_LINKAGE_PAIR7897907917927937945_LOCAL_PROCEDURE_DESCRIPTOR796797798799800801802BK_ADDED_117804805806807808809BK_ADDED_1188118128138148158168178188198208218225_MACRO_18248258268275_MACRO_28295_MACRO_3BK_ADDED_120832833834835836837838BK_ADDED_121840841842843844845BK_ADDED_1228478488498508515_MEXIT_18535_MEXIT_2855BK_ADDED_1248578588598608618628635_NARG_15_NARG_2BK_ADDED_1268678688698708718728738745_NCHR_15_NCHR_2BK_ADDED_127878879880881882BK_ADDED_128884885886887888BK_ADDED_129890891892893894895BK_ADDED_131897898899900901BK_ADDED_1170903904905906BK_ADDED_133908909910911912BK_ADDED_134914915916917918919BK_ADDED_136921922923924925926BK_ADDED_138928929930931932933PROGSEC_ATTR935936DEFPROG938939940941942943944945946BK_ADDED_140948949950951952953BK_ADDED_1419559569579589599609619625_REPEAT_15_REPEAT_29659669679685_REPEAT_3970971972973BK_ADDED_143975976977978979BK_ADDED_145981982983984985986BK_ADDED_147988989990991992993BK_ADDED_148995996997998SHOW_ARGS1000100110021003BK_ADDED_1501005100610071008xU xU100910101011BK_ADDED_151101310141015101610171018BK_ADDED_152102010211022102310241025BK_ADDED_154102710281029103010311032BK_ADDED_1551034103510361037103810391040BK_ADDED_157104210431044104510461047BK_ADDED_1591049105010511052105310541055BK_ADDED_160105710581059106010611062SUPPLIED_MACROS1064MAC64_SUPP_LIB1066106710681069ROUT_AND_LEX10711072ROUT_AND_PSECTS10741075107610776_USING_MAC6_DEF_PROG108010811082DEFINED_SYM108410851086PROCEDURE_TYPES10881089USE_MAC_PRO10911092USE_MAC_EP1094MACRO_PROG_EXAMPLPROG_USE_MACROS1097USE_CALL_MAC10991100110111021103USE_CALL_SOURCEPROG_USING_CALL1106PROG_CONSIDERATIONSMULT_CALL11091110NON_STD_LINKROUT_RESTRICTION1113MACRO_DESCRIPTIONS1115SYNTAX_RULES11176_BEGIN_EPILOGUE1119112011211122112311241125CALL_SYMB112711281129113011311132113311341135ARGS_ARG113711381139114011411142114311441145114611471148114911501151EX_LINK_1EX_LINK_2CODE_SECTION_SYMB11551156115711581159DATA_SECTION_SYMB11611162116311641165END_EPILOGUE_SYMB1167116811691170117111721173END_PROLOGUE_SYMB117511761177117811791180END_ROUTINE_SYMB118211831184118511861187LINKAGE_PAIR_SYMB11891190119111921193119411951196LINKAGE_SECTION_SYMB11981199120012011202OPDEF_SYMBOL120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227PACKED_SYMB12291230123112321233123412351236123712381239PROCEDURE_DESCRIPTOR_SYMB124112421243124412451246RETURN_SYMB124812491250125112521253ROUTINE_SYMB1255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303RTE_APPENDIX13051306DATA_STRUCT_FIGINST_FORMAT_FIGREG_USE_CONVREG_USE_CONV_TBL1311REG_USE_CONV1313REG_USE_CONVINST_OP_NOTAT1316INST_OP_NOTAT_TBL1318131913201321INST_QUAL_NOTATINST_QUAL_NOTAT_TBLFPCR_FORMATFPCR_FORMAT_TBLDECODE_PSEUDO_OPDECODE_PSEUDO_OP_TBL1328DECODE_PSEUDO_OP1330DECODE_PSEUDO_OPCOMMON_ARCH_OP_NUMCOMMON_ARCH_OP_NUM_TBL1334COMMON_ARCH_OP_NUM13361337133813391340COMMON_ARCH_OP_NUMPALCODE_INST_SUMMUNPRIV_PALCODE_INST_TBL1344PALCODE_INST_SUMM1346PALCODE_INST_SUMMPRIV_PALCODE_INST_TBL1349PALCODE_INST_SUMM1351PALCODE_INST_SUMMPALCODE_OPS_NUMPALCODE_OPS_NUM_TBL1355PALCODE_OPS_NUM13571358PALCODE_OPS_NUMCOMMON_ARCH_INSTCOMMON_ARCH_INST_TBL1362COMMON_ARCH_INST13641365136613671368136913701371COMMON_ARCH_INSTGET_START_ALPHA64137413751376ALPHA_32_CALLING_STANDARD137813791380ACCESSING_MEMORY_WITH_BASE13821383BASE_REG_MEM13851386BASD_REG_ARCH1388P_VALUEPROC_DESCR_A139113921393LINK_SECT_SUB13951396RW_CONCEPTS1398139914001401M_P_C_C1403PROG_START14051406DAT_STR14081409PROC_DESC1411141214131414SIG_BLOCKLINK_PAIR14171418USING_LINKEDNO_LINK1421142214231424WITH_LINKED_PAIR14261427TYPE_ROUT1429143014311432143314341435ROUT_PERM1437FRAME_ATTR1439ENTR_PRO_EXIT1441144214431444EXAMP_PROGRAM1446ESTAB_SELF_ADDRE14481449EST_BASE_EX1451OPTIMO14531454145514561457AUTO_DATA_ALIGNCNTRL_DAT_ALIGNE_D_DATA1461DIR_AUT_ALIGNDIR_USING_AUT_AL14641465AUTO_CODE_ALIGN14671468SCHEDULING1470PEEPHOLE1472PERFORMANCE147414751476VIEWING_OPTIMOUSE_LSE_64INVOKE_LSE14801481LSE_DIAG1483DIFF_APPENDIX14851486NEW1488148914901491149214931494149514961497149814991500150115021503150415051506150715081509NOT_PL15111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536ERR_MESS1538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691 @-ADOBE-Helvetica-Bold-R-Normal--*-240-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-R-Normal--*-180-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-R-Normal--*-120-*-*-P-*-ISO8859-1B-ADOBE-Helvetica-Medium-R-Normal--*-120-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-R-Normal--*-100-*-*-P-*-ISO8859-1B-ADOBE-Helvetica-Medium-R-Normal--*-100-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-R-Normal--*-140-*-*-P-*-ISO8859-1@-ADOBE-Helvetica-Bold-O-Normal--*-140-*-*-P-*-ISO8859-1O-ADOBE-New Century Schoolbook-Medium-R-Normal--*-140-*-*-P-*-ISO8859-1/ -ADOBE-Symbol-*-R-*--*-140-*-*-P-*-*-*O -ADOBE-New Century Schoolbook-Medium-I-Normal--*-140-*-*-P-*-ISO8859-1O -ADOBE-New Century Schoolbook-Medium-R-Normal--*-120-*-*-P-*-ISO8859-1O -ADOBE-New Century Schoolbook-Medium-I-Normal--*-120-*-*-P-*-ISO8859-1M -ADOBE-New Century Schoolbook-Bold-R-Normal--*-120-*-*-P-*-ISO8859-1B-ADOBE-Helvetica-Medium-R-Normal--*-140-*-*-P-*-ISO8859-1@-ADOBE-Courier-Medium-R-Normal--*-120-*-*-M-*-ISO8859-1L-ADOBE-Interim DM-Medium-I-Normal--*-140-*-*-P-*-DEC-DECMATH_SYMBOL>-ADOBE-Times-Medium-R-Normal--*-140-*-*-P-*-ISO8859-1O-ADOBE-New Century Schoolbook-Medium-R-Normal--*-100-*-*-P-*-ISO8859-1@-ADOBE-Courier-Medium-R-Normal--*-140-*-*-M-*-ISO8859-1>-ADOBE-Courier-Bold-R-Normal--*-120-*-*-M-*-ISO8859-1@-ADOBE-Helvetica-Bold-O-Normal--*-180-*-*-P-*-ISO8859-1M-ADOBE-New Century Schoolbook-Bold-R-Normal--*-100-*-*-P-*-ISO8859-1M-ADOBE-New Century Schoolbook-Bold-R-Normal--*-140-*-*-P-*-ISO8859-1L-ADOBE-Interim DM-Medium-I-Normal--*-140-*-*-P-*-DEC-DECMATH_ITALICb!   frOPrefaceEOThismanual describestheMACRO-64assembly language.OMIntendedAudience bnDOAThismanualisintendedforall programmerswritingBOMACRO-64 programs.,Beforereadingthismanual,youFOshouldbefamiliarwithassemblylanguage programming,IOKtheAlphaAXP architectureand instructionset,andtheK PF1,thenpressandreleaseanotherkeyora#K pointingdevicebutton. O OTbWReturn 3T Op;KZ In examples,akeynameenclosedinaboxAK indicatesthatyoupressakeyonthe keyboard.CK (Intext,akeynameisnotenclosedinabox.)jn ...:Kn A horizontalellipsisinexamples indicates1K oneofthe followingpossibilities: \A 0A Additionaloptional argumentsina) statementhavebeenomitted. \ 2 The precedingitemoritemscanbe)[ repeatedoneormoretimes. \ 5 Additional parameters,values,orother(( informationcanbeentered. & . t .  .9K Averticalellipsis indicatestheomission8K& ofitemsfromacodeexampleorcommand?Kt format;theitemsareomittedbecausetheyare;K not importanttothetopicbeing discussed.O; ():K; Informat descriptions, parenthesesindicate?K that,ifyouchoosemorethanoneoption,you7K mustenclosethechoicesin parentheses.OP []7KP Informat descriptions,bracketsindicate5K optional elements.(Youcanchooseone,@K none,oralloftheoptions.# (Bracketsarenot@K8 optional,however,inthesyntaxofa directory=K nameinaVMSfilespecification,orinthe9K syntaxofa substring specificationinan!K! assignment statement.)O {}8K Informat descriptions,bracessurrounda;K requiredchoiceofoptions;youmustchoose(K6 oneoftheoptionslisted.O boldfacetext>K Boldfacetext representsthe introductionofa9K newtermorthenameofan argument,an$KJ attribute,orareason.?K Boldfacetextisalsousedtoshowuserinput0K inonlineversionsofthemanual.O italictext5K Italictext emphasizes importantinfor-8K mation, indicates variables,and indicatesK indicatestherightmousebutton.!(Thebuttons-K_ canbe redefinedbytheuser.)RO PB1,PB2,PB3,PB4PB1,PB2,PB3,andPB4indicatebuttonsonK& thepuck.O SB,SB:K SBandSBindicatebuttonsonthestylus.O VMS,OpenVMS,Og OpenVMSAXP2K ThetermsVMS,OpenVMS,andOpenVMS7Kg AXPrefertothesame operatingsystem.O MACRO-643K MACRO-64referstoMACRO-64 Assembler%K. forOpenVMSAXPSystems.   !O1.1BLanguageFeaturesJOUMACRO-64sourceprogramsconsistofasequenceofsourceGO statements.-Thesesource statementsmaybeanyoftheO following: ` /AlphaAXP native-mode instructions `O (ODirect assignment statements `  Assembler directives7O1.1.1BAlphaAXPNativeMode InstructionsIO4 Instructions manipulatedata.(Theyperformsuch functionsGOas addition, data conversion, andtransfer ofcontrol.JO Instructionsareusuallyfollowedinthesource statementNO=by operands,whichcanbeanykindofdataneededfortheOO operationofthe instruction.,Forabrief descriptionofthe'OAlpha instructionset,seeAppendixA. ForamoredetailedKOG descriptionoftheAlphanativemode instructionset,see Othe0 Alpha Architecture ReferenceManualCorthe9 Alpha O ArchitectureHandbook ~.*O/O1.1.2BDirect Assignment StatementsFO4Direct assignment statementsequatesymbolstovalues.JOFormore informationondirect assignment statements,seeOSection2.11.*O?&O1.1.3B Assembler DirectivesMO4 DirectivesguidetheassemblyprocessandprovidetoolsforJOusingthe instructions.*Formore informationon assemblerO directives,seeMChapter5.*MlOGOTherearetwoclassesof assembler directives:/general8O assembler directivesandmacro directives.1O1.1.3.1CGeneral Assembler DirectivesIO)General assembler directivescanbeusedtoperformthe O following operations:! n ` >Storedataorreservememoryfordatastorage `O JOControlthe alignmentofpartsoftheprograminmemory ` ISpecifythemethodsof accessingthesectionsofmemory3'inwhichtheprogramwillbestored ` 1Specifya procedureintheprogram `& E&Specifythewayinwhichsymbolswillbe referenced ` OSpecifythatapartoftheprogramistobe assembledonly$undercertain conditions `} ;}Display informationaland diagnosticmessages ` JControlthe assembleroptionsthatareusedto interpretUthesourceprogram! $O1.1.3.2CMacro DirectivesPO)Macro directivesareusedtodefinemacrosandrepeatblocks.MOTheyallowyoutorepeat identicalorsimilar sequencesofHOsource statements throughoutaprogramwithout rewritingHO3those sequences..UseofmacrosandrepeatblockshelpsCOminimize programmererrorsandspeedsthe debuggingOprocess.+6 ! a7O1.2BInvokingMACRO-64onOpenVMSSystemsDOUToinvoke MACRO-64,usethe followingMACROcommand:Owiththe /ALPHA_AXPcommandline qualifier:&OHMACRO/ALPHA_AXPN file-spec[,H... H]NBONotethatyoumustspecifythe /ALPHA_AXPcommandIOline qualifierbeforeanyothercommandline parameters,0O5 qualifiers,orfilespecifications.K !!O file-spec[,...]!! YOIfyoudonotspecifyafiletypeforaninputfile,the assembler3Ousesthedefaultfiletypeof.M64.r"! HQOYoucanspecifyoneormoresourcefilestobe assembled.(ToSOassemblefiles individually,separatethefilespecificationswithLO5commas.*To concatenateandassemblethefilesasasingleXOinputfile,separatethefilespecificationswithplussigns( + ).#@OCommand line qualifiers control special assemblerCOoptions.4 Assembler options!can apply to!the entireBO5MACRO/ALPHA_AXPcommandline,ortothe individualEOfilebeing assembled.2Whenthe qualifierfollowsthe@OMACRO/ALPHA_AXPcommand,itappliestoallfilesIO>listed.,Formore informationoncommandline qualifiers, OseeSection1.2.1.*#Z?$$*O1.2.1BCommandLine QualifiersMO4Thissection describesthecommand qualifiersusedwiththe#OMACRO/ALPHA_AXPcommand.I%O/[NO]ALIGNMENT=optionx&NNOControlsthe alignmentofcodeanddata.'Validoptionsare:' OOOptionFunction OOA code9A Alignmentofcertainbranchtargetlabels.O data. Natural alignmentofdataitems. O:(! POIfyouomitthe qualifierfromthecommandline,thedefaultFOoptionis/NOALIGNMENT=(code,data).)IfmorethanoneSO5optionis specified,theoptionsmustbeenclosedin parentheses'Oand separatedbyacomma.J)  O/[NO]DEBUG[=(options)]d*::O SpecifiesDEBUGsupport.'Validoptionsare:L+" OOOptionFunction O8OA symbol Generatesdebugsymbol information.7O traceback Generates traceback information. O4 all44 Generatesallabovedebug information.O none, Generatesnodebug information. O,DOThedefault qualifieris /NODEBUG.ThedefaultwhenDO/DEBUGis specifiedwithnokeywordsis /DEBUG=all.O-%%O/[NO]DIAGNOSTIC[=file-spec]w. MLOControlswhether diagnosticsarecreatedandstoredintheYO specifiedoptionalfile.'Ifafile specificationisnot supplied,theMO5 assemblercreatesa diagnosticfileusingthesamenameasQOthesourcefile.)Forexample,ifyouuseasourcefilenamedGOXXX.M64,the assemblercreatesa diagnosticfilenamedJO>XXX.DIA.Youcanusethethe diagnosticfilewithotherMODigitallayeredproducts including,butnotlimitedto,the,OLanguage-SensitiveEditor(LSE)._/55OThedefault qualifieris/NODIAGNOSTIC.J0  O/ENVIRONMENT=[NO]FLOAT1 NFOControlswhetherthe assembler generatesfloating-pointKO instructionswhen optimizingcodeand performing code-labelO5 alignment.42 KO Currently,theonlyfloating-point instruction generatedbyJOthe assemblerduring optimizationand alignment processingHO5isFNOP,thefloating-point no-operation instruction.-If=Oyouspecify/ENVIRONMENT=NOFLOAT,the assemblerJOdoesnotgenerateanyfloating-point instructionsaspartGO>of optimizationand alignment processing.,Floating-pointJO instructionsthatyouspecifyinyoursourceprogramareO unaffected.<3O/LIBRARYj4@@OSearchesmacro librariesinthe followingorder:Z5 z0E`1.:Thelibrary designatedbythe/LIBRARY qualifier.(`O2.:The.LIBRARY directives.B`3.:The MACRO64.MLBlibrary.+The assemblersearchesC'forthe MACRO64.MLBmacrolibraryinthe following; locations:'MACRO64$LIBRARY,ALPHA$LIBRARY,andfinally SYS$LIBRARY.G`W4.:The STARLET.MLBlibrary.(The assemblersearchesforCthethe STARLET.MLBmacrolibraryinthe following;  locations:'MACRO64$LIBRARY,ALPHA$LIBRARY,andafinally SYS$LIBRARY.6NJOIn addition,youcanplacethemacrolibrary definitionsJOinthelistingfilebyusingthecommandline qualifierO5/SHOW=LIBRARY.I7O/[NO]LIST[=file-spec]8NOOControlswhetheralistingiscreatedand optionallyprovidesQOanoutputfile specificationforthelistingfile.,Donotuse>O5wildcard charactersinthisfilespecification.r9H7OIf you issue the MACRO/ALPHA_AXP commandKOinteractively,/NOLISTisthedefault.*The assemblersendsPO5outputtothecurrentoutputdeviceratherthantoalistingDOfile.(IfyouexecutetheMACRO/ALPHA_AXPcommandin2Oabatchjob,/LISTisthedefault.T: *UOIfyoudonotspecifyafilespecification,the assemblercreatesOOalistingfileusingthesamenameasthesourcefile.,ForGO5example,ifyouuseasourcefilenamedXXX.M64,the?O assemblercreatesalistingfilenamedXXX.LIS.E;O/[NO]MACHINE_CODE<NOOProducesabinarymachinecodelistingafterthesourcetextMOifalistingfileis requested.*Thedefaultis /NOMACHINE_O5CODE.F=O/NAMES=case_option>zOO Specifiesthe alphabeticcasingof identifiersinsourcecode+O statements.'Validoptionsare:q?G OOOptionFunction ONOA upper_caseQConvertsall identifierstoupper alphabeticcase.NO lower_case[Convertsall identifierstolower alphabeticcase.O4 as_isG4 Causesall identifierstoremaininthecaseusedin source statements. O@NMOIfyouusethe/NAMESoptioninacommandline,youmustKOsupplya case_option.-Ifyouomitthe qualifierfromtheFO5commandline,thedefaultoptionis/NAMES=upper_case.KA!!O/[NO]OBJECT[=file-spec]BNKOControlswhetheranobjectfileiscreatedand optionallyOOprovidesafilespecification.)Donotusewildcard characters(O5inthisfilespecification.TC *UOIfyoudonotspecifyafilespecification,the assemblercreatesOOanobjectfileusingthesamenameasthesourcefile.+ForGO5example,ifyouuseasourcefilenamedXXX.M64,the?O assemblercreatesanobjectfilenamedXXX.OBJ.YD//OThedefault qualifieris/OBJECT.QE''O/[NO]OPTIMIZE[=(option-list)]FjOO Specifiesoptional assembleroptimizations.(ValiditemsintheO option-listare:G OOOptionFunction O7OA schedule Specifies instruction scheduling.*O peephole Specifies peepholing. OHyEO Specifying /OPTIMIZEwithnooptionsisthesameas4O specifying/OPTIMIZE=(peephole,schedule).I8OThedefault qualifieris /NOOPTIMIZE.SeeSectionB.7 *for)O informationonoptimizations.*IF?HJO/[NO]SHOW=(item,...)KPOModifiestheoutputlistingfile.*This qualifieris meaningful?Oonlywhen/LISTis specified.&Validitemsare:dL: OOOptionKFunction OOA expansions#KA Showsmacro expansions.O conditionalsmacro.*mOw VM,O2.5.3B DeterminingSymbolValuesMO4Thevalueofasymboldependsonitsuseintheprogram.JOMACRO-64usesa differentmethodto determinethevaluesSOofsymbolsintheoperatorfieldthanitusesto determinethe7O=valuesofsymbolsintheoperandfield.* ;O2.5.3.1CUsingSymbolsintheOperatorFieldLO)Asymbolintheoperatorfieldcanbeeithera permanentIOsymboloramacroname.'MACRO-64searchesforasymbol0O definitioninthe followingorder:H`1.:Registernames:rjYR0-R31 Y(FP YSPYF0-F312`Y2.:Macroand conditional directives:( .ELSE .ENDC .ENDM] .ENDR ] .IF] .IF_FALSE(.IFF) .IF_TRUE$ (.IFT) .IF_TRUE_FALSE$ (.IFTF) .IIF .INCLUDE.IRP .IRPC .LIBRARY.MACRO .MCALL .MDELETE.MEXIT .NARG  .NCHAR.REPEAT/`3.: PreviouslydefinedmacronamesH`4.: Permanentsymbols (instructionsandother directives)! _HOThissearchorderallowsmost permanentsymbols,exceptNO registers, conditional directivesandmacro directives,tobeSO5 redefinedasmacronames.'IfasymbolintheoperatorfieldisOOnotdefinedasamacroora permanentsymbol,the assembler'Odisplaysanerrormessage.:O2.5.3.2CUsingSymbolsintheOperandFieldOO)Asymbolintheoperandfieldmustbeeithera user-defined=Onumericsymbol,alabel,oraregistername.= MO User-definednumericsymbolsandlabelscanbeeitherlocalMO (internal)symbolsorglobal (external)symbols.'Whethernu-QO5mericsymbolsandlabelsarelocalorglobaldependsontheir(Ouseinthesourceprogram. WROAlocalnumericsymbolorlabelcanbe referencedonlyintheSOmoduleinwhichitisdefined.'Iflocalnumericsymbolsorla-MO5belswiththesamenamesaredefinedin differentmodules,MOthesymbolsandlabelsare completely independent.(Thedef-POinitionofaglobalnumericsymbolorlabel,however,canbe:O> referencedfromanymoduleintheprogram. NIOMACRO-64treatsall user-definednumericsymbolsandla-UObelsaslocalunlessyou explicitlydeclarethemtobeglobalby)O5doingoneofthe following:J ` OUsethedoublecolon( :: )indefiningalabel.+Formore'( informationonlabels,seeq(Section2.1.1. ` JUsethedoubleequalsign(= =)inadirect assignmentD statement.*Formore informationondirect assignmentY statements,seeYSection2.11. ` FUsethe.WEAK directive.*Formore informationonthe 1.WEAK directive,see1.WEAK.*q?]*?* ?6 KO User-definedlexicalstringsymbolscanonlybeusedwithMOthelexicalstring operators.*Formore informationonlexi-&O5calstring operators,see5Chapter3.$Z5YoucandefineamacroLOusingthesamenameasa previouslydefinedlocalnumericLOsymbol,globalnumericsymbol,oralexicalstringsymbol.KO>However,youcannotdefinealexicalstringsymbolanda2Onumericsymbolusingthesamename.*mO9 OOIn addition,youcannotusethesamenameforbothalocalLOandglobalnumericsymbol.'Norcanyouusethesamesym-OO5bolnameforbothanumericsymbol(localorglobal)anda%Olabel(localorglobal).66O2.6B TemporaryLabelsWithinSourceCodeOOUUse temporarylabelstoidentify addresseswithinablockofOsourcecode.KB!OFormatO)nnnnn$:0 ~Onnnnn@OAdecimalintegerintherangeof1to65535.POInmostcases,youcanuse temporarylabelsinthesamewayQO youuseotherlabelsthatyoudefine;however,therearesomeOe differences:&!  ` H Temporarylabelscannotbe referencedoutsidetheblock;(ofsourcecodeinwhichtheyare declared. ` H Temporarylabelscanbe redeclaredinanotherblockofsourcecode. ` J TemporarylabelsthatoccurwithinapsectwiththeMIXIorNOMIX attribute,donotappearinthedebuggersym-H1boltableandthuscannotbeaccessedbythesymbolic= debugger.'Formore informationonpsects,seekChapter5. `  @  Temporary labelscannot beused in the .ENDor7a.PROCEDURE_DESCRIPTOR directives..Formore5 informationonthe.END directive,seeJChapter5.*kLlO*J}kO! dNOBy convention, temporarylabelsare positionedlike statementNOlabels:*left-justifiedinthesourcetext.)Although temporaryQO5labelscanappearintheprograminanyorder,by convention,ROthe temporarylabelsinanyblockofsourcecodeshouldbein%O increasingnumericorder.! JO Temporarylabelsareusefulasbranch addresseswhenyouPOusetheaddressonlywithintheblock.&Youcanuse temporaryLO5labelsto distinguishbetween addressesthatare referencedPOonlyinasmallblockofcodeand addressesthatarerefer-LOenced elsewhereinthemodule.'A disadvantageof temporaryMO>labelsisthattheirnumericnamesdonotprovideanyin-MOdicationoftheirpurpose.* Consequently,youshouldnotuseLO temporarylabelstolabel sequencesof statementsthatareHOH logically unrelated; user-definedsymbolsshouldbeusedOinstead.dKODigital recommendsthatuserscreate temporarylabelsonlyLOintherangeof0$to29999$becausethe assemblerauto-OO5 maticallycreates temporarylabelsintherangeof30000$toKO65535$foruseinmacros.)Formore informationontempo-Orarylabels,seewSection4.7.*w|?! QOThe temporarylabelblockinwhicha temporarylabelisvalid8Ois delimitedbythe following statements:!  ` 5A user-definedlabel:&globalorlocal. `O HOA.PSECT directive.&Formore informationonthe.PSECT directive,seeChapter5.*klO1 iEWAnexampleshowingthecorrectand incorrectuseof% temporarylabelsfollows: 5A:ADDQ&R1,%R2,%R3}BEQ%R3,&2$y};%correct&useMULQ&R2,%R3,%R4F 2$:pADDQ&R1,%R4,%R5;% definition&of& temporary%labelTB:BNE%R5,&2$yT;%illegal C:SUBQ&R2,%R4,%R6& LWInthisexample,2$isa temporarylabel,definedintheHblockbetweenA:andB:.+Theforward referenceintheNsecond instructionisproperly resolved.'ThelinelabeledB:Naalso references2$,butthelabelBhasalreadyclosedtheJrange.*The temporarylabel2$canbeusedlaterintheIprogram,butits definitionmustappearwithinthesame kblockasthelabel. ` >The.ENABLEand.DISABLE directives,whichcanFBextendalocallabelblockbeyond user-definedlabelsCand.PSECT directives.-Formore informationonthe2.ENABLEand.DISABLE directives,seepChapter5.*plOLOA temporarylabelblockisusually delimitedbytwouser-?Odefinedlabels..However,the.ENABLE LOCAL_BLOCKTO5 directivestartsalocalblockthatis terminatedbyoneoftheO following: ` 4Asecond.ENABLE LOCAL_BLOCK directive `O >OA.DISABLE LOCAL_BLOCK directivefollowedbya7 user-definedlabelora.PSECT directiveT' *LO Temporarylabelscanbe preservedwiththecontextoftheNOprogramsectioninwhichtheyaredefinedforfuturerefer-LO5ence.'Formore informationonthe .SAVE_PSECT [LOCAL_BLOCK]/Oand.RESTORE_PSECT directives,seeChapter5.*PlO'j! @O2.7BLabel AddressesNOUIntheabsenceof optimizationand automaticdata alignment,ROlabel addressesaredefinedtobethepsectandoffsetofthe*Ocurrentlocationcounter(seemSection2.11)LatthepointwhereMO^thelabelisdefined.*Wheneither optimizationor automaticOOdata alignmentareenabled,the following additional consider-Oationsapply.'SeeSectionB.7-_for informationon optimizations$Ohand automatic alignment.*m?*?{ QGO2.7.1BLabel Addresses, Optimization,andCode AlignmentIO4 Optimizationandcode alignmentcanaffectthe addressesIOassignedtolabelsdefinedinpsectsthathavetheEXEBOandNOMIX attributes./ Optimizationandcodealign-MO=mentaredisabledbydefault,andcanbeenabledwiththe:O /OPTIMIZEand /ALIGNMENT command-linequali-Ofiers(seeSection1.2.1),andthe.ENABLE directive(seeOGSection5.1)CG.(Ingeneral,the assemblerassignsthepsectandROoffsetofthecurrentlocationcounterpriorto optimizationorOO alignmentofcodelabels.'However,the assembleradjustsref-ROQerencestolabelsinbranch instructionstotheaddressoftheLOlabelafter optimizationandcode alignment processing.)TheQO assemblerdoesnotadjust referencestolabelswherethelabelMOZ referenceoccursinan expressionwithmorethanoneterm.5OThe followingexample illustratesthis.$z8.psect%CODE,%exe,&nomixzBSRR0,&10$-$;%R0%->%10$%(post-optimization)%O10$:LDAR1,& 20$-10$(R0),$;%R1%->%20$%(pre-optimization)zJMP(R1)zW[...]O20$:*?$*O |?! MOIntheexampleabove,the assembleradjuststhetargetad-QOdressoftheBSR instructiontobethelocationof10$afterMO5 optimizationandcode alignmenthavetakenplace.'Thus,theIObranchto10$ functionsas expected.+However,whenpro-HOcessingtheLDA instruction,the assemblercomputestheLO>offsetbetween20$and10$priorto optimizationandcodeUO alignment.'Thus,theaddressof20$thatisstoredinR1istheLOaddresspriorto optimizationandcode alignment.' DependingPOHonthesequenceof instructionsbetween10$and20$,thead-NOdressbefore optimizationandcode alignmentmaydifferfromKOtheaddressafter optimizationandcode alignmentandtheJORJMP instructionmaynottransfercontroltotheexpectedOaddress. $MONotealsothatthe assembleronlyperformspost-optimizationQO adjustmentoflabel addresseswhenthelabelistheonlyterm-O5inthe expression.'Forexample:$z.psect%CODE,%exe,&nomixz.base& R27,LINKAGE"zILDQR26,% ROUTINE1_ADDRzJSRR26,%(R26)"zLDQR26,% ROUTINE2_ADDRz!JSRR26,%(R26)ziRETR28 zNOP zNOPOb ROUTINE1:zRET(R26)O ROUTINE2:z:RET(R26)!z.psect%LINKAGE,%noexeOLINKAGE:O3ROUTINE1_ADDR:z{.address&ROUTINE1OROUTINE2_ADDR:z .address& ROUTINE2+0IOIntheexampleabove,the assembleradjuststheaddressCOstoredwiththe.ADDRESSROUTINE1 directivetotheFO5addressoflabelROUTINE1after optimizationandcodeIO alignment.)However,sincethe expressioninthe.ADDRESSJO ROUTINE2+0 directiveisnotasingleterm,the assemblerOO>addstheoffset0andtheaddressofROUTINE2priortoop-LO timizationandcode alignmentandstorestheresult.+SinceNOtheaddressstoredistheaddresspriorto optimizationandMOHcode alignment,thesecondJSR instructionmaynottransfer8Ocontroltotheaddressthatis expected.b `8BO2.7.2BLabel Addressesand AutomaticData AlignmentFO4 Automaticdata alignmentcanaffectthe addressesas-DOsigned to labels in psects thathave the NOEXEorCOMIX attributes.0 Automaticdata alignmentisenabledrective,thelabelisassignedthepsectandoffsetofthecurrentBOlocationcounterpriortoany automatic alignment.e ;OONotethatthe assembleronlyassigns addressestolabelsaf-GOter alignmentunderthe conditions describedaboveandPO5onlywith automatic alignment.(IfyouplacealabelbeforeaKO.ALIGN directivethatmanuallyalignsthecurrentlocationPOcounter,the assemblerassignstheaddressofthelabelpriorHO>to performingthemanual alignment.)The followingexam-QOple illustratesthe interactionoflabeladdress assignmentand%O automaticdata alignment:/t.enable& align_data/.psect% data,noexe/.bytep1Bd;%The%byte%is%stored%in%psect%data%at%offset%0UOLA:.print%"Not%aligned"J;%Any% non-macro,%non-conditional% statement,9d;% including%this%.PRINT% directive&prevents>T;%A&from%being% automatically%aligned&--&A%is d$;%assigned%offset%1 OlB:9dl;%B&is& automatically%aligned%to%offset%4OC:.longp29d;%C&is& automatically%aligned%to%offset%4OD:.align%0Ed;%The%.ALIGN&global% directive%prevents%D%from&beingCdD;J automatically%aligned&--&D%is%assigned%offset&8OE:.octa%3:d;%E&is& automatically%aligned%to%offset%16 DO Automaticdata alignmentand label-address assignmentGOcanbean important considerationwhen calculatingtheOO5 differencebetweentwolabels.(Forexample,considerthefol-OOlowingmacro,whichstoresastringprecededbyawordthat*Ocontainsthestring'slength:3zk.macro%VARYING_STRING%STRING%?L1,%?L2.word%L2-L1L1:%.ASCII&"STRING" BL2:z.ENDM&VARYING_STRINGf JOIfan invocationoftheVARYING_STRINGmacroisfollowedPObyadatastorage directivethatrequires automatic alignment,DO5theVARYING_STRINGmacrowillnotstorethecorrect(Ostringlength.'Forexample:%z.psect%DATA,%noexe,%octazZ.enable% align_dataFzVARYING_STRING&%;&25&bytesOF:.octa&4C ROInthisexample,the intentionistomaketheL2labelgener-IOatedbytheVARYING_STRINGmacrobeassignedtheoffsetQO527,2forthe.WORD directive,plus25forthe.ASCIIdirec-XOtive.'Instead,itisassignedtheoffset32alongwiththelabelFLObecausethe.OCTA directiverequires automatic alignmenttoSO>offset32.( Therefore,thestringlengthis incorrectlystoredasOO30rather25.'Tomakethismacroworkasdesired,youmustSOinclude,inthemacro definition,amacro directivethatisnotQOHadatastorage,macro,or conditional directiveafterthegen-OOeratedlabelL2.)Asshownbelow,.ALIGN0isagoodchoiceUOasitreflectstheideathatthe precedinglabelisnotaligned.3t~.macro&VARYING_STRING&STRING%?L1,&?L2/.word%L2-L1 L1:%.ASCII%"STRING" VL2:%.align%0t.ENDM%VARYING_STRINGp! FSOWiththischange,the generatedlabelL2isassignedtheoffsetJO27beforethe assemblerperforms automaticdata alignmentJO5forthe.OCTA directive.'Asaresult,theVARYING_STRINGNOmacroworksasdesiredandstoresthecorrectstringlengthOof25.'$nZ&O2.8BTermsand Expressions4OUAtermcanbeanyofthe following:c ` Anumber. `O OAnumericsymbol. ` Alabel. `N FNThecurrentlocationcounter.)Formore informationon/thecurrentlocationcounter,seepSection2.12. `& H&Anyofthe previouslynoteditemsprecededbyaunary~ operator.*pi?}S )canbeusedPO>tochangetheorderof evaluation.(Anypartofan expressionVOthatisenclosedinanglebracketsisfirst evaluatedtoasingleOOvalue,whichisthenusedin evaluatingthecompleteexpres-3OHsion.'Forexample,the expressionsA jT*HB+CandA T*CHareUO different.'Inthefirstcase,AandBare multipliedandthenCQOaddedtotheproduct.(Inthesecondcase,BandCareaddedOORandthesumis multipliedbyA.AnglebracketscanalsobePOusedtoapplyaunaryoperatortoanentire expression,suchOas-.*z? NRO Expressionsfallintofour categories:' relocatable, absolute,ex-NOternal (global),andcomplex.)Youcan determinethetypeof0O5 expressionbythe followingrules:2!  ` NAn expressionis relocatableifitsvalueisfixedrelativeL(tothestartoftheprogramsectioninwhichitappears.NThecurrentlocationcounteris relocatableina relocatableprogramsection. `Y MYAn expressionisabsoluteifitsvalueisan assembly-timeH constant.)An expressionwhosetermsareallnumbersisM  absolute.'An expressionthatconsistsofa relocatabletermEcminusanother relocatabletermfromthesameprogramLsectionis absolute,becausesuchan expressionreducesto&an assembly-time constant. ` PAn expressionisexternalifitisnotcomplex,anditcon-ItainsoneormoresymbolsthatarenotdefinedintheDcurrentmodule. ` PAn expressioniscomplexifitcontainsa relocatableorex-Lternaltermorsub-expressionthatisoperateduponbyanOuoperatorotherthantheplussign( + )ortheminussignM( - ).,An expressionisalsocomplexifitcontainsmoreM&thanonetermorsub-expressionthatis relocatableorex-N~ternal.(An exceptiontothisruleisthe differencebetweenHtwo relocatablesub-expressionsortermswherebothre-O/ locatablevaluesoccurinthesamepsect.(Inthiscase,the# expressionis absolute.XIOComplex expressionsare constrainedtousethe followingOform:XB.OFORMATO)termoperatortermy<OOtermAO#Termisa relocatableorexternalsub-expression. OoperatorHO#OperatorisanyoftheMACRO-64 operators describedinO|Section2.10.MONeithertermcanitselfbeacomplexsubexpression.+IfyouOOospecifyacomplex expressionthatdoesnotmatchthecorrectMOform,the assemblerissuesa diagnosticerrormessageindi-QO catingthatthe expressionistoocomplex.)NotealsothattheKOy assemblerdoesnotattempttoreorder expressionstomakeKOyour expressionsmatchthecorrectform.)Forexample,the2O* following expressionistoocomplex:t .external&E1,%E2+t.quad% E1+5+E2+6K;&too%complex*O??- $POBecausethe assemblerhasno precedencerules,itattemptstoGOevaluatetheabove expressionas<<+E2>+6>.(SinceEO5 <+E2>isitselfacomplexterm,<<+E2>+6>NOdoesnotmatchtheaboveformandistoocomplex.(However,NOyoucanregroupthe expressionusinganglebrackets(<>)to2O>matchtherequiredformasfollows:t .external&E1,%E2=t .quad% +J;%legal%complex& expression, LOInthiscase,bothandaresimple,externalJOterms.-Sincenoneofthetermsarecomplex,theexpres-NO5sionmatchesthecorrectformandthe assembleracceptstheOcomplex expression. NFOAnytypeof expressioncanbeusedinmostMACRO-64PO statements,but restrictionsareplacedon expressionsusedin#O5the following contexts:  ` .BASE directive. `O O.BLK O x*Ostorage allocation directives. ` 8.IF conditionalassemblyblock directives. `N -N.REPEATrepeatblock directives. ` )Direct assignment statements. `L GLLexicalstringoperator arguments.&Formore information2ondirect assignment statements,seeSection2.11.*h?| OSeeChapter5Agfor descriptionsofthe directiveslistedintheO precedinglist.*FnO NJO Expressionsusedinthesecontextscancontainonlysym-SObolsorlabelsthathavebeen previouslydefinedinthecurrentO5module. WNOThe.BASE directiveaccepts expressionsthatcontainexternalEOsymbols previouslydeclaredwiththe .EXTERNALdirec-LO5tive.*Theothercontexts previously describedcannotacceptJO expressionsthatcontainexternalsymbols.*SymbolsdefinedOOlaterinthecurrentmodulecannotbeusedinanyoftheseO> contexts.+LO Expressionsinthe.IF conditional directives,.REPEATcon-OOditional directives,andlexicalstringoperator argumentsareIO5 relocatable.,However, expressionsinthe.BLKx directivesOmustbe absolute. VLONotethat expressionscannotcontainfloating-pointnumbers.JOThefloating-pointdatastorage directivesacceptconstantKO5values.+Theydonotacceptfloating-point expressions.+ForKOmore informationonthefloating-pointdatastoragedirec-Otives,seeChapter5.*lOf a<DOThe followingexampleshowstheuseof expressions:OA&=%2*1000;%2*100%is%an%absolute% expressionAzP.BLKBpA+50;%A+50%is%an%absolute% expression&and-;pcontains%no% undefined%symbolsOLAB:.BLKWpA!;%LAB&is& relocatableO(HALF&=% LAB+*(;% LAB+&is&a% relocatable*p;p expression&and%contains%no;p undefined%symbolsKOLAB2:p.BLKBpLAB2-LABK;%LAB2-LAB%is%an%absolute% expression2H;pand%contains%no% undefined&symbols  m wC.O2.11CDirect Assignment StatementsOOUAdirect assignment statementequatesasymboltoaspecificSOvalue.'Unlikeasymbolthatyouuseasalabel,youcanrede-NOfineasymboldefinedwithadirect assignment statementas%O^manytimesasyouwant.biOFormatsO)symbol=expressionOsymbol= =expressionOIsymbol=quoted-literal\A2Osymbol"O(A user-definedsymbol.  O expressionKO(An expressionthatdoesnotcontainany undefinedsymbolsJOorforward references.)Formore informationontermsandO expressions,seeSection2.8.0@Theresultmustbeeitheranab-LO2soluteor relocatablevalue,whosevaluecanbe determinedMOatthecurrentpointinthe assembly.,ThisformdefinesaOnumericsymbol.UO~Theformatwithasingleequalsign( = )definesalocalsym-RObol,andtheformatwithadoubleequalsign(= =)definesaLO/globalsymbol.*Formore informationaboutlocalandglobalOsymbols,seeSection2.5.3.*|?*K? ePOThe followingthree syntacticrulesapplytodirect assignmentO statements:H  ` OAnequalsign( = )ordoubleequalsign(= =)mustsep-G(aratethesymbolfromthe expressionthatdefinesitsHvalue.+Spaces precedingor followingthedirectassign-Ement operatorshaveno significanceinthe resulting2value. ` MOnlyonesymbolcanbedefinedinasingledirectassign- ment statement. ` JAdirect assignment statementcanbefollowedonlybyacommentfield.B OOForbestresults,Digital recommendsyouplacethesymbolinQOadirect assignment statementinthelabelfield.'Forexample:OaA&==&1+a;&The%symbol%'A'&is&globally';pequated%to%the%value%1OB&=%A@5*;&The%symbol%'B'&is&equated!Z;pto%1@5&or&32(dec)OC&=%127*10*;&The%symbol%'C'&is&equated ;pto% 1270(dec)OtD&=% ^X100/^X10*t;&The%symbol%'D'&is&equated;pto%10(hex)Oquoted-literalNO(Aliteralwithindoublequotes.,ThisformdefinesalexicalNOstringsymbol.)Lexicalstringsymbolscanonlybeusedwith%Olexicalstring operators.[FOFormore informationon lexicalstring operators,!seeOChapter3.*OlO7   [ 1*O2.12CCurrentLocationCounterOOUThecurrentlocationcounterisacounterkeptbyanassem-NOblerto determinetheaddressassignedtoan instructionorOOconstantthatisbeing assembled.'ThesymbolforthecurrentVO^locationcounter,theperiod( . ), representstheaddressoftheIOcurrentbyte.)MACRO-64setsthecurrentlocationcounterROtozeroatthe beginningoftheassemblyandatthe beginning*Ohofeachnewprogramsection.V ,COEveryMACRO-64source statementthat allocatesmem-POoryintheobjectmodule incrementsthevalueofthecurrentOO5locationcounterbythenumberofbytes allocated.'Forexam-NOple,the directive,.LONG0, incrementsthecurrentlocationQOcounterby4.'However,withthe exceptionofthespecialformMO> describedbelow,adirect assignment statementdoesnotin-JOcreasethecurrentlocationcounterbecausenomemoryisO allocated.k! APOThecurrentlocationcountercanbe explicitlysetbyaspe-LOcialformofthedirect assignment statement.*ThelocationGO5countercanbeeither incrementedor decremented.,ThisNOmethodofsettingthelocationcounterisoftenusefulwhenQOdefiningdata structures.'Datastorageareasshouldnotbere-RO>servedby explicitlysettingthelocationcounter;usethe.BLK > xMO directives.*Formore informationonthe.BLK directive,seeOChapter5.*OlOPB&OFormatO) .=expressionV! ,O expressionKO(An expressionthatdoesnotcontainany undefinedorex-IOternalsymbols.-Formore informationon expressions,seeOSection2.8.OOuIna relocatableprogramsection,the expressionmustbere-UO locatable;thatis,the expressionmustberelativetoanaddressSO&inthecurrentprogramsection.'Italsomayberelativetothe4O~currentlocationcounter.'Forexample:O.&=%.+40.;%Moves%location%counter&forward*O|?% IOWhenaprogramsectionthatyoudefinedinthecurrentSOmoduleis continued,thecurrentlocationcounterissettotheMO5lastvalueofthecurrentlocationcounterinthatprogramOsection.tJJOInaprogramsectionwiththeEXEandNOMIX attributes:D  ` 6Thelocationcountercannotbechanged. `O LOIf optimizationisenabled,thelocationcounter representsIthelocationpriorto optimization.)Formore information on optimization,seeSection2.7.1.*?"!# (O3.2BLexicalOperatorSyntaxQOUYouinvokealexicalstringoperatorwithapercentsignfol-ROlowedbythelexicaloperatorname,aleft parentheses,alistLOof arguments separatedbycommas,andaright parentheses.OO^The followingexample illustratesthelexicaloperatorsyntax:*O.print"%EDIT(,)"KOSpacesareallowedbetweensyntaxelementsinthegeneralLOlexicaloperatorsyntax.+Forexample,the followingsyntax,*O5 includingspaces,isallowed.4O.print"%EDIT(,)"@ OOSpacesarealsoallowedbetweentheopeningandclosingper-COcentsignsinalexical substitution operator.*SeeSection3.4AO5for informationonlexical substitution operators.-O.print"%lexical_symbol_name%"*}?NKOSpacesarenotallowedbetweenthepairofpercentsigns8O indicatingalexicalescape operator..SeeSection3.5 for6O5 informationonlexicalescape operators.*? mNOLexicaloperator argumentscanbe specifiedinthesamewayOasmacro arguments:!  ` DAnumericsymbolnameprecededbya backslash(\).M(This constructresultsinthedecimalvalueofthenumeric:symbol,asshowninthe followingexample: \N ` GAnystringof characters surroundedbyleftandrightCangle brackets,asshowninthe followingexample:a7IWYoucannestanglebrackets( <> ).,Seethe followingexample:5 <*17> ` CAnystringof characters surroundedbya delimiterH  specifiedafteracaret character(^).,Youcannotnest4e delimiters.'Seethe followingexample:^%Foobarthud% ` IAny undelimitedstringof charactersnot separatedbyaIspace,tab,formfeed,comma,equalsign, semicolon,or76endofline.&Seethe followingexample:A+B+CKOInadditiontotheformatsallowedforamacro argument,NOlexicaloperator argumentsmayalsobe specifiedasfollows:l SB ` EAn undelimitedstringof charactersmayalsocontainG(astringof charactersenclosedwithinleftandrightG parenthesis.+The charactersbetweentheleftandrightI parenthesismaycontainspace,tab,orcomma delimiters.'2Seethe followingexample:16(R27) `R LRYoucanusealexicaloperatorasanargumenttoanotherDlexicaloperatorasshowninthe followingexample:D: %EXTRACT( %LOCATE($,X), %LENGTH(X)- %LOCATE($,X),X) NNOExceptforthe%TYPElexical operator,astringsymbolnameOOsuppliedasalexicaloperatorargumentisreplacedwiththe)O5valueofthestringsymbol.NKOEachlexicaloperatoracceptsagivennumberof argumentsIOandeachargumenthasaspecifictype.-TherearethreeIO5 differenttypesof arguments:'string,integer,andname.!  ` DAstringargumentcanbeany arbitrarysequenceof( characters. ` HAnintegerargumentmustbeanabsoluteor relocatableL expressionthatcanberesolvedatthatpointintheas-HYsembly.*A relocatable expression representsapsectandQanoffsetwithinthatpsect.&Ifyouspecifya relocatableex-K pressionforaninteger argument,the assemblerusesonlyNcthevalueoftheoffsetwithinthepsect.*TheoffsetvalueJis determinedbefore optimizationandcode alignment,but!afterdata alignment. ` CThenameargumenttypeisusedonlybythe%TYPEIlexical operator.(The%TYPElexicaloperatoracceptstheLDnameofanumericsymbol,stringsymbol,label,psect,orFa permanentsymbolasits argument.*UnliketheotherMlexical operators,ifastringsymbolnameis specifiedasKNanargumentto%TYPE,thevalueofthestringsymbolisInot substitutedforitsname.)Instead, informationabout"thenameis returned.k ! ATOIfyouomitastring argument,thedefaultistheemptystring.POAnemptystringisastringwithno characters.)IfyouomitPO5anintegerargumentorspecifyanillegal expression,thede-OOfaultvalueiszero.*The assemblerdoesnotissue diagnosticNOmessagesforillegal expressionsusedasagumentstolexicalPO> operators.'Ifyouomitthenameargumentorspecifyanille-JOgalnametothe%TYPElexical operator,%TYPEreturnsaOzerovalue.` 869xO 4.2Macro! ArgumentsMOByusingmacros,youcanuseasinglesource statementtoHOinsertasequenceofsource statementsintoaprogram.yJOAmacro definitioncontainsthesource statementsoftheGOmacro.*Themacro definitionmayhaveformal arguments.GOiTheseformal argumentscanbeused throughoutthese-MOquenceofsource statementswithinthe definition.(WhentheLOmacroiscalled,theformal argumentsarereplacedbythe6Oractual argumentswithinthemacrocall.Zz! 0QOThemacrocallisasinglesource statement consistingoftheGOmacroname, optionallyfollowedby arguments.+WhentheMO5macroiscalled,the assemblerreplacestheline containingOOthemacrocallwiththesource statementsinthemacrodef-JOinition.+The assemblerreplacesany occurrencesofformalMO> argumentsinthemacro definitionwiththeactual argumentsQO specifiedinthemacrocall.)ThisprocessiscalledthemacroO expansion.{ WMOBydefault,macro expansionsarenotprintedintheassem-OOblylisting.)Toprintthemacro expansions,youmustspecifyHO5the/SHOW=expansions qualifierandargumentinthecom-MOmandline.'Notethattheexamplesofmacro expansionsusedMOinthischapterarelistedastheywouldappearusingthe5O>/SHOW=expansionsargumentand qualifier.|NAOUse.SHOWwithasymbolicargumentof EXPANSIONSNOinthesourcetextofaprogramtospecifythelistingofO5 expansions.} KOMACRO-64providesspecific directivesfor controllingmacroCO execution.'For informationonthese directives,seekTable5-2.*}kb?~rHOThe remainderofthischapter describesmacro arguments*Oandcreated temporarylabels. 98:I &O4.1BUsingMacro ArgumentsHOUMacroshavetwotypesof arguments:+actualandformal.OOActual argumentsarethetextgiveninthemacrocallafterKOthenameofthemacro.)Formal argumentsare specifiedbyOO^nameinthemacro definition;thatis,afterthemacronameJOinthe.MACRO directive.)Actual argumentsinmacrocallsLOandformal argumentsinmacro definitionscanbe separated2Ohbycommas( , ),tabs,orspaces. VKOThenumberofactual argumentsinthemacrocallcanbeKOlessthanorequaltothenumberofformal argumentsinMO5themacro definition.)Ifthenumberofactual argumentsisLOgreaterthanthenumberofformal arguments,the assembler'Odisplaysanerrormessage. GOFormalandactual argumentsnormallymaintainastrictLO positional relationship.,Thatis,thefirstactualargumentPO5inamacrocallreplacesall occurrencesofthefirstformalPOargumentinthemacro definition.(Thisstrict positionalrela-NOtionshipcanbe overriddenbytheuseofkeyword arguments.EO>Formore informationonusingkeyword arguments,seeOSection4.3.*OZ|?tJIOAnexampleofamacro definitionusingformal argumentsOfollows:'Oa.MACROKSTOREKARG1,ARG2,ARG3O.LONGpARG1&;&ARG1%is%first%argumentO.WORDpARG3&;&ARG3%is%third%argumentO9.BYTEpARG2'9;&ARG2%is%second&argumentO.ENDMpSTOREL"KOThe followingtwoexamplesshowpossiblecallsandexpan-5Osionsofthemacro previouslydefined:OaSTOREp3,2,1a;&Macro&callO.LONGp3#;&3%is%first%argumentO.WORDp1#;&1%is%third%argumentO9.BYTEp2$9;&2%is%second&argumentOSTOREpX,X-Y,Z;&Macro&callO.LONGpX#;&X%is%first%argumentO2.WORDpZ#2;&Z%is%third%argumentOz.BYTEpX-Y&z;&X-Y%is%second%argumentA @B! *O5.1BProgramSections(Psects)JOUMACRO-64allowsyoutodivideyourprogramintosectionsROcalledpsectsusingthe.PSECT directive.'PsectsareusefulforMO organizingyourprogram,andfor low-levelcontrolovertheRO^linkingprocess.&More importantly,eachpsectfallsintooneof,Othe followingthree categories: S] ` KCODEpsectscancontainonly instructions.'ItcontainsnoG(data.'PsectsinthiscategoryhavetheEXEandNOMIXpsect attributes. ` HDATApsectscancontainonlydata.+Itcontainsnoin-HY structions.(PsectsinthiscategoryhavetheNOEXEandNOMIX attributes. `1 I1MIXEDpsectscancontain instructionsordata,orboth.DPsectsinthiscategoryhavetheMIX attribute./InA addition,theymayhaveeithertheEXEorNOEXE: attribute.[11OMACRO-64 categorizespsectsbecause:! 6 ` HThereisa significant performance compromise associatedG(withmixing instructionsanddatainthesameprogramHsectionwithintheAlphaAXP architecture.*Thisisbe-DcausetheAlphaAXP architecture typically maintainsA2separatememorycachesfor instructionsanddata. ` PIfyoumix instructionsanddata,itislikelythatinstruc-M tionswillmigrateintothedatacacheandthatdatawillIcmigrateintothe instructioncache.*Whilethis situationOstillyieldscorrectresults,thebenefitsofthe instructionJanddatacachesare diminished.)Placingdatainthein-Kl structionstreamcanalsohave detrimentaleffectsontheF instructionpipelineandthemultipleinstruction-issue@ capabilitiesthatmostAlphaAXPsystemsemploy.aLOSinceacodepsectcancontainonly instructionsandcan-OOnotcontain arbitrarydata, instructionsyouplaceinaCODEOO5psectcanbeanalyzedbythe assembler optimizerandbytheJOsymbolic debugger.+Sinceamixedpsectcancontainarbi-SOtrarydataaswellas instructions, instructionsyouplaceinaMO>mixedpsectarenotanalyzedbythe assembler optimizerorLObythesymbolic debugger.)Instead,the assembler internallyOOconverts instructionsinamixedpsecttoan equivalentdataOHrepresentation. MOBecauseofthe compromises associatedwithmixedpsects,byKOdefaultthe assemblercreatespsectswiththeNOMIXpsectRO5 attribute.+IfyouneedtoplacedatainapsectthathastheSOEXE attribute,orifyouneedtoplace instructionsinapsectJOthathastheNOEXE attribute,youmustalsospecifythePO>MIX attributeinthepsect's definition.(NotethatunliketheQOotherpsect attributs,theMIXpsect attributeisan assembly-MOtime attribute.*TheMIXpsect attributedoesnotappearinOOHthepsect definitionsinyourobjectmoduleanditdoesnot(Oaffectthelinkingprocess. aNOAll assembler directivesand instructionscanbeusedwithinKOmixedpsects.)Whilemany assembler directivescanbeusedQO5withinbothcodeanddatapsects,datastorage directivescan-NOnotbeusedincodepsectsand instructionsand instructionROstorage directivescannotbeusedindatapsects.(IfyouplaceQO> instructionsor instructionstorage directivesinadatapsect,VOorifyouplacedatastorage directivesinacodepsect,theas-POsemblerissuesa diagnosticmessage.(Section5.3 indicatestheMOH applicibiltyofeach directivewithincodeanddatapsects.` 6KOInsummary,codepsectsmaycontainonlystorageforin-OO structionsandstoragecreatedby instruction directives.(DataMO5psectsmaycontainonlystoragecreatedbydata directives.MOMixedpsectsmaycontaineitherstoragefor instructionsorTOdataorboth.(Thereareno restrictionsontheuseofdatadi-LO>rectivesinamixedpsect.)However,the assemblerconvertsLO instructionsyouplaceinamixedpsecttoadatarepre-MO sentation.+ Therefore, instructionsinamixedpsectarenotOOHanalyzedas instructionsbyeitherthe assembler optimizerorJOthesymbolic debugger.(Formore infomationonthe.PSECTO directive,see-Section5.3.*-|?0RQSL6v"O.DISABLEO].DSABL*7\822ODisable assembler functions directivez9POFormat!Os.DISABLEN argument-listO.DSABLM argument-list:FwO ParametersOs argument-listAOOneormoreofthesymbolic argumentslistedin:Table5-3KO$underthe descriptionof.ENABLE.YoucanuseeithertheLO|longortheshortformofthesymbolic arguments.+IfyouDOspecifymultiple arguments,separatethembycommas,O-spaces,ortabs.*::b?I;O DescriptionLOs.DISABLEdisablesthe specified assembler function.)Seethe;O descriptionof.ENABLEformore information.9OfThe alternateformof.DISABLEis.DSABL.TSVKDv!O.ENABLEO].ENABL*E[F11OEnable assmebler functions directiveyGOOFormat Os.ENABLEM argument-listO.ENABLM argument-listH[O ParametersOs argument-listAOOneormoreofthesymbolic argumentslistedin:Table5-3RO$.)YoucanuseeitherthelongformortheshortformoftheO|symbolic arguments.FOIfyouspecifymultiple arguments,separatethemwith%Opcommas,spaces,ortabs.*H:b?IMO DescriptionHOF.ENABLEenablesthe specifiedassembly function.(.ENABLELOanditsnegativeform, .DISABLE,controlthe followingas-Osembler functions:.N ` (Creatinglocallabelblocks `O HO Specifyingthat undefinedsymbol referencesareexternal references `' I'Enablingor disablingspecific optimizationsfortheas-semblyunitO sPOYoucanenableoneormorespecific optimizationoptionswithHOeitherthe.ENABLE directive,orthe /OPTIMIZEcommand-JOiline qualifier,orboth.+Formore informationoncommand Oline qualifiers,seeSection1.2. SeeSectionB.7for informationSOonoptimizations.'Ifyou explicitlydisableoneormorespecificNOr optimizationoptionswiththe.DISABLE directive,thoseopti-MOmizationoptionsaredisabled regardlessofthe command-line O#optionsyouspecify.ONotes*O|?*O?bP88The alternateformof.ENABLEis.ENABL.<QOExamplesYR/Example1B4The followingexampleshowsthe ALIGN_DATAoption:.PSECT%A,%NOEXE4.ENABLE& ALIGN_DATAK;%Align%on%natural I;%natural% boundariesA:%.BYTE%1 ;B:%.QUAD%1000!;%B%is% allocated%at$!;%a%natural&boundary&-&h;% specifically&at&A%+%7!.DISABLE% ALIGN_DATA&;C:%.BYTE%2 ;@D:%.QUAD%1001!@;%D%is% allocated%at';%an% unaligned&boundary&-";% specifically&C%+%1SExample2C4The followingexampleshowstheGLOBALoptiondis-abled:.DISABLE%GLOBALY.ADDRESS%X*Y;% Assembler%issues&a%warning.ENDT \Example3B4The followingexampleshowsthe LOCAL_BLOCKoptionenabled:.ENABLE& LOCAL_BLOCK{.PSECT%A,NOEXEA1::E 5$:p.PROCEDURE_DESCRIPTOR%PROC_1p;% Temporary%label%5$R.blkb%32A2::.address%5$*9;%By%default&the% declaration,9*;%of%A2%would%have&ended&the)9r;% temporary%label%block%and*9;%made&this% reference&to&5$.9;%illegal.JHowever,%this%default,9J;%behavior%has%been% overridden49;%by%the%use&of&.ENABLE% LOCAL_BLOCK..DISABLE% LOCAL_BLOCKC.ENDU3Example4C4The followingexampleshowsan unoptimizedandop-Ctimizedlistof instructionswiththeSCHEDULEand%PEEPHOLEoptionsenabled:$j.ENABLE&PEEPHOLE,SCHEDULE,.psect% A,EXE,QUAD;% unoptimizedTRAPBBA::ADDF&F1,F2,F3DADDF&F4,F5,F6DADDL&R1,R2,R3DADDL&R4,R5,R6"VGThisexampleshowsthe optimizedlistof instructions:$.ENABLE&PEEPHOLE,SCHEDULE*P.psect% A,EXE,QUAD;% optimizedA::ADDF&F1,F2,F3DADDL&R1,R2,R3D(ADDF&F4,F5,F6DpADDL&R4,R5,R6jkjl9O.LIST*F OListing directiveZ 0OFormat Os.LISTN[argument-list]v  LO ParametersOs argument-listBOOneormoreofthesymbolic argumentsdefinedin{Table5-7RO$.)YoucanuseeitherthelongformortheshortformoftheHO| arguments.,Ifmultiple argumentsare specified,separate1Othemwithcommas,spaces,ortabs.* {a? O DescriptionMOs.LISTis equivalentto.SHOW.Seethe descriptionof.SHOW!Oformore information. n moO%%O.LOCAL_PROCEDURE_DESCRIPTOR*^44O Procedure descriptorlabeling directiverHOFormat8Os.LOCAL_PROCEDURE_DESCRIPTORNpd-name,ca-name=O ParametersOspd-nameMOThenameofthe procedure descriptor.(ThisnamecanbeupIO$to31 characterslong.'Itcannotbea temporarylabel. ! ~Oca-nameMOThenameofthecodeaddressthat correspondstothepro-LOqcedure descriptor.+ThisnamemustbedefinedlaterintheNOprogramasalabelinapsectthathaseithertheEXEorQO"MIX attribute,orboth.'Thisnamecanbeupto31 characters5O{long.'Itcannotbea temporarylabel.!! O Description9Os.LOCAL_PROCEDURE_DESCRIPTORdefinesabival-SOuedlocal identifierthatisusedto representalocalroutine.LO$Thefirstvalueisthe procedurevalue,whichisthead-NO|dressofthe procedure descriptor.+ThisvalueisdefinedasOOthecurrentlocationcounteratthepointwhereyouusethe  tributes).&Formore informationonpsects,seeP Section5.1. `$ G$ If automaticdata alignmentisenabled,this directiveL| alignsthecurrentlocationcountertoaquadword(64-bit)A boundarybeforedefiningthe procedure identifier.*!d-}?Z*!Pg |?i"{?OExamples-b.LOCAL_PROCEDURE_DESCRIPTOR%LP1,C1pvuw:mO.NLIST*nQo''OListing exclusion directive[p1OFormat!Os.NLISTM[argument-list]lqBO ParametersOs argument-listAOOneormoreofthesymbolic argumentslistedin:Table5-7OO$.+Useeitherthelongformortheshortformoftheargu-HO|ments.+Ifyouspecifymultiple arguments,separatethem+Owithcommas,spaces,ortabs.*q:b?rO DescriptionIOs.NLISTis equivalentto.NOSHOW.Seethe descriptionof(O.SHOWformore information.wvx;sO.NOSHOW*tQu''OListing exclusion directive\v2OFormat"Os.NOSHOWN[argument-list]w^O ParametersOs argument-listAOOneormoreofthesymbolic argumentslistedin:Table5-7LO$inthe descriptionof.SHOW.UseeitherthelongformorKO|theshortformofthe arguments.,IfyouspecifymultipleGO arguments,separatethemwithcommas,spaces,ortabs.*w:b?x! O DescriptionOOs.NOSHOW specifieslistingcontroloptions.'Seethe description,Oof.SHOWformore information.-zy{;O.PACKED*_55OPackeddecimalstringstorage directived:OFormat*Os.PACKEDMdecimal-string[,symbol]O DescriptionGOs.PACKEDissuppliedasalibrarymacrowith MACRO-64.&OFormore information,seeChapter6.*lO' } |~IO.PROCEDURE_DESCRIPTOR*^44O Procedure descriptorlabeling directivelBOFormat2Os.PROCEDURE_DESCRIPTORNpd-name,ca-name=O ParametersOspd-nameMOThenameofthe procedure descriptor.(ThisnamecanbeupIO$to31 characterslong.'Itcannotbea temporarylabel.! ~Oca-nameMOThenameofthecodeaddressthat correspondstothepro-LOqcedure descriptor.+ThisnamemustbedefinedlaterintheNOprogramasalabelinapsectthathaseithertheEXEorQO"MIX attribute,orboth.'Thisnamecanbeupto31 characters5O{long.'Itcannotbea temporarylabel. O Description=Os.PROCEDURE_DESCRIPTORdefinesabivaluedglobalMO identifierthatisusedto representaglobalroutine.-TheKO$firstvalueisthe procedurevalue,whichistheaddressLO|ofthe procedure descriptor.-ThisvalueisdefinedastheJOcurrentlocationcounteratthepointwhereyouusetheBO-.PROCEDURE_DESCRITOR directive.)ThesecondvalueisROthecodeaddress,whichisthecode entry-pointaddressoftheMO procedure.*ThisvalueisdefinedbythesecondargumenttoAO7the.PROCEDURE_DESCRIPTOR directive.)NostorageisO allocated.O6Notes ` ISeetheVMSCallingStandardforafull descriptionof! procedure descriptors. ` ;Youmustspecify.PROCEDURE_DESCRIPTORbefore5thecodeoftheroutineit describes. `j  jSeeajSection6.7=jfora descriptionofthe$PROCEDURE_DESCRIPTOR@and$ROUTINElibrarymacros.*ThesemacrosdefineIthe procedure identifieranddefinethestorageforthe t procedure descriptor. ` GThis directivecanonlybeusedwithindataormixedBL psects(psectsthathaveeithertheNOEXEorMIX4  attributes).'Formore information,see= Section5.1 `$ G$ If automaticdata alignmentisenabled,this directiveL| alignsthecurrentlocationcountertoaquadword(64-bit)A boundarybeforedefiningthe procedure identifier.*a-y?Z*=g {?Me';(O 6.2MACRO-64!Supplied!MacrosMOThischapter describesthelibrarymacrossuppliedwiththeGOMACRO-64 assembler.)ThesemacrosmakeiteasyforyouSOBtodefineandcall routines.(Foradetailed descriptionofeachOmacro,seeSection6.7.*'^|?Z( zLOThischapteralso describesthe$OPDEFmacro,whichallows.Oyoutodefineyourownopcodes.()! *O6.1BMACRO-64SuppliedLibraryJOUTheMACRO-64 assemblerprovidesalibraryofmacrosthat.(ThislibraryalsoallowsyoutodefineyouLO^ownopcodes.&Thislibrary,called MACRO64.MLB,is installed;OonyoursystemwiththeMACRO-64 assembler.@*currentpsect.+ Similarly,invoking$LINKAGE_SECTIONMOmakesthelinkagepsect associatedwiththecurrentroutineOthecurrentpsect.:NIOYoucanalsocontrolthepsectnameand attributesforLOeachoftheprogramsectionsbydefining argumentstothe8O5$ROUTINEmacro.&Formore information,see5Section6.7.*:|?ZR; V(0O6.3.2BUsingMacroSpecificSymbolsJO4The followingsymbolsaredefinedbythe$ROUTINEmacro.DOThesesymbolsareusefulwhile programmingwiththeHOcalling-standardmacrostoreferto particulardataand"O=linkagesectionitems:}<! S ` K$CS-Theaddressofthe beginningofthecurrent routine's.codesection. ` K$LS-Theaddressofthe beginningofthecurrent routine'slinkagesection. ` K$DS-Theaddressofthe beginningofthecurrent routine'sdatasection. `] B]$DP-Thelinkagesectionaddresswherethe$ROUTINEHmacroplacesthe.ADDRESS$DStoenableaccesstotheIdatasectionfromthelinkagesection(thisvariableisf optional). ` M $SIZE-Thesizeofthefixedstackareainbytes.($SIZEisK>definedusingthevalue specifiedwiththeSIZE argument. ` F$RSA_OFFSET-TheoffsetwithinthefixedstackareatoEotheregistersavearea.* $RSA_OFFSETisdefinedusingAthevalue specifiedwiththe RSA_OFFSET argument. `G HG $RSA_END-TheoffsetwithinthefixedstackareatotheGfirstbytebeyondtheendoftheregistersavearea.=! oLOFormore information,seethe descriptionforthe$ROUTINE#Omacrointhischapter.> a@OThe$CALLmacroalsodefinesthe$STACK_ARG_SIZELOsymbol.,Thissymbol specifiesthenumberofbytesusedtoRO5store argumentsonthestack.'Thisvalueisusefulaftercall-TOingaroutinethatreturnsavalueonthestack.)Inthiscase,FO$CALLcannotremovethe argumentsfromthestackbe-LO>causeyoumustfirstretrievethereturnedvaluefromtheGOstack.+ Subsequently,youcanremovethe argumentsfromEOthestackusingthe$STACK_ARG_SIZEsymbol.*FormoreLOH information,seethe descriptionof$CALLinthischapter.?! VY*O6.3.3BDefining ProcedureType O4The$4 OpenVMSCallingStandard(4definesfourtypesofrou-OOtines;stack, register,null,andbound.)Formore information'Oontypesof routines,seeSectionB.4,Xandthe} OpenVMSCallingO= Standard =.*??@Z MOYoucandefinetheroutinetypebyusingtheKINDkeyword=Oargumentwith$ROUTINEor$PROCEDURE_DESCRIPTORGO5macros.+Thevalidityandvaluesofother$ROUTINEand7O$PROCEDURE_DESCRIPTORmacro parametersareLO determinedbythetypeofroutinebeing declared.+Forex-QO>ample,anull proceduretypehasnostacksize, thereforethePOSIZE parameterisinvalidandcannotbe specifiedforanullFO proceduretype.+WhenusingtheKINDkeywordwiththeOby specifyingtheSTANDARD_PROLOGUEargumentas@O5FALSEandusingthe $END_PROLOGUEmacrotomarkLOtheendofyourprologue sequence.,Inthiscase,youmayHOwishtousethe$SIZEand $RSA_OFFSETsymbolstosym-PO> bolicallyspecifythefixedstacksizeandregistersavearea Ooffset, respectively.DNKOFormore informationontheprologuesequenceofinstruc-KOtionsthatmustoccuratthe beginningofallstackand'O5register routines,seethe$5 OpenVMSCallingStandard 5.E 6O6.3.5BUsingMacrosinEpilogueSectionsLO4Withstackandregister routines,youcanusethe$RETURNFOmacrotogenerateanepilogue sequence./Alternatively,COyoucan code yourown epiloguesequenceusingthe9O=$BEGIN_EPILOGUEand $END_EPILOGUEmacrostoHOmarkthe beginningandendofyourepilogue sequences.FN OThe$ OpenVMSCallingStandard(also describestheepilogueNOsequenceof instructionsthatmustbeexecutedeverytimeaAO5stackorregisterroutinereturnstoitscaller.g  S *O6.6B ProgrammingConsiderationsJOUThissection discussessome programmingconsiderationsyouNOneedtobeawareofwhenusingthecalling-standardmacros.Tq JBO6.6.1BMakingMultipleCallsFromtheSameRoutineHO4The$CALLmacro generatesthe following instructionse-Oquence:-LDQ&R26,%code_address_offset(Rls) z;%load%code&addressQYLDQ&R27,%(procedure_descriptor_address_offset(Rls)p;%load% procedurez; descriptorz;address1JSR&R26,%R26 z1;'U QOThecontentsofR26andR27areerasedasaresultofusingNOthe$CALLmacro.(Thisis importantsinceRlsintheprevi-QOioussequenceis typicallyR27.'Thus,ifyourequire subsequentMOaccesstoyourlinkagesection,suchaswhenmakingsubse-POquentcalls,youneedtomakeaworkingcopyofR27touse"Orafterthefirstcall.rExample6-2)rshowshowthis techniqueisOused.*U5OQ5V JONotethat$CALLalso overwritesthevaluesintheargu-KOment registersandthescratch registers specifiedortheCO5defaultsetbythe SCRATCH_REGS argument,whenyou3Opass argumentstothecalledroutineGW! &O6.6.2B Non-StandardLinkageHO4Undercertaincircumstances,theremaybe advantagesinLOusinga non-standardroutinelinkage.&Formore information, OseeAppendixBandthe$ OpenVMSCallingStandard .*WO]X]&O6.6.3BRoutine RestrictionsLO4 Differentroutinetypeshave different capabilitiesandre-NO strictions.+Forexample,onlyastackroutinethat specifies?OBASE_REG_IS_FP=TRUEcanmakestandardcalls.+ForLO=more information,seethe descriptionfor$ROUTINEinthisOchapter.YNROFora descriptionofthe different capabilitiesand restrictions5O associatedwitheachroutinetype,seeSectionB.4Qandthe$O5 OpenVMSCallingStandard C5.*Y?Yw/#OC.2BRunning DiagnosticsIOUYoucanrun diagnosticsinLSEtodebugprogramswith-LOoutleavingtheLSEeditor.*Formore information,seetheBO GuidetoLanguage-SensitiveEditorforVMSSystems and(O^theMACRO-64releasenotes.DOWhenrunning diagnosticsinanLSEeditingsession,DOMACRO-64displayserrormessagesof differentsever-IO5itylevels.-Formore informationonerror messages,seeOAppendixE.*OPO< +O D.! Differences!from!VAX!MACROIOMACRO-64isanewproductthatprovidesamacroassem-MOblylanguageforthenativeAlphaAXP instructionset.)TheJOBMACRO-64 instructionsetis completely differentfromtheHOVAXMACRO instructionset.)Althoughmanyofthedirec-DOtivesarethesamebetweenVAXMACROand MACRO-64,JOLitwouldnotbe practicaltoshare instruction sequences1Obetweenthetwoassembly languages.! WBOWhileMACRO-64is compatiblewithVAXMACRO,evenEOallowingsharedsourcemodulesbetweenVAXMACROandFO5MACRO-64usingcommon assembler directivesandthroughNO conditional assembly,several differencesexist.(ThisappendixMOcontainstwosections describingthe differencesinassembly$O> directivesand features:+ ` SectionD.16{ describesnewfeaturesinMACRO-64that,(arenotpresentinVAXMACRO. ` SectionD.28z describesfeaturesinVAXMACROthatare%notpresentin MACRO-64.*?*k?0zv=f .6d&8 T8 b!;,SV &+=<f(<D? P8vGW&j6u''$O K\U$ M2 7 \\^dPlb;bzclsvSg4kAvsxm |~xbU T`  2F%  l&x v LjFV F Rfw4*! N(v  0*DZ`r}!^#%a)|0`3R2-P@L" QjTJhXbZjBZsjwvz }PY  phKx-0} n%uX9 rDT+9~M(| *X ] xn Lg >H!<%:&;CbGDGE JMP UsV+ltIx kze:e6p !"&bx="NK&Z-S>E, fL \rTxrq{j1+D 2]Crg 5d<xd':b#&>&6(77bRf`RqT<!eXOrs4|Ri@R>NPt"*r &