x86-64 架构下 FPU 的深入解析
1. 浮点数运算基础
在进行浮点数运算时,由于有限精度算术的存在,会出现不准确的情况。如果要使用任何语言进行浮点数运算,都应该花时间研究有限精度算术对计算的影响。一本好的数值分析或科学计算的书籍可以帮助我们了解更多细节。
2. x86 - 64 上的浮点运算发展
在 20 世纪 70 年代末 8086 CPU 刚出现时,半导体技术还不允许英特尔将浮点指令直接集成到 8086 CPU 中。因此,英特尔设计了使用第二个芯片(8087 浮点单元,即 x87 FPU)来执行浮点计算的方案。到英特尔奔腾芯片发布时,半导体技术已经发展到可以将 FPU 完全集成到 x86 CPU 中。如今,x86 - 64 仍然包含 x87 FPU 设备,并且通过使用 SSE、SSE2、AVX 和 AVX2 指令集扩展了浮点运算能力。
3. FPU 寄存器
x87 FPU 为 x86 - 64 添加了 14 个寄存器,包括 8 个浮点数据寄存器、一个控制寄存器、一个状态寄存器、一个标记寄存器、一个指令指针、一个数据指针和一个操作码寄存器。
- 浮点数据寄存器 :提供 8 个 80 位的数据寄存器,以栈的形式组织,与 x86 - 64 CPU 上的通用寄存器组织方式有很大不同。MASM 将这些寄存器称为 ST(0)、ST(1)、…、ST(7)。ST(0) 指栈顶元素,ST(1) 指栈中的下一个元素,依此类推。许多浮点指令会对栈进行压入和弹出操作,因此在压入元素后,ST(1) 会指向之前 ST(0) 的内容。
- FPU 控制寄存器
超级会员免费看
订阅专栏 解锁全文
97

被折叠的 条评论
为什么被折叠?



