FPU 检测技术:从 8086 到 286 的演进与挑战跨越
【导语本文围绕 FPU 检测技术展开从 8086 到 286 及后续 CPU 的 FPU 检测工作原理进行深入探讨揭示了技术演进中的变化、难点及实际应用情况对理解早期计算机浮点运算相关技术有重要意义。】8086 时代 FPU 检测的独特设计在 8086 时代FPU 检测有其独特之处。8086 于 1978 年推出其与 FPU 的接口是通用协处理器接口。ESC 指令操作码范围 D8h - DFh用于与协处理器通信CPU 需能“解码”该指令通过标准的 ModR/M 字节指示可选内存操作数以实现对协处理器的读写。若 8086 未连接协处理器ESC 指令不执行操作而 WAIT 指令会无限期挂起所以 FPU 检测需使用非等待的 FNINIT/FNSTSW 序列避免挂起。此外IBM PC 虽有在 BIOS 设备字中报告 FPU 存在的机制但依赖 PC 和 PC/XT 主板上用户可设置的 DIP 开关且 IBM 手册说明有误导致 BIOS 的 FPU 存在位不可信软件需明确检查 FPU 存在。286 及后续 CPU 的 FPU 检测变革到 1982 年 80286 推出英特尔放弃了通用协处理器接口。286 及后续 CPU 能简化浮点指令仿真机器状态字MSW后来是 CR0 寄存器的低 16 位中的 EM 位设置后会使 ESC 操作码触发协处理器不可用故障异常 7。英特尔建议通过执行 FNINIT/FNSTSW 或类似序列检测 FPU 存在但这面临一个问题即要执行可能不存在芯片的 FPU 指令。286/287 接口与 8086/8087 有很大不同287 FPU 响应保留端口 00F8h、00FAh 和 00FCh 上的 I/O 周期所有内存访问通过 286 进行。286 带来重大变化不再需要在每个浮点指令前编写 WAIT 指令80286 会自动测试 80287 的 BUSY 线确保 80287 完成上一个指令后再执行下一个 ESC 指令这要求 286 理解哪些指令需测试 BUSY 线。FPU 并行性与指令特性8086 设计允许 CPU 与协处理器并行执行使用 WAIT 指令同步。WAIT 指令有时也被称为 FWAIT它由 CPU 执行观察输入到 CPU 的 BUSY 信号。自 486 起FPU 集成到与 CPU 相同芯片中界限变得模糊。FPU 有数学指令和控制指令两类NEU 处理数学指令BIU 执行控制指令。FPU 内部的 BIU 和 NEU 之间存在并行性如 FNSTSW 指令可在 NEU 忙碌时执行。某些控制指令内部已完成同步工作不需要显式同步汇编器支持这些指令的等待和非等待形式。无 FPU 时的检测逻辑与现象英特尔 287 文档中的 FPU 检测逻辑示例显示软件负责设置 MSW需检测 FPU 存在或缺失并相应行动。当有 FPU 时FNINIT 重置 FPUFSTSW 存储状态字低 8 位始终为零。若没有 FPU情况变得复杂。按照英特尔文档检测无法工作但实际 286 中 ESC 仍是 CPU 指令虽无 FPU 时 ESC 基本无操作但并非完全如此。在没有 FPU 的 386 系统上FNSTSW m16 指令会写入内存如写入 FFFFh这可能是 CPU 写入也可能是尝试从不存在的内存或 I/O 端口读取时的“未使用”总线值。协处理器段溢出问题286/287 需要解决内存保护问题FPU 不能像 CPU 一样访问超过段限制的内存因此需要处理器扩展段溢出中断即协处理器段溢出中断编号 9。如果起始地址超出段限制286 会立即触发一般保护故障。编辑观点FPU 检测技术从 8086 到 286 的演进体现了计算机技术在浮点运算领域的不断发展和完善。每一代 CPU 的改进都解决了前一代的问题同时也带来新的挑战这反映了技术发展的复杂性和持续性。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2472006.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!