汇编语言科目复习测验程序总分计算错误问题求助
汇编测验程序分数计算错误的修复方案
核心错误点
- 答错分支错误加分:
QSNW2到QSNW9的答错处理分支中,错误使用INC BL(加分),实际应为DEC BL(扣分),仅QSNW10处理正确,这是总分错误的主因。 - 最终分支重复修改分数:
EXIT和EXITW分支中再次执行INC BL/DEC BL,导致题目10的分数被重复计算,额外多加减1分。 - 负数分数显示异常:分数为负数时,
ADD BL,48会将负数转换为非ASCII数字字符,无法正确显示负分。 - 题目2判断逻辑错误:原代码中
QSNW2分支将题目2的正确答案误判为'A',但实际正确选项是'B',导致选对也会触发答错逻辑。
修正步骤
- 所有答错分支替换分数操作:将
QSNW2到QSNW9中的INC BL改为DEC BL。 - 删除最终分支的重复分数修改:移除
EXIT里的INC BL和EXITW里的DEC BL。 - 添加负分显示逻辑:新增
DISPLAY_SCORE子程序,判断分数正负,负数先输出'-'再显示绝对值。 - 修正题目2的判断条件:将
QSNW2中的CMP AL, 'A'改为CMP AL, 'B',匹配实际正确选项。
修正后的完整代码
org 100h .data MSG1 DB '..........WELCOME TO SUBJECT REVIEWER SYSTEM..........$' MSG2 DB 'RULES : $' MSG3 DB 'FOR EVERY CORRECT PLUS 1 POINT $' MSG4 DB 'FOR EVERY INCORRECT MINUS 1 POINT $' MSG5 DB 'PRESS ENTER TO START THE QUIZ : $' MSG6 DB 'RIGHT ANSWER $' MSG7 DB 'WRONG ANSWER $' MSG8 DB 'YOU SUCCESSFULLY COMPLETED THE QUIZ $' MSG9 DB 'YOUR TOTAL POINTS IS: $' MSG10 DB 'PRESS 1 TO REATTEMPT QUIZ $' MSG11 DB '*******THANK YOU******* $' Q1 DB '1. 1+1=? $' QA1 DB 'A) 2 B) 5 C) 23 $' Q2 DB '2. 1+1=? $' QA2 DB 'A) 3 B) 2 C) 65 $' Q3 DB '3. 1+1=? $' QA3 DB 'A) 2 B) 44 C) 23 $' Q4 DB '4. 1+1=? $' QA4 DB 'A) 2 B) 5 C) 45 $' Q5 DB '5. 1+1=? $' QA5 DB 'A) 2 B) 5 C) 56 $' Q6 DB '6. 1+1=? $' QA6 DB 'A) 2 B) 4 C) 5 $' Q7 DB '7. 1+1=? $' QA7 DB 'A) 2 B) 5 C) 23 $' Q8 DB '8. 1+1=? $' QA8 DB 'A) 2 B) 5 C) 7 $' Q9 DB '9. 1+1=? $' QA9 DB 'A) 2 B) 5 C) 23 $' Q10 DB '10. 1+1=? $' QA10 DB 'A) 2 B) 5 C) 4 $' .code MAIN PROC MOV AX,@DATA MOV DS,AX LEA DX,MSG1 MOV AH,9 INT 21H CALL NL LEA DX,MSG2 MOV AH,9 INT 21H CALL NL LEA DX,MSG3 MOV AH,9 INT 21H CALL NL LEA DX,MSG4 MOV AH,9 INT 21H CALL NL START: MOV BL, 0 CALL NL LEA DX,MSG5 MOV AH,9 INT 21H MOV AH, 1 INT 21H CMP AL, 0DH JE QSN1 JNE START QSN1: CALL NL LEA DX,Q1 MOV AH,9 INT 21H CALL NL LEA DX,QA1 MOV AH,9 INT 21H CALL NL MOV AH, 1 INT 21H CMP AL, 'A' JE QSN2 JNE QSNW2 QSN2: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN2 CALL INPUT CMP AL, 'B' JE QSN3 JNE QSNW3 QSNW2: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN2 CALL INPUT CMP AL, 'B' ; 修正:匹配题目2正确选项 JE QSN3 JNE QSNW3 ; Q3 QSN3: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN3 CALL INPUT CMP AL, 'A' JE QSN4 JNE QSNW4 QSNW3: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN3 CALL INPUT CMP AL, 'A' JE QSN4 JNE QSNW4 ; Q4 QSN4: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN4 CALL INPUT CMP AL, 'A' JE QSN5 JNE QSNW5 QSNW4: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN4 CALL INPUT CMP AL, 'A' JE QSN5 JNE QSNW5 ; Q5 QSN5: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN5 CALL INPUT CMP AL, 'A' JE QSN6 JNE QSNW6 QSNW5: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN5 CALL INPUT CMP AL, 'A' JE QSN6 JNE QSNW6 ; Q6 QSN6: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN6 CALL INPUT CMP AL, 'A' JE QSN7 JNE QSNW7 QSNW6: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN6 CALL INPUT CMP AL, 'A' JE QSN7 JNE QSNW7 ; Q7 QSN7: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN7 CALL INPUT CMP AL, 'A' JE QSN8 JNE QSNW8 QSNW7: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN7 CALL INPUT CMP AL, 'A' JE QSN8 JNE QSNW8 ; Q8 QSN8: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN8 CALL INPUT CMP AL, 'A' JE QSN9 JNE QSNW9 QSNW8: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN8 CALL INPUT CMP AL, 'A' JE QSN9 JNE QSNW9 ; Q9 QSN9: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN9 CALL INPUT CMP AL, 'A' JE QSN10 JNE QSNW10 QSNW9: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL ; 修正:答错扣分 CALL NL CALL QN9 CALL INPUT CMP AL, 'A' JE QSN10 JNE QSNW10 ; Q10 QSN10: CALL NL LEA DX,MSG6 MOV AH,9 INT 21H INC BL CALL NL CALL QN10 CALL INPUT CMP AL, 'A' JE EXIT JNE EXITW QSNW10: CALL NL LEA DX,MSG7 MOV AH,9 INT 21H DEC BL CALL NL CALL QN10 CALL INPUT CMP AL, 'A' JE EXIT JNE EXITW EXIT: CALL NL LEA DX, MSG6 MOV AH,9 INT 21H CALL NL CALL NL LEA DX, MSG8 MOV AH,9 INT 21H CALL NL LEA DX, MSG9 MOV AH,9 INT 21H CALL DISPLAY_SCORE JMP EXIT1 EXITW: CALL NL LEA DX, MSG7 MOV AH,9 INT 21H CALL NL CALL NL LEA DX, MSG8 MOV AH,9 INT 21H CALL NL CALL NL LEA DX, MSG9 MOV AH,9 INT 21H CALL DISPLAY_SCORE JMP EXIT1 ; 新增分数显示子程序,支持负数 DISPLAY_SCORE: MOV AL, BL CMP AL, 0 JGE POSITIVE_SCORE ; 处理负数 NEG AL MOV AH, 2 MOV DL, '-' INT 21H POSITIVE_SCORE: ; 处理0-10的分数显示 CMP AL, 10 JE DISPLAY_TEN ADD AL, 48 MOV AH, 2 MOV DL, AL INT 21H RET DISPLAY_TEN: MOV AH,2 MOV DL,"1" INT 21H MOV DL, "0" INT 21H RET NL: MOV AH,2 MOV DL, 0AH INT 21H MOV DL, 0DH INT 21H RET QN2: LEA DX,Q2 MOV AH,9 INT 21H CALL NL LEA DX,QA2 MOV AH,9 INT 21H RET QN3: LEA DX,Q3 MOV AH,9 INT 21H CALL NL LEA DX,QA3 MOV AH,9 INT 21H RET QN4: LEA DX,Q4 MOV AH,9 INT 21H CALL NL LEA DX,QA4 MOV AH,9 INT 21H RET QN5: LEA DX,Q5 MOV AH,9 INT 21H CALL NL LEA DX,QA5 MOV AH,9 INT 21H RET QN6: LEA DX,Q6 MOV AH,9 INT 21H CALL NL LEA DX,QA6 MOV AH,9 INT 21H RET QN7: LEA DX,Q7 MOV AH,9 INT 21H CALL NL LEA DX,QA7 MOV AH,9 INT 21H RET QN8: LEA DX,Q8 MOV AH,9 INT 21H CALL NL LEA DX,QA8 MOV AH,9 INT 21H RET QN9: LEA DX,Q9 MOV AH,9 INT 21H CALL NL LEA DX,QA9 MOV AH,9 INT 21H RET QN10: LEA DX,Q10 MOV AH,9 INT 21H CALL NL LEA DX,QA10 MOV AH,9 INT 21H RET INPUT: CALL NL MOV AH, 1 INT 21H RET EXIT1: CALL NL CALL NL LEA DX,MSG10 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,'1' JE START CALL NL CALL NL LEA DX,MSG11 MOV AH,9 INT 21H MOV AH, 4CH INT 21H MAIN ENDP END MAIN
内容的提问来源于stack exchange,提问作者eddie bucad
相关产品推荐
相关产品推荐

