首页 > 解决方案 > ARM 汇编:如何交换数组元素以实现排序?

问题描述

在首先将数组从最小整数排序到最大整数之后,我正在尝试编写一个程序来搜索数组的中位数。我正在引用一个 C 程序来查找数组的中值,以将其转换为等效的 ARM 程序集。如果 a[j] > a[j+1],我无法弄清楚如何将 a[j] 与 a[j+1] 交换。

这是C程序:

 void swap(int *p,int *q) {
   int t;
   
   t=*p; 
   *p=*q; 
   *q=t;
}

void sort(int a[],int n) { 
   int i,j,temp;

   for(i = 0;i < n-1;i++) {
      for(j = 0;j < n-i-1;j++) {
         if(a[j] > a[j+1])
            swap(&a[j],&a[j+1]);
      }
   }
}

int main() {
   int a[] = {6,3,8,5,1};
   int n = 5;
   int sum,i;

   sort(a,n);
   
   n = (n+1) / 2 - 1;      // -1 as array indexing in C starts from 0

这是我到目前为止编写的程序:

.syntax unified
.cpu cortex-m4
.fpu softvfp
.thumb

.section .data
.balign

array: .word 81,75,90,94,79,86,89,54,75,98, -1
size: .word 9

.section .text
.balign
.global main

Median:
        ldr r8, =array
        ldr r9, =size      //hard coded size of the array -1 is not meant to be included
        mov r1, #0     // i = 0
        mov r3, #0    // j = 0
        ldr r2, [r8, r1, lsl #2]  // getting a[j]
        ldr r4, [r8, r1, lsl #3]  //getting a[j+1]
        cmp r2, r4
        bgt swap

swap: // swap a[j] with a[j+1]
        str r2, [r4]
        




forever:
    b     forever

标签: cassemblyarmswap

解决方案


推荐阅读