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

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

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

L0      MOV R2,#0

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

CMP R1,#4

ADDNE R0,R0,#4      ;除了第一次外都要使R0移位,乘法尤其是*4的那种用左移来实现

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

时间: 2024-10-07 18:00:30

汇编语言 实现的从小到大的冒泡排序的相关文章

C#的冒泡排序

C#实现的从小到大的冒泡排序: public void BubbleSort(int[] array) { int length = array.Length; for (int i = 0; i < length - 1; i++) { for (int j = length - 1; j > i; j--) { // 对两个元素进行交换 if (array[j] < array[j - 1]) { int temp = array[j]; array[j] = array[j - 1

问题 A: 喷水装置(一)

题目描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置, 每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600) 个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润. 输入 第一行m表示有m组测试数据 每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径. 输出 输出所用装置的个数 样

Java排序--排序算法

常用排序算法 我们通常所说的排序算法往往指的是内部排序算法,即需要排序的数据在计算机内存中完成整个排序的过程,当数据率超大或排序较为繁琐时常借助于计算机的硬盘对大数据进行排序工作,称之为外部排序算法. 排序算法大体可分为两种: 比较排序:时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等. 非比较排序:时间复杂度可以达到O(n),主要有:基数排序,基数排序,桶排序等. 常见比较排序算法的性能: 有一点我们很容易忽略的是排序算法的稳定性

JavaSE| 面向对象

面向对象只是其中一种编程思想,还有很多其他的编程思想:面向过程.面向切面.面向服务编程... 面向过程的思维方式:注重步骤.过程,面向过程强调的是功能行为: 面向对象的思维方式:关注的是“对象”.面向对象,将功能封装进对象,强调具备了功能的对象.面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象.分类.继承.聚合.多态等. 类(class).对象(object也称为实例instance) 对象:一个一个的具体事物 当很多个对象它们有共同的特性的时候,我们就可以抽象出一个类别,

JavaScript基础部分经典案例

再复杂的程序都是由一个个简单的部分组成. 001案例 - 交换两个变量的值 方法01 - 使用临时变量 var n1 = 5; var n2 = 6; // 创建一个临时中介变量 tmp var tmp; // 将 n1 的值备份给 tmp tmp = n1; // 把 n2 赋值给 n1 n1 = n2; // 把备份的 n1 赋值给 n2 n2 = tmp; console.log(n1, n2); 方法02 - 不使用第三个变量 var n1 = 5; var n2 = 6; // 利用两

Java 实现常见内排序

一.内排序 1.排序基本概念 (1)什么是排序? 排序指将一个数据元素集合或者序列 按照某种规则 重新排列成一个 有序的集合或者序列.分为内排序.外排序.排序算法的好坏直接影响程序的执行速度以及存储空间的占有量. (2)什么是内排序?外排序? 内排序:指待排序的序列完全存放在内存中所进行的排序过程(不适合大量数据排序). 外排序:指大数据的排序,待排序的数据无法一次性读取到内存中,内存与外存需进行多次数据交换,以达到排序的目的. (3)什么是稳定排序? 稳定排序指的是 相等的数据经过某种排序算法

汇编语言-冒泡排序

数组排序 1. 题目: 将一个数组的所有元素排序后输出 2.要求:给定一个数组,数组包含10个整型元素,将其按照从小到大的顺序排列后输出,要求排序的算法用子程序来实现.例如,输入的数组元素为1,3,-9,5,12,0,-3,-12,24,34,那么输出是:-12,-9,-3,0,1,3,5,12,24,34. 1 ; Example assembly language program -- 2 ; Author: karllen 3 ; Date: revised 05/2014 4 5 .38

利用冒泡排序实现一串字符串从小到大的排序

实现B/S架构,输入一串字母或数字,将它们按从小到大排序,排序算法在服务端实现. 以下是实现: Test.java import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.ser

汇编语言学习系列 冒泡排序实现

假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位). #include<stdio.h> void swap(int *p, int *q) { int tmp = *p; *p = *q; *q = tmp; } int main() { int a[] = {3, 0, 5, 1, 4, 6, 2, 9, 8, 7}; int i ,j; for(i = 0; i < 10; i++) { for(j = i + 1; j < 10;j++) { if