📄 冒泡排序的课程设计.asm
字号:
data segment
random db 100 dup (?)
cnt equ 9
mess db 'please input the numbers you want to sort',13,10,'$'
data ends ;定义数据段和缓冲区random
code segment
main proc far
assume cs:code,ds:data
start:
mov al,3
mov ah,0
int 10h
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
lea dx,mess ;输出提示语句
mov ah,09h
int 21h
lea si,random
mov cx,cnt+1
num2:
call input ;调用输入子程序,把要排序的数字输入到random中
mov [si],bl
inc si
loop num2
call crlf
mov cx,cnt
loop1:
call sort ;调用排序子程序,
loop loop1 ;把输入到random中的有符号数字进行冒泡排序
call display ;排序结束后,调用输出子程序进行输出
mov ah,4ch
int 21h
main endp
sort proc near ;排序子程序
push cx
lea si,random
loop2:
mov al,[si]
mov dl,[si+1]
cmp al,dl
jl next
mov bl,al
mov [si],dl
mov [si+1],bl ;比较后进行数据交换
next:
inc si
loop loop2
pop cx
ret
sort endp
display proc near ;输出子程序
mov cx,cnt+1
lea si,random
play:
mov dl,[si]
cmp dl,0
jnl num1
mov dl,2Dh ;在数字前面打印负号
mov ah,02h
int 21h
mov dl,[si] ;负数求补
neg dl
num1:
mov al,dl
call radix
mov dl,20h
mov ah,02
int 21h
inc si
loop play
ret
display endp
radix proc near ;输出转换函数子程序
push dx
push bx ;把要输出的数字转换后输出
push ax
push cx
mov cx,0
mov bl,10
next1:
mov ah,0
div bl
push ax
inc cx
cmp al,0
jnz next1
outp:
pop ax
mov dl,ah
add dl,30h
mov ah,2
int 21h
loop outp
pop cx
pop ax
pop bx
pop dx
ret
radix endp
crlf proc near ;换行子程序
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
crlf endp
input proc near ;有符号数输入子程序
push cx ;把要排序的数字输入
mov bx,0
mov di,0
newchar:
mov ah,1
int 21h
cmp al,2dh
jz to
sub al,30h
jl exitout
cmp al,39h
jg exitout
cbw
xchg ax,bx
mov cl,10d
mul cl
xchg ax,bx
cmp di,1
jz tt
cmp di,0
jz ttt
tt: neg ax ;若输入为负数则求补后存储
add bx,ax
jmp newchar
ttt: add bx,ax
jmp newchar
to: mov di,1
jmp newchar
exitout:
mov di,0
pop cx
ret
input endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -