ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
可在程序中的任何位置定义宏,但必须先定义宏,然后才能使用宏。宏可以在源文件的开头定义,或在 .copy/.include 文件(请参阅复制源文件)中定义;也可以在宏库中定义。有关宏库的更多信息,请参阅节 6.4。
宏定义可以被嵌套,也可以调用其他宏,但宏的所有元素必须在同一个文件中定义。节 6.9中讨论了嵌套宏。
宏定义是一系列采用以下格式的源语句:
macname | .macro [parameter1] [, ...,parametern ] |
model statements or macro directives | |
[.mexit] | |
.endm |
macname | 指定宏的名称。必须将名称放在源语句的标签字段中。只有宏名称的前 128 个字符有意义。汇编器会将宏名称放在内部操作码表中,并会替换同名的任何指令或先前的宏定义。 |
.macro | 是将源语句标识为宏定义第一行的指令。必须将 .macro 放在操作码字段中。 |
parameter1, parametern |
是作为 .macro 指令操作数出现的可选替代符号。节 6.3中讨论了参数。 |
model statements | 是每次调用宏时执行的指令或汇编器指令。 |
macro directives | 用于控制宏扩展。 |
.mexit | 是一个用作 goto .endm 的指令。当错误测试确认宏扩展失败并且不需要完成宏的其余部分时,.mexit 指令会很有用。 |
.endm | 是终止宏定义的指令。 |
如果要在宏定义中添加注释但不希望 这些注释显示在宏扩展中,请在注释前使用感叹号。如果希望 注释显示在宏扩展中,请使用星号或分号。有关宏注释的更多信息,请参阅节 6.7。
以下示例展示了宏的定义、调用和扩展。
宏定义:以下代码使用四个参数定义了一个宏 add3:
1 *
2
3 * add3
4 *
5 * ADDRP = P1 + P2 + P3
6
7 add3 .macro P1, P2, P3, ADDRP
8
9 ADD ADDRP, P1, P2
10 ADD ADDRP, ADDRP, P3
11 .endm
宏调用:以下代码使用四个参数调用宏 add3:
12
13 00000000 add3 R1, R2, R3, R0
宏扩展:以下代码展示了替换针对宏调用的宏定义。汇编器将 add3 的 P1、P2、P3 和 ADDRP 参数替换为 R1、R2、R3 和 R0。
1
1 00000000 E0810002 ADD R0, R1, R2
1 00000004 E0800003 ADD R0, R0, R3