ARM汇编中值滤波实验

其实就是 汇编的排序然后选出中位数

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

 

相应的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

 

posted @ 2016-05-12 19:17  wzb的QQ空间  阅读(1075)  评论(0编辑  收藏  举报