冒泡排序:
假设有n个数字,第一个数字与第二个数字相比较,如果第一个数字大于第二个就交换;接着第二个数字与第三个数字相比较,如果第二个数字大于第三个就交换...一直到第n-1个数字与第n个数字相比较,第一趟比较完成。
每一趟比较完成后可以确定一个数字。第一趟可以确定第n个数字,需要比较n-1次;第二趟可以确定第n-1个数字,需要比较n-2次...
一直重复此步骤直到完成排序。
分段代码:
一、定义宏-两数交换
JH MACRO
PUSH AX
MOV AL,[SI]
MOV AH,[DI]
MOV [SI],AH
MOV [DI],AL
POP AX
ENDM
二、定义宏-排序
PX MACRO
LOCAL PX1,PX2,PX3
PUSH SI
PUSH DI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
DEC CX
MOV BX,CX
PX3:MOV SI,DX
MOV DI,SI
INC DI
MOV CX,BX
PX2:MOV AL,[SI]
CMP AL,[DI]
JA PX1
JH
PX1:INC SI
INC DI
LOOP PX2
DEC BX
JNZ PX3
POP DX
POP CX
POP BX
POP AX
POP DI
POP SI
ENDM
三、定义宏-回车换行
HCHH MACRO
PUSH DX
PUSH AX
MOV AH,2
MOV DL,10
INT 21H
MOV DL,13
INT 21H
POP AX
POP DX
ENDM
四、子程序-两位数输出
SCLWS PROC;两位数输出
PUSH AX
PUSH BX
PUSH CX
MOV BL,10
MOV AH,0
DIV BL;AX/BL=AL...AH
ADD AX,3030H
MOV CX,AX
MOV AH,2
MOV DL,CL
INT 21H
MOV AH,2
MOV DL,CH
INT 21H
POP CX
POP BX
POP AX
RET
SCLWS ENDP
五、数据段
DATAS SEGMENT
STR1 DB 100,101 DUP ("$")
STR2 DB 100 DUP (?)
STR3 DB "Please input some numbers:$"
STR4 DB "After Bubble Sort:$"
STR5 DB "Output length is:$"
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
六、代码段
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STR3
MOV AH,9
INT 21H
LEA DX,STR1
MOV AH,10
INT 21H
PUSH DX
HCHH
LEA DX,STR4
MOV AH,9
INT 21H
POP DX
ADD DX,2
MOV CH,0
MOV CL,STR1+1
PX
MOV AH,9
INT 21H
HCHH
LEA DX,STR5
MOV AH,9
INT 21H
LEA BX,STR1+1
MOV DX,[BX]
MOV DH,0
MOV AH,2
MOV AL,DL
CALL SCLWS
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
全部代码:
JH MACRO
PUSH AX
MOV AL,[SI]
MOV AH,[DI]
MOV [SI],AH
MOV [DI],AL
POP AX
ENDM
PX MACRO
LOCAL PX1,PX2,PX3
PUSH SI
PUSH DI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
DEC CX
MOV BX,CX
PX3:MOV SI,DX
MOV DI,SI
INC DI
MOV CX,BX
PX2:MOV AL,[SI]
CMP AL,[DI]
JA PX1
JH
PX1:INC SI
INC DI
LOOP PX2
DEC BX
JNZ PX3
POP DX
POP CX
POP BX
POP AX
POP DI
POP SI
ENDM
HCHH MACRO
PUSH DX
PUSH AX
MOV AH,2
MOV DL,10
INT 21H
MOV DL,13
INT 21H
POP AX
POP DX
ENDM
DATAS SEGMENT
STR1 DB 100,101 DUP ("$")
STR2 DB 100 DUP (?)
STR3 DB "Please input some numbers:$"
STR4 DB "After Bubble Sort:$"
STR5 DB "Output length is:$"
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STR3
MOV AH,9
INT 21H
LEA DX,STR1
MOV AH,10
INT 21H
PUSH DX
HCHH
LEA DX,STR4
MOV AH,9
INT 21H
POP DX
ADD DX,2
MOV CH,0
MOV CL,STR1+1
PX
MOV AH,9
INT 21H
HCHH
LEA DX,STR5
MOV AH,9
INT 21H
LEA BX,STR1+1
MOV DX,[BX]
MOV DH,0
MOV AH,2
MOV AL,DL
CALL SCLWS
;此处输入代码段代码
MOV AH,4CH
INT 21H
SCLWS PROC;两位数输出
PUSH AX
PUSH BX
PUSH CX
MOV BL,10
MOV AH,0
DIV BL;AX/BL=AL...AH
ADD AX,3030H
MOV CX,AX
MOV AH,2
MOV DL,CL
INT 21H
MOV AH,2
MOV DL,CH
INT 21H
POP CX
POP BX
POP AX
RET
SCLWS ENDP
CODES ENDS
END START
运行截图: