您的位置:首页 > 其它

ARM汇编中用宏和子程序实现1+2+。。。+N

2014-04-10 18:34 399 查看
子程序:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编 MACRO