You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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等级的输出逻辑。

修复方案

  1. 每段判定逻辑执行完成后,使用fstp st0或者ffree指令清理FPU栈中残留的浮点值,避免栈溢出。
  2. 将fGrade的值修改为60.0,匹配官方判定规则。
  3. 统一D、F等级的判定逻辑,和A、B、C的判定格式保持一致,修正跳转条件即可。

内容的提问来源于stack exchange,提问作者retrofusion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 02:42:02