网下载个程序,看懂一些,还有些看不懂,希望大神门帮帮忙,注释下,只注释有颜色那部分就可以啦程序不大。有颜色那部分就是我看不懂的代码,不多谢谢啦尽量多点注释,新菜,刚学不久,求帮忙。
DATASEGMENT
BUFDB10DUP(0)
STRING1DB'Pleaseenterthescore'
NUMBERDB31H,':','$'
STRING2DB0AH,'Therangedscoresare:','$'
STRING3DB'Afterremovingthehighestandlowestscore,theaveragescoreis:','$'
ERRORDB'ERROR',0AH,0DH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
XORSI,SI;SI置0
MOVCX,9;9个数
INPUT:
LEADX,STRING1
MOVAH,9
INT21H
MOVAH,1
INT21H;输入得分的十位到AL
CMPAL,'0'
JBER;AL1则跳到ER
SUBAL,30H
MOVDL,10
MULDL;十位乘以10
MOVDX,AX;DX存十位数
MOVAH,1
INT21H;输入得分的个位到AL
CMPAL,'0'
JBER;AL10则跳到ER
SUBAL,30H
ADDAL,DL;个位十位相加到AL
MOVBUF[SI],AL
INCSI
INCNUMBERMOVDL,0AH;换行
MOVAH,2
INT21H
MOVDL,0DH;回车
INT21H
LOOPINPUT;循环输入9次
JMPRANGE_0;转入排序
ER:
;输入错误后返回重新输入
LEADX,ERROR
MOVAH,9
INT21H
JMPINPUT
RANGE_0:
MOVBX,1
MOVCX,9
XORDI,DI
RANGE:MOVAL,BUF[DI]
CMPAL,BUF[DI+1]
JAENEXT_1
XCHGBUF[DI+1],AL
MOVBUF[DI],AL
MOVBX,0
NEXT_1:INCDI
LOOPRANGE
CMPBX,0
JERANGE_0;冒泡法排列得分
LEADX,STRING2
MOVAH,9
INT21H
MOVCX,9
XORSI,SI;SI清零
MOVAH,2
RANGE_OUTPUT:
;输出排序后的得分
MOVDL,BUF[SI]
ADDDL,30H
CMPDL,39H;判断是否是10分
JATENS_1
JBETENS_0
TENS_1:
;十位数为1,则输出'10'
MOVBX,1
MOVDL,'1'
INT21H
MOVDL,'0'
INT21H
INCSI
MOVDL,','
INT21H
JMPNEXT_2
TENS_0:
;十位数为0,则按原得分输出
INT21H
INCSI
MOVDL,','
INT21H
NEXT_2:
LOOPRANGE_OUTPUT
MOVAH,2
MOVDL,0AH;换行
INT21H
MOVDL,0AH;换行
INT21H
MOVDL,0DH;回车
INT21H
LEADX,STRING3
MOVAH,9H
INT21H
MOVCX,7;累加中间7个数字
XORAX,AX
DECSI
SUM:
;求7个分数的和
DECSI
ADDAL,BUF[SI]
LOOPSUM
CMPAL,46H
JAEFULL_MARK
JMPN_FULL_MARK
FULL_MARK:
;满分时
MOVAH,2H
MOVDL,'1'
INT21H
MOVDL,'0'
INT21H
MOVDL,'.'
INT21H
MOVDL,'0'
INT21H
MOVDL,'0'
INT21H
JMPENDING
N_FULL_MARK:
;非满分时
MOVCX,2
MOVBH,1;小数点只出现1次
DIVISION:
MOVBL,7
DIVBL;除以7
PUSHAX
ADDAL,30H
MOVDL,AL
MOVAH,2
INT21H
CMPBH,0
JEDOT
MOVDL,'.'
MOVBX,0
DOT:INT21H
POPAX
MOVAL,AH;余数存入AL
MOVDL,10
MULDL;余数乘以10?结果存入AXLOOPDIVISION
ENDING:
MOVAH,02
MOVBH,0
MOVDX,0C46H
INT10H;设置光标位置
MOVAH,1
INT21H
CODEENDS
ENDSTART
分 -->
|