您的位置:首页 > 编程语言 > C语言/C++

汇编与C语言混合 实现的从小到大的冒泡排序

2014-12-19 09:58 295 查看
汇编实现的从小到大的冒泡排序

主函数由C语言实现,sort函数用汇编语言写

#include <stdio.h>

int buffer[256]; //数据缓冲区

int bufferlen=0; //数据缓冲区数据个数

extern sort(int *buffer,int bufferlen); //汇编函数sort接口

//********从键盘录入数据********

int InputDataFromKeyBoard(int *pBuffer)

{

int nCnt=0;

int x;

printf("数据输入开始:\n");

while(1)

{

scanf("%d",&x); //键盘输入整型数==〉x

pBuffer[nCnt++]=x; //x存入缓冲区

if((x==(int)-1)||(nCnt>=256)) //输入数据为-1 结束输入

{

nCnt--;

break;

}

}

printf("数据输入结束!\n");

return nCnt;

}

//********向控制台输出buffer数据********

void OutputConsole()

{

int i;

printf("输出Buffer数据:\n"); // 向控制台输出数据

for(i=0;i<bufferlen;i++)

{ printf("%4d",buffer[i]); }

printf("\n");

}

//********主函数********

int main()

{

bufferlen=InputDataFromKeyBoard((int *)buffer); //从键盘录入数据

OutputConsole(); //将输入数据输出到控制台

sort((int *)buffer,bufferlen); //对输入数据排序

OutputConsole(); //输出排序数据

return 0;

}

汇编函数如下:

EXPORT sort ;导出函数sort

AREA Exp103,CODE,READONLY

CODE32

sort ;函数名

;入口参数

; R0<==buffer数据缓冲区首地址

; R1<==bufferlen 数据缓冲区数据个数

SUBS R1,R1,#1 ;第一层循环 次数R1

MOV R5,R1 ;R5等于要排序的数据数-1

L0 MOV R2,#0

MOV R3,R1 ;第二层循环 次数R3

CMP R1,R5 ;R1是不是等于总数-1.如果是就说明这是第一次,R0不必移位

ADDNE R0,R0,#4 ;除了第一次外都要使R0移位,NE是不等于的意思

L1 LDR R6,[R0,R2] ;R6<=[R0+R2]

ADD R4,R2,#4

LDR R7,[R0,R4] ;R7<=[R0+R2+1]

CMP R6,R7

BLT L2

STR R7,[R0,R2] ;R6<R7交换

STR R6,[R0,R4]

L2 ADD R2,R2,#4

SUBS R3,R3,#1 ;二层循环控制

BNE L1

SUBS R1,R1,#1 ;一层循环控制

BNE L0

EXIT MOV PC,LR ;函数返回

END

运行实例

数据输入开始:4 2 6 8 7 -1

数据输入结束!

输出Buffer数据:

4 2 6 8 7

输出Buffer数据:

2 4 6 7 8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: