⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 冒泡排序的课程设计.asm

📁 用户自己给出10个数 程序可以按从小到大的顺序排出来
💻 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 + -