c - 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
解决方案
推荐阅读
- vba - Do While 循环不循环通过文件夹
- javascript - 过滤 Select2 数据数组的 JS 对象
- javascript - 节点坚持重型 Node.js 应用程序不返回值
- javascript - 将数据从 Ajax 返回到 PHP
- javascript - 如何在另一个函数中使用 Jquery 更改函数值有什么方法可以使用?
- python - 如何使用熊猫从某些 csv 列创建 json 数组
- tensorflow - 如何在 Tensorflow 的图形运行时中选择三个数据输入管道之一?
- symfony - FormBuilder 中的 QueryBuilder 表达式
- c# - 如何更改按钮上出现的文本
- jquery - 如何在jquery中覆盖身体的背景图像