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

📄 sort.txt

📁 实现简单排序功能
💻 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 + -