7.61 .macro
The commands .macro and .endm allow you to define macros that generate assembly output. For example, this definition specifies a macro sum that puts a sequence of numbers into memory:
.macro sum from=0, to=5
.long \from
.if \to-\from
sum "(\from+1)",\to
.endif
.endm
With that definition, SUM 0,5 is equivalent to this assembly input:
.long 0
.long 1
.long 2
.long 3
.long 4
.long 5
-
.macromacname -
.macromacname macargs... -
Begin the definition of a macro called macname. If your macro definition requires arguments, specify their names after the macro name, separated by commas or spaces. You can supply a default value for any macro argument by following the name with =
deflt. You cannot define two macros with the same macname unless it has been subject to the
.purgemdirective (See Purgem.) between the two definitions. For example, these are all valid.macrostatements:-
.macro comm - Begin the definition of a macro called
comm, which takes no arguments.
-
.macro plus1 p, p1 -
.macro plus1 p p1 - Either statement begins the definition of a macro called
plus1, which takes two arguments; within the macro definition, write \p or \p1 to evaluate the arguments.
-
.macro reserve_str p1=0 p2 - Begin the definition of a macro called
reserve_str, with two arguments. The first argument has a default value, but not the second. After the definition is complete, you can call the macro either as reserve_str a , b (with \p1 evaluating to a and \p2 evaluating to b), or as reserve_str , b (with \p1 evaluating as the default, in this case 0, and \p2 evaluating to b).
When you call a macro, you can specify the argument values either by position, or by keyword. For example, sum 9,17 is equivalent to sum to=17, from=9.
-
-
.endm -
Mark the end of a macro definition.
-
.exitm - Exit early from the current macro definition.
-
\@ -
as maintains a counter of how many macros it has executed in this pseudo-variable; you can copy that number to your output with \@, but only within a macro definition.
-
LOCALname[ , ... ] -
Warning:
LOCALis only available if you select “alternate macro syntax” with --alternate or.altmacro. See.altmacro.