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

📄 grade.asm

📁 从键盘接收输入的一个班的学生成绩
💻 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 + -