当前位置:文档之家› 汇编语言实现十个数的排序

汇编语言实现十个数的排序

DATAS SEGMENT
DATA0 DB'Please input a numbers (0-65535):','$' DATA1 DB' over flow input again:','$' DATA2 DB'The num you have put is:',0ah,0dh,'$' DATA3 DB'After exchange the num is:',0ah,0dh,'$' DATA4 DB' ','$'
DATA DW 10 DUP(?)
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?);此处输入堆栈段代码STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS ;/****************************************/ ;-----------程序开始------------
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,0
MOV CX,10
;----------循环输入------------
L:
CALL INPUT
ADD SI,2
CALL NEWLINE
LOOP L
MOV DX,OFFSET DATA2
MOV AH,9
INT 21H
;-------输入后显示----------
MOV CX,10
MOV DI,0
AGAIN:
CALL PRINT
CALL SPACE
ADD DI,2
LOOP AGAIN
;----------排序-------------
MOV CX,9
MOV DI,0
LOOP0:
CALL SORT
ADD DI,2
LOOP LOOP0
CALL NEWLINE
MOV DX,OFFSET DATA3
MOV AH,9
INT 21H
;----------交换后显示-------------
MOV CX,10
MOV DI,0
AGAIN0:
CALL PRINT
CALL SPACE
ADD DI,2
LOOP AGAIN0
;----------返回系统--------------
EXIT:
MOV AH,4CH
INT 21H
;/**************************************/ ;------------输入函数--------
INPUT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
;----------提示信息----------
MOV DX,OFFSET DATA0
MOV AH,9
INT 21H
MOV BX,0 ;BX存放十进制数
CLC
MOV DX,0
L0:
;----------输入数字----------
MOV AH,1
INT 21H
CMP AL,0DH
JE L1
SUB AL,30H
JL NEXT1
CMP AL,9
JG NEXT1
;---------转换成十进制数-------
MOV AH,0
XCHG AX,BX
MOV CX,10
MUL CX
ADD AX,BX
JC NEXT1
XCHG AX,BX
JMP L0
NEXT1:
MOV DX,0
MOV BX,0
CALL NEWLINE
CALL ERROR
JMP L0
L1:
CMP DX,0
JNZ NEXT1
MOV DATA[SI],BX
MOV DX,0
POP DX
POP CX
POP BX
POP AX
RET
INPUT ENDP
;/*****************************/ ;-------回车换行--------
NEWLINE PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
;/*********************************/
;--------空格-------
SPACE PROC NEAR
PUSH AX
PUSH DX
MOV DX,OFFSET DATA4
MOV AH,9
INT 21H
POP DX
POP AX
RET
SPACE ENDP
;/**************************************/ ;----------错误提示----------------
ERROR PROC NEAR
PUSH AX
PUSH DX
MOV DX,OFFSET DATA1
MOV AH,9
INT 21H
POP DX
POP AX
RET
ERROR ENDP
;/************************************/ ;--------冒泡排序子程序-----------
SORT PROC NEAR
PUSH BX
PUSH DX
LOOP1:
ADD SI,2
MOV BX,DATA[DI]
CMP BX,DATA[SI]
JA CHANGE
JMP NEXT
CHANGE:
MOV DX,DATA[SI]
MOV DATA[DI],DX
MOV DATA[SI],BX
NEXT:
CMP SI,18
JL LOOP1
POP DX
POP BX
RET
SORT ENDP
;/***********************************/ ;-----------显示函数--------
PRINT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,0
MOV BX,10
MOV AX,DATA[DI]
LAST:
MOV DX,0
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ LAST
AGE:
POP DX
OR DX,30H
MOV AH,2
INT 21H
LOOP AGE
POP DX
POP CX
POP BX
POP AX
RET
PRINT ENDP CODES ENDS
END START。

相关主题