冒泡排序_汇编语言的子程序调用与宏定义实现

1 子程序

;环境为ADS 子程序调用
    AREA    MAIN,CODE,READONLY
    ENTRY
    CODE32                 
start                       
  
    BL MAOPAO
stop
    MOV R0,#0x18
    LDR R1,=0x20026
    SWI 0x123456
     
MAOPAO 
    MOV R4,#0               ;R4为全局变量 
    LDR R6,=src             ;r6数组首地址 
    ADD R6,R6,#len-4        ;r6指向数组为地址 
outer                        
    LDR R1,=src             ;r1 指向数组首地址  
inner                       ;内层循环 一次冒泡过程 
    LDR R2,[R1]             ;去数组前两个数值比较
    LDR R3,[R1,#4]         
    CMP R2,R3                
    STRGT R3,[R1]            
    STRGT R2,[R1,#4]        ;大了就交换到后面 
    ADD R1,R1,#4                
    CMP R1,R6               ;判断一次循环是否结束 
    BLT inner               ;没有结束,继续本次冒泡
   
    ADD R4,R4,#4            ;全局变量加1 
    CMP R4,#len             ;判断外层是否结束
    SUBLE R6,R6,#4          
    BLE outer               
    MOV PC,LR
   
    AREA DATA,DATA,READWRITE 
src DCD 15,-4,0,4,1,-1,16,32,-32,2       
len EQU 10*4                
   
    END

2 宏定义

;环境为ADS,宏定义
    MACRO  
$label  maopao $x,$y
    MOV R4,#0               ;R4为全局变量 
$label.outer 
    LDR R6,=$x             ;r6数组首地址 
    ADD R6,R6,#$y-4                      
    LDR R1,=$x             ;r1 指向数组首地址  
$label.inner                       ;内层循环 一次冒泡过程 
    LDR R2,[R1]             ;去数组前两个数值比较
    LDR R3,[R1,#4]         
    CMP R2,R3                
    STRGT R3,[R1]            
    STRGT R2,[R1,#4]        ;大了就交换到后面 
    ADD R1,R1,#4                
    CMP R1,R6               ;判断一次循环是否结束 
    BLT $label.inner               ;没有结束,继续本次冒泡
   
    ADD R4,R4,#4            ;全局变量加1 
    CMP R4,#$y             ;判断外层是否结束
    SUBLE R6,R6,#4          
    BLE $label.outer               
    MEND
     
    AREA    MAIN,CODE,READONLY
    ENTRY
    CODE32
                      
start                       
lable    maopao src,len 
 
stop
    MOV R0,#0x18
    LDR R1,=0x20026
    SWI 0x123456
     
     
   
    AREA DATA,DATA,READWRITE 
src DCD 15,-4,0,4,1,-1,16,32,-32,2       
len EQU 10*4                
   
    END


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值