Intel 8087微码揭秘:FSCALE指令的复杂真相
Microcode in Intel's 8087 floating-point chip: the scale instruction

我是Opcode Collective的一员,正在逆向工程Intel 8087浮点协处理器的微码。原本以为FSCALE指令只是简单的二进制缩放,结果发现它竟包含超过140条微指令和三层子程序调用,专门处理各种极端情况。通过显微镜拆解芯片,我深入分析了其移位器、加法器和指数转换器的运作机制。这篇文章将带你走进1980年代芯片设计的微观世界,揭示这条看似简单的指令背后隐藏的复杂逻辑与历史细节。
我本以为FSCALE是一条简单甚至微不足道的指令,理解起来应该直截了当,但事实并非如此。
HN 评论区
46- garganzol
8087 带来的数学运算速度提升 100 倍绝非夸大其词。对于依赖数学运算的应用来说,当时的差异简直令人发指。我在自己的 80286 机器上亲身经历过,计算结果从 3 秒变成了 300 秒。
8087 指令集的一个巧妙之处在于,它可以与 x86 指令交错出现在代码流中,让你能同时访问两颗并行工作的处理器芯片。这种组合构成了一个真正的非对称多处理器系统,为硬件辅助的代码并行化提供了某些契机。如果采用深思熟虑的指令调度,8087 执行的浮点运算就可以与常规的整数 x86 代码并行运行。
- cogman10
x87 的架构实在太怪异了。它的设计思路就跟设计科学计算器芯片一样。说真的,它简直完美契合 HP 的 RPN(逆波兰表示法)计算器。
但对于编译器来说,针对它简直痛苦不堪。它与几乎所有其他 CPU 的工作方式都截然不同。这也是为什么 CPU 和编译器都倾向于在可能时避开 x87,转而使用常规的 SIMD(SSE/AVX)指令。
此外,那个随意的“哦,对了,寄存器是 80 位宽”的说法,也是那种让人忍不住问“这数字到底哪来的?”的奇怪设计之一。
- kens
作者本人,大家有什么关于 8087 的问题尽管问...
- finn888
从一条简单的 scale 指令到 140 条微指令,这种跨越让那些特殊情况的机制变得具体多了。