📄 sort.txt
字号:
macro ctrl ;输出回车换行
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
endm
macro fuhao ;输出负号
push dx
mov dl,2dh
mov ah,2
int 21h
pop dx
endm
macro dplay msg ;输出提示信息
lea dx,msg
mov ah,9
int 21h
endm
macro paixu count,array,oper ;排序宏
local outloop,inloop,ok
mov cx,count
dec cx
outloop:
mov dx,cx
lea bx,array
inloop:
mov ax,word ptr[bx]
cmp ax,word ptr[bx+2]
oper ok
xchg ax,word ptr[bx+2]
xchg ax,word ptr[bx]
ok: inc bx
inc bx
dec dx
cmp dx,0
jnz inloop
loop outloop
endm
.model small
.data
count dw ?
array dw 20 dup(?)
msg db ' SORT PROGRAM',0dh,0ah
db ' * This program is designed to',0dh,0ah
db ' sort numbers in two ways',0dh,0ah
db ' * The range of the number should',0dh,0ah
db ' be between -32767 and 32767',0dh,0ah
db ' * BLANK key should be used to',0dh,0ah
db ' separate each number',0dh,0ah
db ' * END key finishes your input',0dh,0ah,0dh,0ah
db '****************************************',0dh,0ah
db 'please input the number:$'
chu dw 10000,1000,100,10,1
temp db 5 dup(0)
flag db 0
msg1 db 'The sorted numbers are as follows:$'
msg2 db 'Press any key to continue...$'
msg3 db 'Please input the way to sort:',0dh,0ah
db ' 1.up 2.down$'
.code
proc input near ;输入子程序
mov bx,0 ;出口参数count和array,分别表示输入数据个数和数据
mov cx,000ah
lea si,array
again:
mov ah,1
int 21h
cmp al,0dh
jz done
cmp al,20h
jz next
cmp al,2dh
jnz zheng1
mov flag,0ffh
jmp again
zheng1:
and ax,000fh
xchg ax,bx
mul cx
add bx,ax
jmp again
next:
cmp flag,0
jz zheng2
mov flag,0
neg bx
zheng2:
mov word ptr[si],bx
mov bx,0
inc si
inc si
inc count
jmp again
done:
cmp flag,0
jz zheng3
mov flag,0
neg bx
zheng3:
mov word ptr[si],bx
inc count
ret
endp
proc output near ;输出子程序,入口参数count、array
mov cx,count
lea bx,array
outloop1:
push cx
mov dx,word ptr[bx]
cmp dx,0
jnl zheng4
neg dx
fuhao
zheng4:
mov cx,5
mov di,0
inloop1:
mov ax,dx
xor dx,dx
push bx
mov bx,chu[di]
div bx
pop bx
add al,30h
shr di,1
mov temp[di],al
shl di,1
add di,2
loop inloop1
mov cx,5
mov di,0
zero:
mov dl,temp[di]
cmp dl,30h
jnz dplay
inc di
loop zero
cmp di,5 ;这四句是用来解决0的输出问题
jnz dplay
dec di
inc cx
dplay:
mov dl,temp[di]
inc di
mov ah,2
int 21h
loop dplay
mov dl,20h
mov ah,2
int 21h
inc bx
inc bx
pop cx
loop outloop1
ret
endp
.startup ;主程序开始
dplay msg
ctrl
call input
ctrl
dplay msg3
ctrl
next2:
mov ah,1
int 21h
cmp al,31h
jz up
cmp al,32h
jz down
jmp next2
down:
paixu count,array,jnl ;宏调用,实现降序排列
jmp next1
up: paixu count,array,jng ;宏调用,实现升序排列
next1:
ctrl
dplay msg1
ctrl
call output
ctrl
ctrl
dplay msg2
mov ah,1
int 21h
.exit 0
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -