您的位置:首页 > 其它

ARM汇编 均值滤波实验

2016-05-12 19:52 357 查看
实验要求是排序后去掉最大值最小值,然后把剩下的求平均数。

排序可以用之前的冒泡排序,关键的问题是求平均数。因为ARM没有除法,应该怎么求平均数呢?

最简单的方法就是减法了,用被除数一直减除数,看减了多少次就可以了。

然而要四舍五入,因为寄存器都是整数,保留余数再和除数的一半比较,如果大于就进一,小于等于就忽略

所以把被除数加上除数的一半(向下取整)再循环减除数就行。

AREA EXAMPLE,CODE,READONLY
ENTRY

MOV R2,R0

LOOP_1    CMP R1,R0
BGE LOOP_3
ADD R1,R1,#1
SUB    R2,R2,#1
MOV R3,#0
LDR R4,=0X40000000
B    LOOP_2

LOOP_2    CMP    R3,R2
BGE LOOP_1
ADD R3,R3,#1
LDR R5,[R4]
LDR R6,[R4,#4]
ADD R4,R4,#4
CMP    R5,R6
BLS LOOP_2
SUB R4,R4,#4
STR R5,[R4,#4]
STR R6,[R4]
ADD R4,R4,#4
B LOOP_2

LOOP_3
LDR    SP,=0X40000000
MOV R2,#0
STR    R2,[SP]
MOV R3,#4
MUL R3,R0,R3
SUB R3,R3,#4
STR R2,[SP,R3]
MOV R3,#0
MOV R4,#0
MOV R5,#0
B LOOP_4

LOOP_4
CMP R2,R0
BGE LOOP_5
LDR R3,[SP,R4]
ADD R5,R5,R3
ADD R4,R4,#4
ADD R2,R2,#1
B LOOP_4

LOOP_5
SUB R2,R0,#2;
ADD    R5,R2,LSR#1;除数的一半
MOV R1,#0
B LOOP_6

LOOP_6
CMP R5,R2
BLO LOOP_END
ADD R1,R1,#1;把减的次数放在R1
SUB R5,R5,R2
B LOOP_6

LOOP_END
NOP

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: