📄 排序.asm
字号:
DSEG SEGMENT ;数据段:在此处添加程序所需的数据
NUMBER DW 20 DUP (?)
COUNT DW ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG
MAIN PROC FAR ;主程序入口
MOV AX, DSEG
MOV DS, AX
CALL INPUT ;从键盘输入一组十进制数(每个数不超过3个字符),存于数组number中
CALL SORT ;将该组数按升序排序
CALL DISP ;将结果送显示器显示,按任意键退出
MOV AH,1
INT 21H ;程序结束,返回到操作系统系统
MOV AX, 4C00H
INT 21H
MAIN ENDP
INPUT PROC
LEA SI,NUMBER
NEXT: MOV BX, 0
MOV CX,3
NEWCHAR: MOV AH, 1 ;键盘输入,每个数据以回车结束
INT 21H
CMP AL,20H ;全部数据以空格结束
JZ TJ
SUB AL, 30H
JL EXIT ; <0退出
CMP AL, 9
JG EXIT ; >9退出
CBW
XCHG AX, BX
MOV CX, 10
MUL CX
XCHG AX, BX
ADD BX, AX
LOOP NEWCHAR
EXIT:
CALL CRLF
INC COUNT
MOV [SI],BX
ADD SI,2
JMP NEXT
TJ: RET
INPUT ENDP
SORT PROC
MOV CX,COUNT
DEC CX
LOOP1: MOV DI,CX
MOV BX,0
LOOP2: MOV AX,NUMBER[BX]
CMP AX,NUMBER[BX+2]
JLE CONTINUE
XCHG AX,NUMBER[BX+2]
MOV NUMBER[BX],AX
CONTINUE: ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
RET
SORT ENDP
DISP PROC
MOV CX,COUNT
LEA SI,NUMBER
REPEAT1:
MOV BX,[SI]
MOV DI,100D
CALL DEC_DIV
MOV DI,10D
CALL DEC_DIV
MOV DI,1D
CALL DEC_DIV
CALL CRLF
ADD SI,2
LOOP REPEAT1
RET
DISP ENDP
DEC_DIV PROC NEAR
MOV AX,BX
MOV DX,0
DIV DI
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
RET
DEC_DIV ENDP
CRLF PROC NEAR
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
RET
CRLF ENDP
CSEG ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -