汇编排序知识之冒泡排序

简介:

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

一. C语言——冒泡排序

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

 

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

二.汇编——冒泡排序

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

DATAS SEGMENT
    A		   DW		0,15,70,30,32,89,12,12,34,4,38,23,45,13,43,24,54,24,54,1
    Count      EQU		($-A)/2  ;数组中元素的个数(字节)
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    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  I30
	MOV A[SI],BX
	MOV A[SI+2],AX     ;交换位置
	
I30:
	ADD SI,2           ;SI加2:移动一个数字位置
	INC DI             ;DI加1
	CMP DI,CX           
	
	;比较CX和DI大小:DI<CX转移,CX为外层循环总数n-1
	JB  I20
	Loop I10           ;循环调至I10,Loop循环CX执行一次减1	
;-------------------------------------------------------------------------	
    MOV AH,4CH
    INT 21H
CODES 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

目录
相关文章
|
7月前
|
C语言
【汇编语言实战】冒泡排序
【汇编语言实战】冒泡排序
62 1
【汇编语言实战】冒泡排序
|
存储
汇编实现冒泡排序
本文主要介绍了冒泡排序的汇编实现
369 0
汇编实现冒泡排序
|
C语言 人工智能 搜索推荐
汇编程序:冒泡排序
  汇编语言能实现冒泡排序等排序算法吧?当然可以,排序可不是什么复杂的东东。就在第7周,给大家补充一下cmp、jxxx、xchg指令,下面的冒泡就出来了。   可以对照着附后的C语言排序实现理解。   assume cs:cseg, ds:dseg, ss:sseg sseg segment stack dw 10H dup (?) sseg ends dseg
1767 0
|
算法 搜索推荐 C++
内嵌汇编与C/C++实现的冒泡排序,快速排序算法排序500W个数据对比
内嵌汇编是微软为了提高程序的直接操作硬件能力,以及实现大任务程序效率的提高,而嵌入在VC中的,他不依赖于汇编器对内嵌汇编代码进行汇编,这些内嵌汇编代码由C编译器内部实现,可以使程序好像自陷到汇编状态一样。
1097 0
|
7月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
235 2
|
2月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
2月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
173 0
|
7月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
740 0
几组汇编指令的比较
几组汇编指令的比较
|
5月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表