汇编排序知识之冒泡排序
这里简单介绍汇编中是如何进行冒泡排序的,首先先回顾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.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大 ...
- 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)
冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...
- Java排序算法:冒泡排序
Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...
- python代码实现鸡尾酒排序(双向冒泡排序)
python代码实现鸡尾酒排序(双向冒泡排序) 鸡尾酒排序是冒泡排序的一种变形.它与冒泡排序的不同之处在于排序时是以双向在序列中进行排序. 鸡尾酒排序的原理跟冒泡排序差不多,只不过冒泡排序每一轮的比较 ...
- 排序算法:冒泡排序、插入排序、选择排序、希尔排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...
- Golang 汇编入门知识总结
作者:ivansli,腾讯 IEG 运营开发工程师 在深入学习 Golang 的 runtime 和标准库实现的时候发现,如果对 Golang 汇编没有一定了解的话,很难深入了解其底层实现机制.在这里 ...
- js时间-价格-排序案例____冒泡排序实例
js 时间-价格-排序,静态页面排序案例 冒泡排序实例 在项目中用到的一个例子,分享一下. var sort = { sortdata : '', //排序之前必须先填充原始数据 //来源我 ...
- c语言简短的泡沫排序法编程,冒泡排序--简单(c语言)
// // main.cpp // bubble // // Created by duanqibo on 2019/7/17. // Copyright © 2019年 duanqibo. ...
- 排序系列之---冒泡排序
排序系列之---冒泡排序 -.- 冒泡排序的基本思想就是把数组中值最大的元素放到数组的右边,一个一个放. 比如数组:3,4,2,7,5,1,9,0 首先它从该数组中找到值最大的数,然后放 ...
最新文章
- 字节流代码 java_java代码字符字节流
- 基于颜色特征的图像匹配MATLAB,基于颜色特征的图像检索系统 这是个MATLAB程序 - 下载 - 搜珍网...
- 并发编程之 Java 内存模型 + volatile 关键字 + Happen-Before 规则
- HTML-参考手册: URL 编码
- 7_15_2013 E: 机器人II
- 消除代码中的坏味道,编写高质量代码
- Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站
- 死磕 java同步系列之开篇
- oracle触发器无效且,oracle创建触发器成功但是插值失败
- django-演练-英雄表的添加操作
- 一起谈.NET技术,Silverlight 游戏开发小技巧:实现街霸4的选人界面
- iPhone企业应用实例分析之一:系统介绍和需求及主要用例
- 排队论(Queuing Theory)
- Origin常见使用问题集锦
- Win10硬盘安装器(WinNTSetup 64位) v3.9.4 中文绿色版
- 自定义Spring Boot项目启动Logo
- CSDN实训 - 个人博客界面制作
- [Vue warn]: Unknown custom element: <helptext> - did you register the component correctly? For recu
- 兆芯国产电脑如何安装Windows+麒麟kylin双系统
- 新加坡设自动巡逻机器人,助力城市精细化治理
热门文章
- Nagios远程监控软件的安装与配置详解
- linux下安装DB2的详细步骤
- boost实用工具:assign库了解学习
- [2017.3.23]Miller-Rabin
- Spring配置汇总
- jquey(判断文本框输入的网址链接是否符合规则)
- 解决打不开 RSA 密钥容器 即:加密web.config中的内容
- android activity 回调函数,Android Activity的生命周期
- python3 面向对象详解_Python3面向对象
- 【数据结构总结】第一章:数据结构基本概念