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


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

    主函数由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("数据输入开始: ");
     while(1)
      {
       scanf("%d",&x);                //键盘输入整型数==〉x
       pBuffer[nCnt++]=x;             //x存入缓冲区
       if((x==(int)-1)||(nCnt>=256))  //输入数据为-1 结束输入
        {
        nCnt--;
        break;
        }
      }  
      printf("数据输入结束! ");
      return nCnt;
    }


    //********向控制台输出buffer数据********
    void OutputConsole()
    {
      int i;
      printf("输出Buffer数据: "); // 向控制台输出数据
      for(i=0;i<bufferlen;i++)
      {  printf("%4d",buffer[i]); }
      printf(" ");


    }






    //********主函数********
    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


  • 相关阅读:
    JS PopupAlert
    JS Navigator
    JS History
    JS Location
    JS Screen
    JS Window
    PTZView
    使用JmDNS发现设备
    Android开发调用webservice方式之一
    解决webservice发布报错Service Unavailable HTTP Error 503. The service is unavailable.
  • 原文地址:https://www.cnblogs.com/unflynaomi/p/4476854.html
Copyright © 2020-2023  润新知