📄 grade.asm
字号:
data segment
meg1 db 0ah,0dh,"grade:",0ah,0dh,"$"
meg2 db 0ah,0dh,"rank:",0ah,0dh,"$"
input db 100,0,100 dup(?)
rank dw 50 dup(1)
grade dw 50 dup(111) ,'$'
count db 0
data ends
code segment
assume ds:data,cs:code
main proc far
mov ax,data
mov ds,ax
lea dx,meg1
mov ah,09h
int 21h
call decibin
call rankp
lea dx,meg2
mov ah,09h
int 21h
call binidec
mov ax,4c00h
int 21h
main endp
decibin proc near
lea dx,input
mov ah,0ah
int 21h
mov bx,0
lea di,grade
lea si,input+2
mov cl,[si-1]
mov ch,00h
newchar:
mov al,[si]
cmp al,','
jz nextnum ;如果是','则保存这个数
sub al,30h
cbw
xchg ax,bx
mov dl,10d
mul dl ;cx*ax->ax
xchg ax,bx
add bx,ax
inc si
loop newchar
jmp e
nextnum:
mov [di],bx
mov bx,0
add di,2 ;下个储存位置
inc si ;下个字符
inc count
loop newchar
e:
mov [di],bx
inc count
ret
decibin endp
rankp proc near
lea si,grade
lea di,rank
nextstudent:
mov ax,[si] ;grade中取一个数 放ax
cmp ax, 111 ;判断有没有值
jz nonum
lea bx,grade ;用bx做变址
next:
mov dx,[bx] ;与grade没个数进行比较
cmp dx,111
jz endd
cmp ax,dx
js up ;如果<
add bx,2
jmp next
up:
add byte ptr [di],1
add bx,2
jmp next
endd:
add si,2 ;下一个数
add di,2 ;下一个排名
jmp nextstudent
nonum:
ret
rankp endp
binidec proc near
lea si,rank
mov cl,count
mov ch,00h
nexttran:
mov ax,[si] ;将排名数字发到ax
mov dl,10
div dl
add al,30h
add ah,30h
mov dh,ah ;暂时保存ah,既商
mov dl,al
mov ah,02h
int 21h
mov dl,dh
mov ah,02h
int 21h
cmp cx,1
jz no
mov dl,','
mov ah,02h
int 21h
add si,2
loop nexttran
no:
ret
binidec endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -