📄 li6.asm
字号:
data segment
a dw 10 dup(?)
mess db 'Input array:$'
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
;------------------
;Input 10 numbers
mov ah,9
lea dx,mess
int 21h
lea si,a
mov cx,10
input:
push cx
call decibin
mov [si],bx
add si,2
pop cx
loop input
call crlf
;-----------------
;sort
call sort
;----------------
; Output 10 numbers
lea si,a
mov cx,10
output:
mov bx,[si]
call binidec
call crlf
add si,2
loop output
;-----------------
ret
main endp
;----------------
sort proc near
mov cx,10
dec cx
loop1:
mov di,cx
mov bx,0
loop2:
mov ax,a[bx]
cmp ax,a[bx+2]
jl continue
xchg ax,a[bx+2]
mov a[bx],ax
continue:
add bx,2
loop loop2
mov cx,di
loop loop1
ret
sort endp
;------------------
decibin proc near
mov bx,0
newchar:
mov ah,1
int 21h
sub al,30h
cmp al,0
jb exit1
cmp al,9
jnbe exit1
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit1:
ret
decibin endp
;---------------
binidec proc near
cmp bx,0
jne nz
mov dl,'0'
mov ah,2
int 21h
ret
nz:
push bx
push cx
push si
push di
mov di,0
mov cx,10000d
call dec_div
mov cx,1000d
call dec_div
mov cx,100d
call dec_div
mov cx,10d
call dec_div
mov cx,1
call dec_div
pop di
pop si
pop cx
pop bx
ret
binidec endp
;------------------
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
cmp dl,'0'
je done
mov di,1
done:cmp di,1
jne exit2
mov ah,2
int 21h
exit2:ret
dec_div endp
;-----------------
crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
int 21h
ret
crlf endp
;---------------
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -