📄 sort.asm
字号:
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BOTTOM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT PARA
TABLE_LEN DW 16
TABLE DW 200,300,400,10,20,0,1,8
DW 41H,40,42H,50,60,0FFFFH,2,3
RESULT DB 5 DUP(?),20H,'$' ;存十进制数结果,加空格
NEW_LINE DB 0DH,0AH,'$' ;回车换行
DATA1 ENDS
CODE1 SEGMENT PARA
ASSUME CS:CODE1,DS:DATA1,SS:STACK1
MAIN PROC FAR
MOV AX,STACK1 ;初始化SS,SP,DS
MOV SS,AX
MOV SP,STACK_BOTTOM
MOV AX,DATA1
MOV DS,AX
;PART1:将未排序的表显示出来
PART1: MOV CX,TABLE_LEN
MOV SI,OFFSET TABLE
LP1: PUSH CX ;保存外循环计数
MOV CX,5
MOV DI,OFFSET RESULT+4
MOV AX,[SI]
MOV BX,10
LP1_1: XOR DX,DX
DIV BX
OR DL,30H
MOV [DI],DL
DEC DI
LOOP LP1_1 ;内循环
;显示一个数及一个空格
MOV DX,OFFSET RESULT
MOV AH,9
INT 21H
INC SI ;求下一个数
INC SI
POP CX ;恢复外循环计数
LOOP LP1 ;外循环
;显示回车换行
MOV DX,OFFSET NEW_LINE
MOV AH,9
INT 21H
;PART2:排序
PART2: MOV CX,TABLE_LEN
DEC CX ;第一次循环长度
LP2: MOV BX,1 ;外循环的控制条件
MOV SI,OFFSET TABLE
PUSH CX ;保存循环长度
;内循环
LP2_1: MOV AX,[SI]
CMP AX,[SI+2]
JBE CONTINUE
XCHG AX,[SI+2]
MOV [SI],AX
MOV BX,0
CONTINUE: ADD SI,2
LOOP LP2_1
POP CX
DEC CX ;内循环次数减1
CMP BX,1 ;外循环控制条件
JZ PART3
JMP SHORT LP2
;PART3:将排好序的表显示出来
PART3: MOV CX,TABLE_LEN
MOV SI,OFFSET TABLE
LP3: PUSH CX
MOV CX,5
MOV DI,OFFSET RESULT+4
MOV AX,[SI]
MOV BX,10
LP3_1: XOR DX,DX
DIV BX
OR DL,30H
MOV [DI],DL
DEC DI
LOOP LP3_1
MOV DX,OFFSET RESULT
MOV AH,9
INT 21H
INC SI
INC SI
POP CX
LOOP LP3
MOV DX,OFFSET NEW_LINE
MOV AH,9
INT 21H
;返回DOS
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
CODE1 ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -