x86(32b)、x64(64b) 的由来

x86、x64 的由来

  • 为什么通常用 x86 表示 32 位 cpu,x64 表示 64 位 cpu?
  • 为什么不用 x32 表示 32 位 cpu?

简单来说:“x86” 是家族姓氏,而 “x64” 是后来为了对称生造出来的市场营销名字。

这里的逻辑断层是因为这两个名字的来源完全不同:一个是基于芯片型号命名的,一个是基于位宽命名的。

我们来扒一下这段计算机历史。


1. 为什么叫 "x86"?(源自型号)

x86 并不是指“86位”,而是指 Intel 的 8086 系列 CPU。

  • 起源 (16-bit): 1978年,Intel 发布了划时代的 8086 处理器(16位)。
  • 延续: 随后发布了 8018680286
  • 32位革命: 到了 80386(即 i386),Intel 将架构扩展到了 32位。随后是 80486
  • 通配符 "x": 开发者和媒体发现这些芯片都以 "86" 结尾,于是用数学里的未知数 \(x\) 来代替前面的数字,统称为 x86 架构

1. 数学传统:\(x\) 代表未知数

在代数(Algebra)中,自 17 世纪法国数学家笛卡尔(René Descartes)以来,习惯上用字母表的最后几个字母(\(x, y, z\))来表示未知量,用前几个字母(\(a, b, c\))表示已知常量。

这种习惯深深影响了理工科思维。当人们看到一系列数字在变化,而后缀保持不变时,本能地就会用 \(x\) 去替代那个变化的数字。

2. 这里的 \(x\) 具体指代什么?

在 80 年代末到 90 年代初,Intel 的 CPU 命名遵循一个非常清晰的递增规律(通常省略前缀 80):

  • Gen 1: 8086
  • Gen 2: 80286 (常被称为 286)
  • Gen 3: 80386 (常被称为 386)
  • Gen 4: 80486 (常被称为 486)
  • Gen 5: 理论上应该是 586...

在这个序列中,2, 3, 4, 5 是变化的代(Generation),而 86 是不变的基底(Base)

为了用一个简短的术语概括“所有兼容 386/486 指令集的处理器家族”,技术圈就抽离出了这个变化的数字,用 \(x\) 代替:

\[x \in \{80, 1, 2, 3, 4, 5...\} \]

所以:\(x86\) = \([Any\ Number] + 86\)

这就像我们在写正则(Regex)或者 Glob pattern 时写 *86 或者 ?86 一样,但在口语和书面简写中,x* 更容易发音和书写。

3. 一个关键的历史转折:商标法逼出了 "x86"

还有一个非常现实的法律原因,导致了“x86”这个统称的固化。

在 386 和 486 时代,Intel 遇到了大麻烦。AMD 和 Cyrix 等竞争对手也生产兼容 CPU,并且也直接叫 "AMD 386" 或 "Cyrix 486"。

Intel 试图起诉他们侵权,但美国法院裁定:数字(如 386、486)是通用描述,不能注册为商标。 这意味着谁都可以卖叫 "486" 的芯片。

为了建立品牌护城河,Intel 在第 5 代处理器时,决定不再叫 "586",而是生造了一个单词 —— Pentium(奔腾)(词根 Pent- 代表 5)。

这就带来了一个命名法上的断层:

  • 产品名不再是数字了(Pentium, Core, Xeon...)。
  • 但底层的指令集架构(ISA)依然没变,依然是向下兼容 386/486 的。

于是,"x86" 就成了唯一的选择,用来指代“那个由 Intel 发明、以 86 结尾的数字系列发展而来、现在大家都在用的指令集架构”。它从一个简单的缩写,变成了一个正式的行业术语。

总结

x 是因为:

  1. 程序员/数学思维: \(x\) 是最标准的“变量”符号。
  2. 模式匹配: 286, 386, 486 -> x86。
  3. 行业需求: 当 Intel 改名 Pentium 后,业界急需一个中立的词来统称这个架构家族,x86 完美胜任。

关键点: 当时并没有“x32”这个叫法,因为 x86 这个名字已经深入人心,代表了整个指令集家族。哪怕到了奔腾(Pentium)时代,虽然名字变了,但本质上还是属于 x86 架构(32位)。

所以,x86 在很长一段时间里,默认就指代 32 位 的 Intel 架构。


2. 为什么叫 "x64"?(源自妥协与营销)

这涉及到一段 Intel 和 AMD 的恩怨情仇。

  • Intel 的傲慢 (IA-64): 2000年初,Intel 想要抛弃陈旧的 x86 包袱,搞了一个全新的纯 64 位架构,叫 Itanium (安腾),架构代号 IA-64。它不兼容 x86 代码,如果你想在上面跑老的 32 位程序,速度极慢。
  • AMD 的偷袭 (AMD64): AMD 此时做了一个聪明的决定。他们在原有的 x86(32位)基础上进行扩展,增加了 64 位寄存器,但保留了对 32 位的完美兼容。他们把这个架构命名为 AMD64(或者叫 x86-64)。
  • 市场的选择: 程序员和用户都讨厌 Intel 的 IA-64(因为不兼容),而疯狂拥抱 AMD64。Intel 被迫投降,在自己的 CPU 里也照抄了 AMD 的这套扩展指令集(起初还要面子叫 EM64T,后来也认了)。

名字的诞生:

操作系统厂商(主要是微软)和软件商在这个时候犯难了:

  • AMD64?Intel 肯定不干,毕竟 Intel 市场份额大。
  • x86-64?太长了,啰嗦。
  • IA-64?不行,那是安腾(Itanium)的专用名,已经失败了。

为了中立直观,大家决定模仿 x86 的叫法,但强调其 64位 的特性,于是生造了 x64 这个词。

3. 为什么不叫 "x32"?

其实在某些语境下,为了和 x64 对仗,人们确实会把 32 位 x86 称为 "x86-32"。

但不叫 x32 的主要原因有两点:

  1. 先入为主: 在 64 位普及之前,x86 已经统治世界几十年了。所有的文档、编译器开关、文件夹命名(如 Windows 下的 Program Files (x86))都已经固化了。强行改名叫 x32 会造成巨大的兼容性混乱。

  2. 程序员视角的 "x32" 其实存在(这是个冷知识):

    在 Linux 系统中,真的有一个叫 x32 ABI 的东西!

    • 它是啥? 它是 x64 架构下的一种混合模式。
    • 原理: 它使用 x64 的 16个 64位寄存器(性能好),但指针(Pointer)和 long 依然强制限制为 32位(省内存)。
    • 场景: 这种模式适合那些不需要大内存,但需要 x64 寄存器性能的程序。
    • 结论: 因为 x32 ABI 已经被占用了,所以如果你把标准的 32位 x86 叫作 x32,在 Linux 开发圈子里会产生歧义。

总结对照表

常用名称 正式架构名 位宽 来源逻辑
x86 IA-32 / i386 32-bit 继承自 8086 系列芯片的尾号。
x64 x86-64 / AMD64 64-bit 强调位宽,同时为了避免使用 "AMD64" 尴尬而创造的商业名称。
IA-64 Itanium 64-bit Intel 失败的纯 64 位架构,与 x64 不兼容。

所以,这实际上是历史遗留问题(Legacy)碰上了市场营销(Marketing)的结果。

作为程序员,你只需要记住:

看到 x86,想的是 Program Files (x86),即 32位兼容模式。

看到 x64,想的是 原生 64位模式。


附:8086 的由来

这是一个非常有趣的历史考古题。就像今天的 iPhone 16 不是因为它有 16 个屏幕,Intel 8086 的命名也不是单纯的随机数,而是技术传承产品序列的组合。

简单来说:"80" 是家族姓氏,"86" 是排辈序号。

我们需要把这个数字拆开来看:


1. 前缀 "80":Intel 处理器家族的代号

在 70 年代,Intel 的微处理器产品线确立了一个不成文的规矩:以 "80" 开头

这要追溯到它的祖先:

  • 8008 (1972年): Intel 第一款 8 位微处理器。
  • 8080 (1974年): 这是一款具有里程碑意义的 CPU,它引发了个人计算机革命(Altair 8800 就用的它)。它定义了后来大部分微处理器的基本架构。

因为 8080 太成功了,Intel 之后的处理器为了蹭这个热度,同时也为了表明“我是 8080 的直系后代/兼容版本”,都保留了 80 这个前缀。


2. 后缀 "86":为了压过 "85" 一头

为什么是 86?这需要看它的上一代产品:Intel 8085

  • Intel 8080 需要三种电压 (+5V, -5V, +12V) 才能工作,电路设计很麻烦。
  • Intel 8085 (1976年) 是 8080 的改良版。最大的改进是只需要单一 +5V 电源
    • 有一种广为流传的说法是:8085 名字里的 "5",正是代表它只需要 5V 电压。

到了 1978年,Intel 准备发布一款 16位 的处理器。 这款新 CPU 的设计目标是:虽然我是 16 位的,但我得让那些熟悉 8080/8085 的程序员感到亲切,汇编代码稍微改改就能移植过来。

在命名时:

  • 它是 8085 的下一代。
  • 按照序列逻辑,5 后面是 6。
  • 于是,8086 就诞生了。

3. 一个程序员视角的“冷知识”:它其实是个“备胎”

作为程序员,你可能会觉得 8086 这种开创了一个时代的 CPU 一定是 Intel 精心策划的旗舰产品吧?

完全不是。8086 其实是一个原本不被重视的“临时工”项目。

  • 真正的太子 (iAPX 432): 当时 Intel 倾全公司之力在研发一款名为 iAPX 432 的处理器。它极其超前:32位、硬件支持面向对象、支持垃圾回收、甚至硬件支持多任务调度。Intel 认为这才是未来。
  • 现实的危机: iAPX 432 研发极其困难,不断延期。而竞争对手 Zilog (Z80)Motorola (68000) 正在疯狂抢占市场。
  • 8086 的诞生: 为了填补 iAPX 432 难产留下的市场空白,Intel 临时拉了一支小分队,仅仅用了 10 个星期 就定义了 8086 的指令集,用稍微旧一点的工艺快速搞出了这个芯片。

结果:

  • 那个“完美的” iAPX 432 因为设计太复杂、性能太差,彻底失败了(它是 CISC 复杂指令集的巅峰反面教材)。
  • 而那个“临时拼凑”、“为了兼容旧代码”而设计的 8086,却因为 IBM PC 选择了它的阉割版兄弟(8088),意外地统治了接下来的 40 多年。

总结

  • 80:继承自 8080 家族,代表微处理器产品线。
  • 86:接续在 8085 之后,代表下一代升级产品。

所以,x86 这个名字的源头,其实就是一次“从 5 到 6”的版本号增量(Increment),充满了随意性和历史的巧合。

posted @ 2025-12-02 16:30  光風霽月  阅读(0)  评论(0)    收藏  举报