📄 rank.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 + -