;改进的冒泡排序
;算法思想:循环走一趟,如果没有交换操作,说明数组已经有序
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
汇编源码学习6-改进的冒泡排序
最新推荐文章于 2021-02-21 21:03:36 发布