
transcript
show notes
一条常见于崩溃现场的 `ud2` 指令,为什么偏偏叫“2”?微软资深工程师 Raymond Chen 从这个细节出发,重构了一段鲜为人知的 x86 兼容性历史:两种原本未被正式定义、却被软件生态广泛依赖的“非法指令”编码,最终迫使 Intel 将其追认为 ud0 与 ud1。
本期将深入解析这段历史背后的工程规律:未写入手册的可观察行为,也可能在规模化生态中变成事实契约;而 ud2 的价值不只在于“必然失败”,更在于它能以确定、可依赖的方式失败。欢迎结合原文阅读,理解硬件兼容性与软件工程之间的真实拉扯。
原文链接:
https://devblogs.microsoft.com/oldnewthing/20260910-00/?p=112689
原文标题:Why is the x86 undefined instruction called ud2? Why 2?
主要内容:
• 早期 x86 没有正式定义的“必定非法”指令,开发者曾分别依赖 `0F FF` 与 `0F B9` 来主动触发 invalid opcode 异常。
• 当 Intel 的后续处理器改变了这些未公开编码的行为,既有软件随即出现兼容性问题,迫使 Intel 正视生态已经形成的依赖。
• 为维护兼容性,Intel 将旧编码正式收编为 ud0、ud1,并设计出全新、官方保证的 ud2。
• ud0、ud1 含有需要继续取指和解码的操作数,跨越页边界时可能先触发页错误;ud2 只有两个字节、零操作数,避免了这类不确定性。
• 这正是 Hyrum 定律在硬件世界的缩影:只要行为能被观察到,终会有人依赖它;真正可靠的基础是明确写入架构契约的保证。
推荐理由:
这篇文章把一个看似微小的指令命名问题,展开成一堂极具现实意义的兼容性课程。它不仅解释了 `ud2` 的历史来源,也揭示了底层系统设计中“确定性失败”为何重要。对于编译器、调试、操作系统、CPU 架构或 API 兼容性有兴趣的读者,这是一篇值得细读原文、反复咀嚼的工程故事。
---
「Andrej Karpathy的RSS订阅清单」为您精选全球最前沿的AI技术博客文章,深度剖析技术背后的核心洞察。
由 voieech.com 提供技术支持。





