ARM与C语言混合编程实现冒泡排序

题目要求

(1)编程实现数据的冒泡排序。要求:
1)主程序:用C语言编写:定义不少于20个CHAR型的数组变量;
2)显示排序的结果。
3)子程序:用ARM汇编语言编写,实现冒泡排序(升序)。
(2)上机调试编写的程序,记录实验过程

程序分析

(1)主程序中要定义1个char型数组,要定义1个数组输出函数,用于输 出数组元素。
(2)主程序中要有随机函数的使用用于char型数组元素的生成。
(3)子程序要有两个寄存器用于计数,分别用于外层循环与内层循环。
(4)子程序中要有讲两数进行比较后,用于交换位置的指令(若大于)。
(5)子程序中要检测是否讲排序进行到数组最后一个元素。

程序案例源码

主函数

#include
#include
#include
extern char bubble(char *num);
char num[25];
void output()
{	
	int i;
	for(i=0;i<25;i++)
	{
		printf("%d ",num[i]);
	}
	printf("\n");
}
int main()
{
	int i;
	srand((unsigned)time(NULL));
	for(i=0;i<25;i++)
	{
		num[i]=rand()%100;
	}
	printf("original data:\n");
	output();
	bubble((char *)num);
	printf("bubble sort data:\n");
	output();
	return 0;
}

子程序

area bubble,code,readonly
	export bubble
start
    mov r7,#25  
	
loop0 
    mov r2,r0  
    mov r6,r7

loop1 
	ldrb r3,[r2]
	add r4,r2,#1
	ldrb r5,[r4]
	cmp r3,r5    
	strcsb r3,[r4]  
	strcsb r5,[r2]  
	add r2,r2,#1  
	sub r6,r6,#1 
	cmp r6,#1
	bne loop1   
	sub r7,r7,#1 
	cmp r7,#1
	bne loop0

    mov pc,lr
    end

程序运行结果

ARM与C语言混合编程实现冒泡排序_第1张图片

程序结果分析

(1)在主程序中首先用extern声明bubble在其他程序中定义;定义一个数组输出函数,用于随机产生的数组和排序后数组的输出;随机产生数组中先用srand函数产生种子,rand函数产生的随机数对数组元素赋值。
(2)在子程序中使用export声明全局变量bubble;初始化外层循环次数,在loop0中先将内层循环的地址进行初始化,然后将内层的循环次数传递给r6;在loop1中首先取r2内容为地址的数据的1个字节传递给r3;然后将+1并同上传递给r5;将r3和r5的内容进行比较,利用strcsb 命令,若r3内容大于或等于r4内容为地址的数据的1个字节,在内存中将两数字进行交换,已完成升序排序;并将完成1次将循环次数减1,并判断是否完成内层循环,完成内层循环后判断是否完成外层循环。

你可能感兴趣的:(Arm学习记录)