ARM宏汇编(MACRO,MEND)

基本语法

1MACRO MEND

       MACRO MEND 伪指令可以为一个程序段定义一个名称。这样,在汇编语言应用程序中,就可以通过这个名称来使用它所代表的程序段,即当程序做汇编时,该名称将被替换为其所代表的程序段

MACRO

 $标号   宏名 $参数1$参数2…..

  程序段(宏定义体)

MEND

$标号:为主标号,宏内的所有其它标号必须由主标号组成

宏名:宏名称,为宏在程序中的引用名;

$参数1$参数2:宏中可以使用的参数。

     宏中的所有标号必须在前面冠以符号“$”

     MACROMEND伪指令可以嵌套使用。

举一个更具体的例子

  MACRO    宏定义指令

$MDATA   MAXNUM $NUM1,$NUM2 ;主标号,宏名,参数

           语句段

$MDATA.WAY1  ;   宏内标号,必须写为“主标号.宏内标号

           语句段

$MDATA.WAY2   ;  宏内标号

           语句段

  MEND  宏结束指令

主程序中调用该宏:

Lab1 MAXNUM  0x01, 0x02

2MEXIT

    MEXIT 用于从宏定义中跳转出去。

实践 

用汇编语言和宏实现1+2+3+4+5+6+7

接下来用两种宏定义实现

方法一
	MACRO ;宏定义
$LABEL ADDRT $A,$B    ;主标号,宏名,参数
$LABEL.ADDR    ;宏内其他标号
	ADD $A,$A,$B
	ADD $B,$B,#1
	CMP $B,#7
	BLE $LABEL.ADDR
	MOV R2,$A    ;结果赋给R2
	MEND
	
	
	AREA ACC,CODE,READONLY		;段定义
	ENTRY	
	CODE32
	
	MOV R0,#0    ;给两个参数赋值
	MOV R1,#1
	ADDRT R0,R1    ;宏调用

	END
方法二

感觉这个方法很不实用,因为只能事先指定寄存器,但实际应用中寄存器可能被占用,强行将宏与寄存器绑定了,这种状况下的好处就是没有显式传参,上一种方法还要传参。

	MACRO ;宏定义
	ADDRT    ;宏名
ADDR	ADD R0,R0,R1    ;程序段
	ADD R1,R1,#1
	CMP R1,#7
	BLE ADDR
	MEND
	
	
	AREA ACC,CODE,READONLY		;段定义
	ENTRY	;程序入口
	CODE32
	
	MOV R0,#0
	MOV R1,#1
	ADDRT ;无显式传参

	END

程序正常运行的关键是不仅宏和汇编的格式要对,而且像标号这些要顶格写。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值