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
-
.macro
macname -
.macro
macname 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
.purgem
directive (See Purgem.) between the two definitions. For example, these are all valid.macro
statements:-
.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.
-
LOCAL
name[ , ... ]
-
Warning:
LOCAL
is only available if you select “alternate macro syntax” with --alternate or.altmacro
. See.altmacro
.