DOS下x86汇编编写成绩等级计算器逻辑错误求助
问题排查
- 输入获取逻辑错误:连续两次调用
int 21h的01h号输入功能,第一次读取的十位ASCII值会被第二次读取的个位值覆盖al寄存器,你最终用来比较的al存储的是个位数字,自然判断逻辑完全失效,这是无论输入什么都打印A的核心原因。 - 无效赋值:你新增的
mov bl,01没有承接第二次输入的结果,两次输入的内容没有被正确存储区分。 - 比较逻辑的判断对象错误:你需要判断的是十位数字是否大于等于8,而非个位数字。
修复后的完整实现
以下代码完整实现两位数字输入、大于等于80分打印A等级的逻辑:
.model small .stack 100h .data Msg1 db 'Enter your total marks from 0 to 99: $' EightyPlus db 'Congratulation you have got an A $' .code start: mov ax,@data mov ds,ax ; 打印输入提示 mov ah,09h lea dx,Msg1 int 21h ; 打印换行回车 mov ah,02h mov dl,13 int 21h mov dl,10 int 21h ; 读取十位数字,存入bl mov ah,01h int 21h mov bl,al ; 读取个位数字,存入al mov ah,01h int 21h ; 打印换行回车 mov ah,02h mov dl,13 int 21h mov dl,10 int 21h ; 判断十位是否>=8(即分数>=80) cmp bl, '8' jl exit ; 符合条件打印A等级提示 mov ah,09h lea dx,EightyPlus int 21h exit: mov ah,4ch int 21h end start
内容的提问来源于stack exchange,提问作者Ghulam Mustafa
相关产品推荐
相关产品推荐

