ARM 排序题 生成20个20~50的随机数

生成20个20~50的随机数,存放于对象X3中,并实现以下功能:
(1)设计子程序fun_aver,统计上述20个数的最小值存于min单元。
(2)设计子程序fun_sort,将上述数组升序排列。
(3)设计子程序fun_filter,将与min绝对值差10以内的数,存到对象X4中。

AREA SGQ,CODE,READONLY
IMPORT randomnumber
CODE32
ENTRY
NUM EQU 20
MIN EQU 20
MAX EQU 50

LDR R3,=NUM
LDR R4,=SRC

LOOP
BL randomnumber
MOV R0,R0,LSR #24
CMP R0,#MIN
BLO LOOP
CMP R0,#MAX
BHS LOOP
TST R0,#0X01
BEQ LOOP
STRB R0,[R4],#1
SUBS R3,R3,#1
BNE LOOP

BL  fun_aver
BL  fun_sort
BL  fun_filter

stop
B stop

fun_aver
LDR R4,=SRC
LDR R3,=NUM
LOOP1
SUB R3,R3,#1
MOV R5,R3
LDR R4,=SRC
LOOP2
LDRB R6,[R4],#1
LDRB R7,[R4]
CMP R6,R7
STRHSB R6,[R4]
SUBHS R4,R4,#1
STRHSB R7,[R4],#1
SUB R5,R5,#1
CMP R5,#0
BNE LOOP2
CMP R3,#1
BNE LOOP1
MOV PC,LR

fun_sort
LDR R4,=SRC
LDR R3,=NUM
LDR R5,=min
LDRB R7,[R4]
STRB R7,[R5]
MOV PC,LR

fun_filter
LDR R4,=X3
LDR R3,=NUM
LDR R5,=X4
LDR R6,=min
LDRB R6,[R6]
LOP
SUBS R3,R3,#1
BEQ LOP1
LDRB R8,[R4],#1
SUB R7,R6,R8
CMP R7,#10
BGT LOP
STRB R8,[R5],#1
B LOP
SUB R7,R8,R6
CMP R7,#10
BGT LOP
STRB R8,[R5],#1
B LOP
LOP1
MOV PC,LR

min
DCB 0
X4
SPACE 100
SRC
SPACE 100
END