macro mend

MACRO 和 MEND

MACRO 指令标记一个宏定义的开始。 宏扩展在 MEND 指令处终止。

语法

有两个指令用于定义一个宏。 其语法是:

MACRO{$ label} macroname{$ cond} {$ parameter{,$ parameter}...} ; code MEND

其中:

$label

是由调用宏时提供的符号替换的参数。 该符号通常是一个标签。

macroname

是宏的名称。 它不能以指令或命令名开始。

$cond

是专用于包含条件代码的特殊参数。 允许有效条件代码以外的值。

$parameter

是调用宏时被替换的一个参数。 可用以下格式设置参数的缺省值:

$ parameter="default value"

如果缺省值内或两端有空格,则必须使用双引号。

用法

如果在一个宏内开始任何 WHILE...WEND 循环或 IF...ENDIF 条件,则必须在到达 MEND 指令之前结束它们。

在宏体内,可以像其他变量一样使用类似于 $label$parameter$cond 等参数。 每次调用宏时,都会为它们指定新值。参数必须以 $ 开始,以区别于常规符号。 可以使用任意数目的参数。

$label 是可选的。如果宏定义了内部标签,则它很有用。 它被当作宏的一个参数。 它不一定代表宏扩展中的第一个指令。 宏定义任何标签的位置。

使用 | 作为自变量来使用参数的缺省值。 如果省略该自变量,则使用一个空字符串。

在使用多个内部标签的宏内,将每个内部标签定义为带有不同后缀的基址标签会很有用。

如果在扩展中不需要空格,则在参数与后面的文本或参数之间使用一个圆点。 不得在参数与前面的文本之间使用圆点。

您可对条件代码使用 $cond 参数。使用一元运算符 :REVERSE_CC: 可得到条件代码的取反代码,使用 :CC_ENCODING: 可得到条件代码的 4 位编码。

宏可定义局部变量的范围。

宏可以嵌套。

示例; macro definition MACRO ; start macro definition$label xmac $p1,$p2 ; code$label.loop1 ; code ; code BGE $label.loop1$label.loop2 ; code BL $p1 BGT $label.loop2 ; code ADR $p2 ; code MEND ; end macro definition ; macro invocationabc xmac subr1,de ; invoke macro ; code ; this is what isabcloop1 ; code ; is produced when ; code ; the xmac macro is BGE abcloop1 ; expandedabcloop2 ; code BL subr1 BGT abcloop2 ; code ADR de ; code

使用宏来生成汇编时的诊断信息:

MACRO ; Macro definition diagnose $param1="default" ; This macro produces INFO 0,"$param1" ; assembly-time diagnostics MEND ; (on second assembly pass) ; macro expansion diagnose ; Prints blank line at assembly-time diagnose "hello" ; Prints "hello" at assembly-time diagnose | ; Prints "default" at assembly-time条件宏示例AREA    codx, CODE, READONLY; macro definition         MACRO         Return$cond         [ {ARCHITECTURE} <> "4"           BX$cond lr           |           MOV$cond pc,lr          ]          MEND; macro invocationfun PROC         CMP       r0,#0         MOVEQ     r0,#1         ReturnEQ        MOV       r0,#0          Return          ENDP         END网上有一篇关于macro mend的文章写得很好, 其地址是: http://blog.csdn.net/BelindaBen/archive/2009/01/06/3721589.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值