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

主函数由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

汇编与C语言混合 实现的从小到大的冒泡排序的更多相关文章

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

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

  2. 5种语言混合编程:C++、JS、python、Lisp、汇编

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

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

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

  4. [汇编与C语言关系]2. main函数与启动例程

    为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在<x86汇编程序基础(AT&T语法)>一文中我们汇编和链接的步骤是: $ as hell ...

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

    原文地址:http://www.cnblogs.com/lyq105/archive/2010/05/04/1727557.html 本文讨论的不是利用C语言为ANSYS写扩展(或者说是用户子程序), ...

  6. keil or c51 汇编调用c语言函数 容易忽视的问题

    最近,在用keil 写一个小程序时,想实践一下从汇编调用 C语言函数,我们都知道C语言调用汇编函数讨论得较多,但反过来,从汇编中调用C语言的函数未见深入分析:在开始的时候,还是忽视了一个问题,就是对现 ...

  7. C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质

    事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return.结果发现返回的结果依旧是正确的.经过半小时的反汇编调试.证明了我的猜想,如今在博客里分享.也是对C语言编译原理的一 ...

  8. Java语言与C语言混合编程(2)--在Java中调用C语言本地库

    在上一篇文章中介绍了Java语言中的native关键字,以及Java语言调用C语言的编译生成本地动态链接库(DLL)实现加法运算的小例子,本文通过一个更加详细的例子,深入讲解Java语言调用C语言的函 ...

  9. Java语言与C语言混合编程(1)--Java native 关键字

    一. 什么是 native Method 简单地讲,一个 native Method 就是一个java调用非java代码的接口.一个 native Method 是这样一个java的方法:该方法的实现 ...

随机推荐

  1. js数组排序

    在JS中,sort方法可用于数组的排序:先来看一个例子: var arr = [1, 2, 3, 5, 7, 78, 8, 89]; arr.sort(); console.log(arr); // ...

  2. URAL 1920 Titan Ruins: the Infinite Power of Magic

    大意: 有一张N*N的网格,你每次可以走一步,每格只能走一次,有没有一种方法让走了L步后回到一个距原点1步远的格子?  没有输出Unsuitable device,否则输出Overwhelming p ...

  3. Linux sort --copy

    Source: http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html sort是在Linux里非常常用的一个命令,管排序的,集中 ...

  4. poj 1300 Door Man 欧拉回路

    题目链接:http://poj.org/problem?id=1300 You are a butler in a large mansion. This mansion has so many ro ...

  5. IAP Store Kit Guide(中文)

    IAP Store Kit Guide(中文) 一.In App Purchase概览 Store Kit代表App和App Store之间进行通信.程序将从App Store接收那些你想要提供的产品 ...

  6. 15万甚至30万以内的SUV值不值得买?

    大家好,这个帖子比较长,也是我一直以来长期实践.思考.验证的结论,不当之处还请指正,也欢迎大家来共 同讨论,已经买了此价位SUV的战友们,看完后也不要生气,毕竟我的出发点是注重行车安全,人非神明,是个 ...

  7. [百度空间] [转]内存屏障 - MemoryBarrier

    处理器的乱序和并发执行 目前的高级处理器,为了提高内部逻辑元件的利用率以提高运行速度,通常会采用多指令发射.乱序执行等各种措施.现在普遍使用的一些超标量处理器通常能够在一个指令周期内并发执行多条指令. ...

  8. Kali Linux 命令集

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  9. HDU1056 HangOver

    HangOver Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Descript ...

  10. AS3之正则表达式讲解

    限制输入内容 (一).my_txt.restrict = "A-Z 0-9";               仅允许在文本字段中输入大写字符.空格和数字 (二).my_txt.res ...