汇编排序知识之冒泡排序
来源:互联网 发布:windows apache php7 编辑:程序博客网 时间:2024/06/02 01:40
这里简单介绍汇编中是如何进行冒泡排序的,首先先回顾C语言中的冒泡排序知识及算法,再讲解汇编实现的过程,更好的巩固和联系了编程的思想。
一. C语言——冒泡排序
冒泡排序的基本概念: 依次比较相邻的两个数,将小数放在前面,大数放在后面。每完成一遍查找都会找到一个最大数,直至排序结束.
由上表可见每轮排序都能确定一个最大数,直至排序结束,它相对应的C语言代码如下:其中j参数设置为N-i-1简化了排序的复杂度,也可以是N-1.
二.汇编——冒泡排序
相对应的汇编冒泡排序如下图所示:
DATAS SEGMENT A DW0,15,70,30,32,89,12,12,34,4,38,23,45,13,43,24,54,24,54,1 Count EQU($-A)/2 ;数组中元素的个数(字节)DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV 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,4CH INT 21HCODES ENDS END 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
- 汇编排序知识之冒泡排序
- 【8086汇编】基础排序之冒泡排序
- 简单反汇编之冒泡排序
- 冒泡排序 汇编
- 汇编冒泡排序
- 汇编--冒泡排序
- 汇编实现冒泡排序
- 汇编实现冒泡排序
- 【汇编】 冒泡排序。。。
- 汇编冒泡排序
- 汇编---冒泡排序
- 汇编实现冒泡排序
- 汇编写冒泡排序
- MIPS汇编:冒泡排序
- 汇编冒泡排序
- 汇编-冒泡排序
- 汇编冒泡排序
- ARM汇编冒泡排序之c语言调用汇编
- CDN(内容分发网络)技术原理
- Datepicker-for-Bootstrap 日期选择插件
- Struts2文件上传大小限制
- HDU1592(递推+大数处理)
- 给图的顶点着色
- 汇编排序知识之冒泡排序
- 使用gdb调试多线程程序总结
- C++中struct和class的区别
- hadoop学习笔记(五) java heap space报错
- 简单的暴力搜索
- java------关键字使用
- nodejs json格式转换
- Struts2文件类型规则列表
- ORACLE X$表命名约定