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

📄 li2-6.asm

📁 显示学生成绩 从键盘输入成绩
💻 ASM
字号:
datarea segment
       grade dw 50 dup(?)
       rank  dw 50 dup(?)
       count dw ?
       mess1 db 'Grade?$'
       mess2 db 13,10,'Input Error!',13,10,'$'
       mess3 db 'Rank:$'
datarea ends
;********************************
prognam segment
;----------------------------------
main  proc  far
       assume cs:prognam,ds:datarea
 start:
 ;set up stack for return
       push ds
       sub  ax,ax
       push ax
 ;set DS register to current data segment
       mov  ax,datarea
       mov  ds,ax
 ;MAIN PART OF PROGRAM GOES HERS
       call input
       call rankp
       call output
       ret
main   endp
;---------------------------------------
input  proc  near
       lea   dx,mess1
       mov   ah,09
       int   21h

       mov   si,0
       mov   count,0
  enter:
     call  decibin
     inc   count
     cmp   dl,','             ;is it ','
     je    store
     cmp   dl,13               ;is it 'return'?
     je    exit2
     jne   error
  store:
       mov  grade[si],bx
       add  si,2               ;of students
       jmp  enter
  error:
      lea  dx,mess2
      mov  ah,09
      int  21h
  exit2:
       mov  grade[si],bx
       call crlf
       ret
input  endp
;---------------------------------------------------
rankp  proc near
       mov  di,count
       mov  bx,0
  loop1:
        mov  ax,grade[bx]
        mov  word  ptr rank[bx],0
        mov  cx,count
        lea  si,grade
  next:
      cmp ax,[si]
      jg  no_count
      inc  word ptr rank[bx]
  no_count:
       add   si,2
       loop  next
       add   bx,2
       dec   di
       jne   loop1
       ret          ;return to DOS
rankp  endp
;---------------------------------------------------------                      
output proc  near 
       lea   dx,mess3
       mov   ah,09
       int   21h
  ;
       mov  si,0
       mov  di,count      
  next1:
       mov  bx,rank[si]
       call binidec         ;display  the rank
       mov   dl,','         ;of students
       mov  ah,02
       int  21h
       add  si,2
       dec  di
       jnz  next1
       call crlf
       ret
output  endp
;--------------------------------------------
decibin  proc  near
         mov  bx,0
  newchar:
        mov   ah,1
        int   21h
        mov   dl,al
        sub   al,30h
        jl    exit1
        cmp   al,9d
        jg    exit1
        cbw
        
        xchg   ax,bx
        mov    cx,10d
        mul    cx
        xchg   ax,bx
        jmp    newchar
   exit1:    
         ret
decibin  endp
;---------------------------------------------
binidec proc near
        push  bx
        push  cx
        push  si
        push  di
        mov   cx,100d
        call  dec_div
        mov   cx,10d
        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
       mov  ah,02h
       int  21h
       ret
dec_div  endp
;-------------------------------------------
crlf  proc   near
      mov dl,0ah
      mov ah,02h
      int 21h
      ;
      mov dl,0dh
      mov ah,02h
      int 21h
      ;
      ret
crlf endp
;-----------------------------------
prognam ends
;********************************************
  end  start                     
                                          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -