AREA TEST2,CODE,READONLY
ENTRY
CODE32
;把随机的十个数安从小到大的顺序排序,并存放在目标内存单元中
;R0,R1用于循环计数
;R2,存放Src首地址/R3,存放R2所指向的Src中的值
;R4,存放Src+i*4的地址/R5,存放Src+i*4的地址内的值 其中: i*4为偏移量
;R6,R7 用于完成R4,R5的i*4偏移量
;R8-R11用于 Src数据转存Dst
START
MOV R0,#0 ;外循环次数
MOV R1,#9 ;内循环次数
MOV R7,#4 ;无意义就是数字4,用来做乘法操作
MOV R11,#10 ;用于Src转移Dst数据次数
LOOPOUT SUB R9,R1,R0 ;内循环次数赋值
LDR R2,=Src ;Src用于比较的首地址
MUL R6,R0,R7 ;为了计算移动单元
ADD R2,R2,R6 ;当前R2所指首地址
LDR R3,[R2] ;取出当前首地址的值
MOV R4,R2 ;获取首地址指针R2所存的值
LOOPIN ADD R4,R4,#4 ;指针移动
LDR R5,[R4] ;存放当前R4指向的值
CMP R3,R5
SWPHS R3,R3,[R4] ;交换较小的数给R3
STRHS R3,[R2]
SUBS R9,R9,#1
BNE LOOPIN
ADD R0,R0,#1 ;造成下次指针偏移
CMP R0,#9
BNE LOOPOUT
LDR R8,=Src
LDR R9,=Dst
LOOPEND LDR R10,[R8],#4 ;读取Src中值
STR R10,[R9],#4 ;将Src中值写入Dst中
SUBS R11,R11,#1
BNE LOOPEND
LTROG
Src DCD 0X99,0X88,0X77,0X66,0X65,0X55,0X44,0X33,0X22,0X11
Dst DCD 0,0,0,0,0,0,0,0,0,0
Stop
B Stop
END