zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C
    O
    扩展KMP
    扩欧与乘法逆元
    E
    D
    [LeetCode] Same Tree 深度搜索
    [LeetCode] Remove Duplicates from Sorted List 链表
    [LeetCode] Balanced Binary Tree 深度搜索
    [LeetCode] Remove Nth Node From End of List 快慢指针
  • 原文地址:https://www.cnblogs.com/wzben/p/5486994.html
Copyright © 2011-2022 走看看