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

📄 rank.asm

📁 一个输入学生成绩并排名次的程序
💻 ASM
字号:
datarea       SEGMENT
              grade DW        50 DUP(?)
              rank DW        50 DUP(?)
              count DW        ?
              mess2 DB        13,10,'Input Error!',13,10,'$'
              mess1 DB        'Grade?$'
              mess3 DB        'Rank:$' 
datarea       ENDS
;-----------------------------------
prognam segment
main          PROC      FAR
              ASSUME    CS:prognam,DS:datarea
start:        
;建立堆栈返回
              PUSH      DS
              SUB       AX,AX
              PUSH      AX
;DS存储当前数据段
              MOV       AX,datarea
              MOV       DS,AX
;主程序
              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
enter1:        
              CALL      DECibin
              INC       count
              CMP       DL,','
              JE        store
              CMP       DL,13
              JE        exit2
              JNE       error
store:        
              MOV       grade[SI],BX
              ADD       SI,2
              JMP       enter1
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
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
              MOV       DL,','
              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
              
              ADD       BX,AX
              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
              MOV       CX,1d
              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 + -