但是为什么 "i586" 指的是奔腾一代,而 "i686" 指的是奔腾Pro呢?
英特尔转而使用名称进行市场营销,因为您可以对名称进行商标注册,但不能对数字进行商标注册。 (显然是根据美国法院的决定)。
人们(特别是Linux和GCC开发人员)发现在接下来的两代微架构系列中继续使用编号方案非常方便、简洁和/或“聪明”。
这种做法有一定的合理性:
奔腾所使用的微架构系列的正式名称为P5,这是英特尔第五代x86微架构。第一代奔腾P5的产品号为80500,后续版本的代码类似于80501和80502,但不是80586,但数字5也出现在其中。
但是数字5确实出现在微架构代码中。如今,微架构的名称为Nehalem或Skylake,但在此时期,我们有P5,然后是P54C(3.3伏特版本),其他一些版本,然后是P55C(Pentium MMX 80502),其中包括其他架构改进和更长的流水线(6个阶段对比5个阶段)。
PPro和PII/PIII基于P6微架构。 P6微架构家族的后续成员包括Pentium-M/Core和Core 2(令人困惑地称为“Core”微架构)。 Nehalem / Westmere是P6家族的最后一代,Sandybridge是一个新的、独立但相关的家族的开始。
但关键点在于,英特尔在其手册和文件中正式使用术语P6,其中包含数字6,因此完全有理由创造术语i686来描述支持新指令(如cmov)和/或执行乱序操作的CPU,或者你想要谈论的任何相关i686特性。
从Pentium和晚期486开始,CPU使用CPUID指令进行标识。 EAX=1 / cpuid
会在EAX中生成一个结果,告诉您CPU的家族、型号、步进。
(EAX=0 / cpuid
会给您提供一个供应商字符串:"GenuineIntel"
表示英特尔.)
http://www.sandpile.org/x86/cpuid.htm#level_0000_0001h
其他一些供应商对于与Pentium和PPro兼容的CPU报告了Family=4、5或6,例如AMD 5x86/k5/k6、NextGen、Centaur等。当然,它们有自己的供应商字符串,但通常将“家族”字段放入"i%d86"
printf格式字符串或类似的东西中并不完全疯狂。