📄 sort.asm
字号:
stack segment para stack 'stack'
top db 150 dup(?)
stack ends
data segment
buff dw 20 dup(?);存储20个待排序数字
order dw 10000,1000,100,10,1
data ends
code segment
assume cs:code,ds:data
inputc proc near
;入口参数:无
;功能:从键盘读入一个字母
;出口参数:DL中为键盘输入字的ASCII码值
push ax
mov ah,01h
int 21h
mov dx,0
mov dl,al
pop ax
ret
inputc endp
input proc near
;入口参数:无
;功能:从键盘读入数字n
;出口参数:BX中为读入的数字n
push ax
push cx
mov ax,0
loop1: call inputc
cmp dx,30h
jb exit2;小于30跳转exit2
cmp dx,39h
ja exit2;大于39跳转exit2
sub dx,30h
mov bx,0
mov bx,dx
mov cx,10
mul cx
add ax,bx
jmp loop1
exit2: mov bx,ax
pop cx
pop ax
ret
input endp
bin2dec proc far
;入口参数:DX存放要输出的数字
;功能:输出5位十进制数
;出口参数:无
push cx
push bx
mov cx,5
mov bx,0
lea si,order
loop3: sub dx,[si]
jb loop4
inc bl;存放某位数字
jmp loop3
loop4: add dx,[si]
cmp bl,0
je loop7
loop5: push dx
mov dl,bl
or dl,30h
mov ah,2
int 21h
pop dx
mov bh,1;标志是否已经有数字输出
jmp loop8
loop7: cmp bh,1
je loop5
loop8: add si,2
mov bl,0
loop loop3
cmp bh,0
jne loop9;为0时输出0
mov dl,'0'
mov ah,2
int 21h
loop9: pop bx
pop cx
ret
bin2dec endp
lfcr proc near
;入口参数:无
;功能:另起一行,从头输出
;出口参数:无
push ax
push dx
mov ah,02h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
pop dx
pop ax
ret
lfcr endp
sort proc near
;入口参数:buff内存有待排数
;功能实现冒泡排序
;出口参数:buff内为已由小到大排好序的数
push bx
push cx
push dx
mov bx,0
mov cx,20
dec cx
l1: mov dx,cx
l2: mov ax,buff[bx]
cmp ax,buff[bx+2]
jbe conti
xchg ax,buff[bx+2]
mov buff[bx],ax
conti: add bx,2
loop l2
;dec dx
mov cx,dx
mov bx,0
loop l1
pop dx
pop cx
pop bx
ret
sort endp
main proc far
;入口参数:无
;功能:做冒泡排序
;出口参数:无
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax;设置数据段寄存器
mov ax,stack
mov ss,ax;设置堆栈段寄存器
mov cx,20
lea si,buff
inall: call input
mov [si],bx
add si,2
call lfcr
loop inall
call sort
lea bx,buff
mov cx,20
call lfcr
outall: mov dx,[bx]
call bin2dec
call lfcr
add bx,2
loop outall
mov ah,4ch
int 21h
main endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -