HLA浮点数栈实现成绩等级判定函数80分以下运行终止问题求解
问题原因分析
1. x87 FPU栈溢出触发程序终止
x86架构的x87浮点运算单元栈深度仅为8层,你在每一段等级判定逻辑中都多次执行fld指令压入浮点值,且每次判定结束后没有主动弹出栈中残留的浮点数据。当分数低于80分时,程序会依次走过A、B的判定分支,此时FPU栈已经被占满,继续执行C、D的判定时压入新值就会触发浮点栈溢出异常,程序直接退出。
2. 等级判定阈值配置错误
你定义的fGrade值为50.0,但规则要求低于59.9(即<60.0)就应该返回F,这会导致50.0~59.9区间的分数没有匹配的判定分支,走到最终的jmp finalGrade直接返回,无任何输出。
3. 低分段判定逻辑条件错误
- D等级的判定错误使用了
setbe指令,和A、B、C的判定逻辑不一致,导致>=60的分数无法正确匹配到D等级。 - F等级的判定跳转条件写反,使用了
jne,无法正确触发F等级的输出逻辑。
修复方案
- 每段判定逻辑执行完成后,使用
fstp st0或者ffree指令清理FPU栈中残留的浮点值,避免栈溢出。 - 将
fGrade的值修改为60.0,匹配官方判定规则。 - 统一D、F等级的判定逻辑,和A、B、C的判定格式保持一致,修正跳转条件即可。
内容的提问来源于stack exchange,提问作者retrofusion
相关产品推荐
相关产品推荐

