ARM汇编中用宏和子程序实现1+2+。。。+N
2014-04-10 18:34
399 查看
子程序:
方法一:
方法二:
MACRO
$lable addrt $a,$b
$lable.add
ADDS $a,$a,#1
ADDS $b,$b,$a
CMP $a,#100
BNE $lable.add
MOV R2,$b
MEND
AREA add, CODE, READONLY
ENTRY
CODE32
START MOV R0, #1
MOV R1, #1
Hong addrt R0,R1
STOP
MOV R0, #0X18
LDR R1, =0X20026
SWI 0X123456
END
AREA MAIN, CODE, READONLY ENTRY CODE32 start MOV R2,#0 MOV R3,#0 ;R3存放累加和,初始值为0 LDR R1,=n LDR R1,[R1] ;将n的值存入R1 BL add ;调用add子程序 stop MOV R0,#0x18 LDR R1,=0x20026 SWI 0x123456 add MOV R2,R1 ADD R3,R3,R2 SUBS R1,R1,#1 BNE add LDR R1,=dst STR R3,[R1] ;累加和写入dst单元 MOV PC,LR ;子程序返回 AREA NUM,DATA,READWRITE n DCD 100 dst DCD 0 END宏指令:
方法一:
MACRO ADD_START ;宏名 LCLA sum ;定义局部变量 LCLA n sum SETA 0 ;给变量赋值 n SETA 100 MOV R1,#n add MOV R2,R1 ADD R3,R3,R2 SUBS R1,R1,#1 BNE add LDR R1,=sum STR R3,[R1] ;累加和写入sum单元 MEND AREA Example,CODE,READONLY ENTRY CODE32 start MOV R2,#0 MOV R3,#0 ;R3存放累加和,初始值为0 ADD_START over END
方法二:
MACRO
$lable addrt $a,$b
$lable.add
ADDS $a,$a,#1
ADDS $b,$b,$a
CMP $a,#100
BNE $lable.add
MOV R2,$b
MEND
AREA add, CODE, READONLY
ENTRY
CODE32
START MOV R0, #1
MOV R1, #1
Hong addrt R0,R1
STOP
MOV R0, #0X18
LDR R1, =0X20026
SWI 0X123456
END