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



你可能感兴趣的:(ARM体系结构与编程)