您的位置:首页 > 其它

汇编源码学习6-改进的冒泡排序

2011-12-18 17:07 288 查看
;改进的冒泡排序
;算法思想:循环走一趟,如果没有交换操作,说明数组已经有序
ASSUME	CS:code1,SS:stack1,DS:data1
data1	SEGMENT
array	DW	1,8,9,2,5,4,7,6,3,10
flag	DB	0	;用于改进冒泡排序
data1	ENDS
;
stack1	SEGMENT	STACK
DB		256	DUP(?)
stack1	ENDS
;
code1	SEGMENT
start:	MOV		AX,data1
MOV 	DS,AX
;
MOV		CH,9
loop2:	MOV 	CL,CH	;CH记录外循环次数,CL记录内循环次数
LEA		BX,array
SUB		BX,2
MOV		AL,0
MOV		[flag],AL	;初始化flag
loop1:	ADD		BX,2
MOV 	DI,BX	;BX记录前一个数的地址,DI记录后一个数的地址
ADD		DI,2
MOV		AX,[DI]	;AX作临时变量
;如果用字变量,这里就不能用用AX,应该用AL
;must be index or base register,这里不能用DX
CMP		[BX],AX
JNA		next1
;use stack to exchange 2 variables
;SP一次只能移动2或4个字节,不能操作一个字
PUSH	[BX]
PUSH	[DI]
POP		[BX]
POP		[DI]
MOV		AL,1
MOV		[flag],AL	;有交换
next1:	DEC		CL
JNZ		loop1
MOV		AL,[flag]
CMP		AL,0
JE		exit	;如果flag == 0,说明本趟没有交换,这说明数组已有序
DEC		CH
JNZ		loop2
exit:	MOV		AH,4CH
INT		21H
code1	ENDS
END	start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编 exchange 算法