c语言排序编程及其汇编,汇编与C语言混合 实现的从小到大的冒泡排序

汇编实现的从小到大的冒泡排序

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

#include

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

{  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

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

从linux0&period;11中起动部分代码看汇编调用c语言函数

上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...

5种语言混合编程:C&plus;&plus;、JS、python、Lisp、汇编

/* 混合C++.JS.python.Lisp.汇编 1种语言,5种语法 */ main { //C++ vector v; v.push(2); putsl(v.size()) ...

九、ARM 汇编与 C 的混合编程

9.1 ARM 汇编与 C 的混合编程 9.1.1 内嵌汇编 __asm __asm("指令")例如关闭/打开总中断开关 CPSR __asm //使用 C 中变量名代替寄存器 { ...

&lbrack;汇编与C语言关系&rsqb;2&period; main函数与启动例程

为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在一文中我们汇编和链接的步骤是: $ as hell ...

【转载】ANSYS的APDL与C语言混合编程(实例)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值