📄 5.asm
字号:
.model small ;此程序为冒泡排序
.data
buf db 2,2,2,5,4,6,8,7,9,3
n db 10
ct1 db ?
ct2 db ?
save_cnt db 1 ;设置一标志来减少偱环次数
.code
;...............................................
main proc near
start: mov ax,@data
mov ds,ax
CALL MAINS
mov ax,4c00h
int 21h
MAIN ENDP
;................................................
MAINS PROC NEAR
mov ah,n
dec ah
mov ct1,ah
mov ct2,ah
cmp0: ;外偱环
mov save_cnt,1 ;设置标志为1
mov ch,00h
mov cl,ct2
mov si,0
call print1 ;用来显示出每次排完序的序列
call crlf ;子程序:用来显示回车和换行
cmp1: mov al,buf[si] ;内偱环
cmp al,buf[si+1]
jle inc1
xchg al,buf[si+1]
mov save_cnt,0 ;修改标志,来说明此次内偱环对数据修改了
mov buf[si],al
inc1: inc si
loop cmp1
cmp save_cnt,1 ;如果标志没变,说明上一次内偱环没有对数据修改
jz exit2 ;数据已排好序了,可以退出
dec ct2
cmp ct2,0
jnz cmp0
exit2: RET
mainS endp
;...............................................
print1 proc near ;用来显示出每次排完序的序列
push cx ;保护好CX,SI中的值
push si
mov ch,00h
mov cl,n
mov si,0
next: mov ah,buf[si] ;逐个打出数字的ASCLL符
add ah,30h
mov dl,ah
mov ah,2
int 21h
inc si
loop next
pop si
pop cx
ret
print1 endp
;................................................
CRLF PROC NEAR ;子程序:用来显示回车和换行
mov dl,0dh ;回车
mov ah,2
int 21h
mov dl,0ah ;换行
mov ah,2
int 21h
RET ;返回
CRLF ENDP
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -