📄 rjexp13.asm
字号:
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
SORTNUM EQU 50
MESS DB '1000:0起50个数由小到大排列如下:',0DH,0AH,'$'
DATA ENDS
STACK SEGMENT
STA DW 32 DUP(?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP ;初始化
MOV SI,0 ;偏移量
MOV AX,1000H ;段址
MOV DS,AX
MOV CX,SORTNUM ;排序数的长度
DEC CX ;外循环次数
XOR BX,BX ;偏移指针清0
III: MOV AL,[SI+BX] ;取数
MOV AH,BL ;AH为交换单元指针
PUSH CX
SUB CX,BX
DEC CX ;计算内循环次数
MOV DX,BX ;初始化内循环控制变量
JJJ: INC DX ;内循环控制变量值增1
PUSH BX ;入栈保存
MOV BX,DX
CMP AL,[SI+BX]
JBE UUU ;若AL较小,则不必交换,转UUU
MOV AL,[SI+BX]
MOV AH,DL ;置AL为新的较小值并修改AH指针
UUU: POP BX
LOOP JJJ ;内循环
MOV CL,[SI+BX]
MOV [SI+BX],AL
MOV DL,AH
PUSH BX
MOV BX,DX
MOV [SI+BX],CL
POP BX ;交换
INC BX ;偏移量加1
POP CX
LOOP III ;外循环
PUSH DS
MOV AX,DATA
MOV DS,AX ;重置DS使其指向DATA段
MOV AH,09H
MOV DX,OFFSET MESS
INT 21H ;显示SORT OK 信息
POP DS
MOV CX,SORTNUM
VVV: MOV AL,[SI]
CALL DISP1
PUSH AX
PUSH DX
MOV DL,20H
MOV AH,02H
INT 21H
POP DX
POP AX
INC SI
LOOP VVV ;并排序后数显示出来
MOV AX,4C00H
INT 21H ;返回DOS
DISP1 PROC NEAR ;显示子程序,显示AL寄存器的内容
PUSH CX
MOV BL,AL
MOV DL,BL
MOV CL,04
ROL DL,CL
AND DL,0FH
CALL DISPL
MOV DL,BL
AND DL,0FH
CALL DISPL
POP CX
RET
DISP1 ENDP
DISPL PROC NEAR
ADD DL,30H
CMP DL,3AH
JB DDD
ADD DL,27H
DDD: MOV AH,02H
INT 21H
RET
DISPL ENDP ;参见数值显示实验程序清单
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -