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

子程序:

   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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值