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

文章目录

  • 一、先上代码
    • 1、c文件
    • 2、汇编文件
  • 二、运行结果

一、先上代码

1、c文件

#include
#include
#include

//声明常数,方便后面改
#define num1 20                    //定义数的个数为20        
#define num2 num1*4                //定义数组长度,方便出栈

extern void sortnum(char* num);   //此变量/函数是在别处定义的,要在此处引用

int main()
{
     
	char Num[num2]={
     0};
	char i=0,j=0,*p;
	p=Num;
	srand((unsigned)time(NULL));   //防止随机数每次重复
	while(i<num2) 
	{
     
		Num[i]=(rand()%100);       //产生随机数
		printf("%d\t",Num[i]);     //输出原序列,用作对比
		i+=4;		
	}
	sortnum(p);                    //调用汇编函数
	printf("\n");
	j=0;                           
	while(j<num2)
	{
     
		printf("%d\t",Num[j]);    //输出排序后的序列
		j+=4;		
	}
}

2、汇编文件

area sortnum,code,readonly            
	export sortnum                  ;定义全局变量
start                               ;num1是c文件的
	mov r1,r0                       ;把传过来的地址复制一份,防止再次使用
	mov r7,#76                      ;(num1-1)*4,内层循环判断次数
	add r4,r0,r7                    ;用r1与r4来判断
	mov r3,#0                       ;记录外层循环次数
;外层循环
bcir
	;避免一开始就运行下面的代码,产生不必要的错误
	cmp r1,r0
	beq scir
	
	sub r1,r1,r7                    ;r1回恢复初始地址
	sub r7,r7,#4                    ;减少内层循环的循环次数,提高运行效率
	b scir                          ;跳转指令
;用来数据交换
exchange
	mov r2,r5  
	mov r5,r6
	mov r6,r2
	sub r1,r1,#8
	stmia r1!,{
     r5,r6}               ;交换后入栈
	add r4,r0,r7
	sub r1,r1,#4                    ;r1减4
	cmp r1,r4
	beq sum                         ;相等跳转
;内层循环
scir
	
	ldmia r1!,{
     r5,r6}               ;出栈两个字到寄存器r5和r6
	cmp r5,r6
	bgt exchange                    ;如果r5>r6,跳转到交换函数
	add r4,r0,r7
	sub r1,r1,#4
	cmp r1,r4
	bne scir
sum
	add r3,r3,#1                    ;外层循环次数加一  
	cmp r3,#19                      ;num1-1(总的循环次数)
	bne bcir	                    ;不相等跳转
	sub r1,r1,r7
	mov pc,lr                       ;返回c函数
	nop
	end

二、运行结果

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

你可能感兴趣的:(ARM——C语言与汇编混合编程实现冒泡法排序)