您的位置:首页 > 其它

ARM汇编中值滤波实验

2016-05-12 19:17 330 查看
其实就是 汇编的排序然后选出中位数

排序写的是最直接的冒泡排序,因为简单.

相应的C代码

r2=r0;

while(r1<r0){

r1++;
r2=r2-1;
r3=0;
while(r3<r2){

if(sp[r3]>sp[r3+1]){

//交换

}
r3++

}

}


汇编代码:

AREA    EXAMPLE,CODE,READONLY
ENTRY

LDR SP,=0X40000000

;ldr r4,=0x40000000;这才是开头
;SWAP
;ldr r5,[r4];从堆栈取数
;ldr r6,[r4,#4]

;str r5,[r4,#4];将寄存器里面的数放进堆栈
;str r6,[r4]

;ldr r5,[r4]
;ldr r6,[r4,#4]

;R0,R2 INNITAIL

MOV R2,R0

LOOP_1    CMP R1,R0;R1是0,R0是N
BGE LOOP_END;如果R1比R0大,结束
ADD R1,R1,#1;R1++
SUB    R2,R2,#1;R2是需要比较的个数
MOV R3,#0;R3是下一个循环的下标,初始化
LDR R4,=0X40000000;栈的开头
B    LOOP_2

LOOP_2    CMP    R3,R2;如果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_END
MOV R2,R0,LSR#1; /2
MOV R3,#4
MUL    R1,R2,R3;偏移量
LDR    R1,[SP,R1];取中位数

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