主题:排序
yongde120
[专家分:0] 发布于 2007-12-18 23:00:00
要求输入10个自然数,无序的,先在屏幕上显示出来,按然后一下m就按从大到小排列;按一下l就按从小到大排列。结果也要显示出来。在下初学汇编,请高手编一个小程序出来,好让我参考参考,谢谢!!!!
沙发
newjay03 [专家分:10] 发布于 2007-12-22 13:52:00
给你一个冒泡排序的程序修改一下就可以实现你的要求了
DATA SEGMENT
BIN DW 20 DUP(?),0DH,0AH,'$'
SUM DB 120 DUP(?),0DH,0AH,'$'
P1 DB 'INPUT THE NUMBER',0DH,0AH,'$'
P2 DB 'FROM SMALL TO BIG',0DH,0AH,'$'
Z DB 0
DATA ENDS
STACK SEGMENT
NUM3 DW 20 DUP(?)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,STACK
MOV SS,AX
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET P1
MOV AH,9
INT 21H
MOV BX,0
MOV CX,0
MOV SI,0
INP0:MOV Z,0
INP:
MOV AH,01H
INT 21H
CMP AL,20H
JZ WRITE10
CMP AL,0DH
JZ WRITE20
CMP AL,'+'
JZ INP0
CMP AL,'-'
JZ INP1
SUB AL,30H
MOV CL,AL
MOV CH,0
MOV AX,BX
MOV BX,0AH
MUL BX
MOV BX,AX
ADD BX,CX
JMP INP
INP1: MOV Z,1
JMP INP
WRITE10:
CMP Z,1
JNZ WRITE1
NEG BX
WRITE1:
MOV [BIN+SI],BX
ADD SI,2
MOV BX,0
JMP INP
WRITE20:
CMP Z,1
JNZ WRITE2
NEG BX
WRITE2:
MOV [BIN+SI],BX
ADD SI,2
MOV DL,0AH
MOV AH,02H
INT 21H
CHANGE:
XOR BX,BX
MOV CX,20
DEC CX
L1:
PUSH CX
L2:
MOV AX,BIN[BX]
CMP AX,BIN[BX+2]
JLE CONT1
XCHG AX,BIN[BX+2]
MOV BIN[BX],AX
CONT1:
ADD BX,2
LOOP L2
POP CX
MOV BX,0
LOOP L1
MOV AH,9
MOV DX,OFFSET P2
INT 21H
MOV SI,0
MOV DI,0
MOV CX,20
L3: MOV SUM[DI],'+'
MOV AX,BIN[SI]
CMP AX,0
JGE L4
NEG AX
MOV SUM[DI],'-'
L4: CWD
MOV BX,10000
DIV BX
ADD AL,30h
INC DI
MOV SUM[DI],AL
MOV AX,DX
CWD
MOV BX,1000
DIV BX
ADD AL,30h
INC DI
MOV SUM[DI],AL
MOV AX,DX
MOV BL,100
DIV BL
ADD AL,30h
INC DI
MOV SUM[DI],AL
MOV AL,AH
CBW
MOV BL,10
DIV BL
ADD AL,30h
INC DI
MOV SUM[DI],AL
ADD AH,30h
INC DI
MOV SUM[DI],AH
ADD SI,2
INC DI
LOOP L3
PRINT :
MOV DX,OFFSET SUM
MOV AH,09h
INT 21h
RET
MAIN ENDP
CODE ENDS
END START