答案:;动态输入五个数,冒泡排序,输出
DATAS SEGMENT
MESS1 DB 'Pealse input five numbers:$'
MESS2 DB 0AH,0DH,'Frome minor to maximum:$'
X DW 5 DUP(?)
Y DW ?
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MESS1
INT 21H
MOV CX,5 ;可输入五个数
LEA SI,X
LET0:
MOV BX,0
LET1: ;输入十进制数,空格结束一个数的输入,保存到BX
MOV AH,1
INT 21H
SUB AL,30H
JL LET2
CMP AL,9H
JG LET2
CBW
XCHG AX,BX
MOV DX,10
MUL DX
XCHG AX,BX
ADD BX,AX
JMP LET1
MOV AH,4CH
INT 21H
LET2:
MOV [SI],BX ;把BX中的数存入X存储单元
ADD SI,2
LOOP LET0
MOV CX,5 ;冒泡排序
DEC CX
LOOP1:
PUSH CX ;保存外循环次数
LEA SI,X
LOOP2:
MOV AX,[SI]
CMP AX,[SI+2]
JLE NEXT ;升序
XCHG AX,[SI+2] ;交换
MOV [SI],AX
NEXT:ADD SI,2 ;SI指向下一个数
LOOP LOOP2
POP CX
LOOP LOOP1
MOV AH,9 ;输出排好序的十进制数
MOV DX,OFFSET MESS2
INT 21H
LEA SI,X
MOV BX,0
MOV CX,5
LET3:
MOV BX,[SI] ;取出X中的数存入BX中
MOV Y,CX ;保护CX,保证循环五次,输出五个数字
MOV AX,BX
MOV CX,0
MOV BX,10
LET4:
MOV DX,0
INC CX
IDIV BX ;商存入AX,余数存入DX
PUSH DX ;保存余数
CMP AX,0
JNZ LET4
LET5:
POP AX ;取出余数,放入AX
ADD AX,0030H
MOV DL,AL
MOV AH,2
INT 21H
LOOP LET5
MOV AH,2
MOV DL,' '
INT 21H
ADD SI,2
MOV CX,Y
LOOP LET3
MOV AH,4CH
INT 21H
CODES ENDS
END START
上一个:在汇编语言程序中,用于指示汇编程序如何汇编的指令是什么?
下一个:基于汇编语言的万年历程序