📄 shiyan6.asm
字号:
data segment
prmpt db "Input scores here(SPACE to seperate the score,ENTER to stop):",'$'
warning db "Invalid input! Input terminated!",'$'
rnk db "Rank:",'$'
erade dw 50 dup (?)
rank dw 50 dup (?)
count dw 0;定义总计数器
data ends
scoresrt segment
assume cs:scoresrt,ds:data
;==============================================================
main proc far
call input;进入成绩输入过程
call rankp;进入成绩排序过程
call output;进入名次输出过程
mov ah,4ch;退出程序
int 21H
main endp
;==============================================================
input proc near
mov ax,data
mov ds,ax
mov dx,offset prmpt
mov ah,9
int 21H
call crlf
mov bp,0;数组指针初始化
cldcb:
call decibin
inc count;学生总人数计数器自增
cmp al,20H;是空格否?
jne notspce
mov erade[bp],bx
add bp,2
jmp cldcb
notspce:
cmp al,0dH
je isetr
call crlf
mov ax,data
mov ds,ax
mov dx,offset warning
mov ah,9
int 21H
call crlf
isetr:
mov erade[bp],bx
add bp,2
call crlf
ret
input endp
;==============================================================
output proc near
mov dx,offset rnk
mov ah,9
int 21H
mov bp,0
mov cx,count
lpo:call binidec
add bp,2
loop lpo
call crlf
ret
output endp
;==============================================================
decibin proc near
mov bx,0
newchar:
mov ah,1
int 21H
sub al,30H
jl exit
cmp al,9
jg exit
cbw
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
jmp newchar
exit:
add al,30H;将al还原为ascii
ret
decibin endp
rankp proc near
mov si,0;外层遍历
mov cx,count
loopo:
mov di,0;计大于个数
mov bp,0;内层遍历
push cx
mov cx,count
loopi:
mov ax,erade[bp]
cmp erade[si],ax
jnb nb
inc di
nb: add bp,2
loop loopi
pop cx
inc di
mov rank[si],di
add si,2
loop loopo
ret
rankp endp
;==============================================================
binidec proc near
push cx;保存cx
mov ax,rank[bp]
mov si,0
mov cx,0aH
rotate:
mov dx,0
div cx
add dl,30H
push dx
inc si
cmp ax,0
jne rotate
printit:
pop dx
mov ah,2
int 21H
dec si
jnz printit
mov dx,20H
int 21H
pop cx;还原cx
ret
binidec endp
;==============================================================
crlf proc near
mov dl,0dH
mov ah,2
int 21H
mov dl,0aH
mov ah,2
int 21H
ret
crlf endp
;==============================================================
scoresrt ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -