其实就是 汇编的排序然后选出中位数
排序写的是最直接的冒泡排序,因为简单.
相应的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