这里简单介绍汇编中是如何进行冒泡排序的,首先先回顾C语言中的冒泡排序知识及算法,再讲解汇编实现的过程,更好的巩固和联系了编程的思想。

一. C语言——冒泡排序

冒泡排序的基本概念: 依次比较相邻的两个数,将小数放在前面,大数放在后面。每完成一遍查找都会找到一个最大数,直至排序结束.

由上表可见每轮排序都能确定一个最大数,直至排序结束,它相对应的C语言代码如下:其中j参数设置为N-i-1简化了排序的复杂度,也可以是N-1.

二.汇编——冒泡排序

相对应的汇编冒泡排序如下图所示:

DATAS SEGMENTA          DW       0,15,70,30,32,89,12,12,34,4,38,23,45,13,43,24,54,24,54,1Count      EQU      ($-A)/2  ;数组中元素的个数(字节)
DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AX
;-------------------------------------------------------------------------
;冒泡排序核心算法 A排序   MOV CX,Count-1      ;外层循环执行n-1次
I10:XOR SI,SI           ;异或清零XOR DI,DI        I20:MOV AX,A[SI]MOV BX,A[SI+2]CMP AX,BX;比较AX和BX大小:AX<BX(小于转移)跳转I30,否则交换两数JL  I30MOV A[SI],BXMOV A[SI+2],AX     ;交换位置I30:ADD SI,2           ;SI加2:移动一个数字位置INC DI             ;DI加1CMP DI,CX           ;比较CX和DI大小:DI<CX转移,CX为外层循环总数n-1JB  I20Loop I10           ;循环调至I10,Loop循环CX执行一次减1
;-------------------------------------------------------------------------  MOV AH,4CHINT 21H
CODES ENDSEND START

其中先在数据段中定义一个数组A并存储20个数,而Count=($-A)/2存储数组中元素的个数,其中$表示当前位置,即数组A中最后一个数位置减去A的起始位置,由于A是DW(2字节),所以除以2转换为数组个数:20.
依次比较A中相邻两个数,存储至AX=A[SI]和BX=A[SI+2]中,比较成立即交换否则跳转至SI加2,继续比较下一个相邻两数。
同时CX中记录外层循环次数Count-1.利用Loop循环,Loop每循环依次默认的CX寄存器会减1,直至为0,循环停止。DI中记录排序好的个数,每次加1与CX比较,直至排序结束。
输出如下图结果,这里就省略了输出函数。只是想讲讲冒泡排序的过程,见谅!!!

希望能帮助大家更好的理解C语言与汇编中的冒泡排序的联系与思想,谢谢!不足之处望读者谅解。By:Eastmount

汇编排序知识之冒泡排序相关推荐

  1. 十大经典排序算法之冒泡排序及其优化

    一.冒泡排序 1.冒泡排序算法的原理如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大 ...

  2. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

    冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...

  3. Java排序算法:冒泡排序

    Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...

  4. python代码实现鸡尾酒排序(双向冒泡排序)

    python代码实现鸡尾酒排序(双向冒泡排序) 鸡尾酒排序是冒泡排序的一种变形.它与冒泡排序的不同之处在于排序时是以双向在序列中进行排序. 鸡尾酒排序的原理跟冒泡排序差不多,只不过冒泡排序每一轮的比较 ...

  5. 排序算法:冒泡排序、插入排序、选择排序、希尔排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...

  6. Golang 汇编入门知识总结

    作者:ivansli,腾讯 IEG 运营开发工程师 在深入学习 Golang 的 runtime 和标准库实现的时候发现,如果对 Golang 汇编没有一定了解的话,很难深入了解其底层实现机制.在这里 ...

  7. js时间-价格-排序案例____冒泡排序实例

    js 时间-价格-排序,静态页面排序案例 冒泡排序实例 在项目中用到的一个例子,分享一下. var sort = { sortdata : '',      //排序之前必须先填充原始数据 //来源我 ...

  8. c语言简短的泡沫排序法编程,冒泡排序--简单(c语言)

    // //  main.cpp //  bubble // //  Created by duanqibo on 2019/7/17. //  Copyright © 2019年 duanqibo. ...

  9. 排序系列之---冒泡排序

    排序系列之---冒泡排序        -.- 冒泡排序的基本思想就是把数组中值最大的元素放到数组的右边,一个一个放. 比如数组:3,4,2,7,5,1,9,0 首先它从该数组中找到值最大的数,然后放 ...

最新文章

  1. 字节流代码 java_java代码字符字节流
  2. 基于颜色特征的图像匹配MATLAB,基于颜色特征的图像检索系统 这是个MATLAB程序 - 下载 - 搜珍网...
  3. 并发编程之 Java 内存模型 + volatile 关键字 + Happen-Before 规则
  4. HTML-参考手册: URL 编码
  5. 7_15_2013 E: 机器人II
  6. 消除代码中的坏味道,编写高质量代码
  7. Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站
  8. 死磕 java同步系列之开篇
  9. oracle触发器无效且,oracle创建触发器成功但是插值失败
  10. django-演练-英雄表的添加操作
  11. 一起谈.NET技术,Silverlight 游戏开发小技巧:实现街霸4的选人界面
  12. iPhone企业应用实例分析之一:系统介绍和需求及主要用例
  13. 排队论(Queuing Theory)
  14. Origin常见使用问题集锦
  15. Win10硬盘安装器(WinNTSetup 64位) v3.9.4 中文绿色版
  16. 自定义Spring Boot项目启动Logo
  17. CSDN实训 - 个人博客界面制作
  18. [Vue warn]: Unknown custom element: <helptext> - did you register the component correctly? For recu
  19. 兆芯国产电脑如何安装Windows+麒麟kylin双系统
  20. 新加坡设自动巡逻机器人,助力城市精细化治理

热门文章

  1. Nagios远程监控软件的安装与配置详解
  2. linux下安装DB2的详细步骤
  3. boost实用工具:assign库了解学习
  4. [2017.3.23]Miller-Rabin
  5. Spring配置汇总
  6. jquey(判断文本框输入的网址链接是否符合规则)
  7. 解决打不开 RSA 密钥容器 即:加密web.config中的内容
  8. android activity 回调函数,Android Activity的生命周期
  9. python3 面向对象详解_Python3面向对象
  10. 【数据结构总结】第一章:数据结构基本概念