📄 paixu.asm
字号:
data segment ; 定义数据段开始
array dw 50 dup(?)
count dw ?
flag db ?
mess1 db 'Please input a Array?: $'
mess2 db 'Array(from large to small):$'
f dw 10000,1000,100,10,1
s db 5 dup(30h),24h
data ends ;数据段定义结束
stack segment para stack 'stack' ; 定义堆栈段开始
dw 100 dup(100) ;堆栈大小为100个字
stack ends
code segment ;定义代码段开始
assume cs:code,ds:data,ss:stack ;
main proc far ;定义过程开始
start: push ds ;START为程序执行时的启始标号
xor ax,ax
push ax ;设置返回地址
mov ax,data
mov ds,ax ;数据段段始址送DS
lea dx,mess1
mov ah,09h
int 21h
mov si,0
mov count,0
input: mov bx,0
mov flag,0
newchar2:mov ah,1
int 21h
mov dl,al
cmp dl,'-'
je l0
cmp dl,','
je store
cmp dl,13
je exit2
sub al,30h
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
jmp newchar2
l0: mov flag,1
jmp newchar2
store: cmp flag,1
jne next
neg bx
next: mov array[si],bx
inc count
add si,2
jmp input
exit2: mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
mov cx,count
dec cx
loop1: mov di,cx
mov bx,0
loop2: mov ax,array[bx]
cmp ax,array[bx+2]
jge continue
xchg ax,array[bx+2]
mov array[bx],ax
continue:add bx,2
loop loop2
mov cx,di
loop loop1
lea dx,mess2
mov ah,09h
int 21h
mov dx,0
mov bx,0
outp: mov di,0
mov si,0
mov cx,5
mov dx,array[bx]
add dx,0
jns l1
neg dx
push dx
mov dl,'-'
mov ah,02h
int 21h
pop dx
l1: mov s[di],30h
mov ax,dx
mov dx,0
div f[si]
add s[di],al
inc di
add si,2
loop l1
mov di,0
l2: cmp s[di],30h
jne l3
inc di
jmp l2
l3: lea dx,s[di]
mov ah,09h
int 21h
add bx,2
mov dl,','
mov ah,02h
int 21h
dec count
jnz outp
ret
main endp ;过程定义结束
code ends ;代码段定义结束
end start ;整个程序到此为止,运行时从START处开始
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -