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

如何在GDB中检查浮点值(x86 NASM汇编环境)

GDB中x86架构下检查x87浮点值的方法

print $st返回void的原因很直接:x86平台的GDB不识别无数字后缀的 $st 作为有效寄存器名。x87的浮点单元是深度为8的栈结构,8个寄存器从当前栈顶开始依次命名为st0到st7,fldpi指令执行完成后,加载的π值会被压入栈顶,也就是保存在st0中。

常用操作命令

  • 打印单个浮点寄存器值
    明确指定带编号的寄存器名即可正常输出:
    print $st0
    
    可以搭配格式符控制输出形式,匹配不同查看需求:
    • 按标准双精度浮点格式输出:p/f $st0
    • 按x87原生80位长双精度格式输出(完整保留扩展精度存储的π值,不会截断):p/Lf $st0
    • 查看浮点值的原始十六进制编码:p/x $st0
  • 批量查看所有x87浮点状态
    不需要逐个打印st0到st7,直接执行info float命令即可:该命令会输出完整的x87单元状态,包括控制字、状态字、标记字、当前栈顶偏移,以及8个st寄存器的全部存储值,是调试x87汇编最常用的命令。

注意事项

  • 如果查看到的值不符合预期,先确认指令是否真的执行完成:如果断点直接打在fldpi指令所在行,断下时指令还未提交执行,需要输入si单步走完该指令后再查看寄存器。
  • 注意区分x87栈寄存器和SIMD浮点寄存器:如果代码用的是SSE/AVX系列的现代浮点指令,值会存储在xmm/ymm/zmm系列寄存器中,可以用info all-registers查看所有寄存器列表,或用p $xmm0这类命令打印单个SIMD寄存器值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:48:19