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