Cod*_*ray -3 cpu x86 assembly intel instructions
举个例子,我想确切地知道哪个x86处理器系列支持该fisttp
指令.我很确定它在奔腾4及更高版本上得到了支持,但我想对此进行一些官方验证.更重要的是,我想知道它是否得到了进一步的支持:它是否可以在Pentium III上使用?
我尝试了所有明显的谷歌搜索术语,但在网上几乎没有关于这个特定指令的任何内容.即使有,这也不是一个好的通用解决方案.
我了解英特尔IA-32架构的手册,可在网上点击这里.查看指令集参考,A-Z,我可以找到我感兴趣的指令以及有关它的大量有趣信息.但是在那本手册中没有任何地方告诉我哪些处理器系列支持每条指令,甚至是第一次引入时.
我试图找到本手册的旧版本(即奔腾III系列),但我空了 - 所有链接都指向上面链接的页面,并附有当前版本的手册.此外,为每个家庭挖掘手册是很多工作,看看我关心的指令是否存在.
当然,这些信息是其他人经常查看的信息......他们使用什么资源?
注意:对于粗心的读者,请注意我不会询问如何在运行时以编程方式确定此信息.我想坐在我的办公桌前.
一般来说,这里实际上不可能有一个整洁的答案.虽然"更大"的指令集扩展(SSE,SSE2,...,AVX)往往会增加(从某种意义上说,一旦它们被添加,它们就不会消失),有许多较小的ISA扩展,如(英特尔认为AESNI和TSX一样)是英特尔认为可选的; 在最初添加之后,一个系列中的各个处理器可能包含或排除该功能,具体取决于您支付的金额.
以AESNI为例; 这些说明是在Westmere/Clarkdale/Arrandale中添加的,但只有i5和i7变种才有它们(IIRC,它们在某些i5 SKU中也被禁用).在下一代(Sandybridge),他们只是i5和i7,根据维基百科,有时在BIOS中被禁用.在Ivybridge,它们仍然是i5/i7,除了一个或两个高端i3 SKU.
因此,尽管人们可以对SSE,SSE2,...,SSE4.x,AVX,AVX2进行广泛的陈述,这些陈述"大部分"都是正确的(甚至对于迄今为止所有出货的CPU都是正确的),唯一真正正确的答案是检查如果在运行时通过查看英特尔建议的相应功能位可获得指令.这正是你不想要的答案.抱歉.
对于"如何近似回答这个问题"的更一般性问题,维基百科是一个非常好的参考.对于特定的处理器型号而不是系列,请使用ark.intel.com.
实际上,您已经有了答案:找到此类信息的最佳资源是 CPU 制造商的文档。
如果您仔细查看,您(几乎)链接到的英特尔手册包含您在示例中所需的所有信息FISTTP
:它明确列为 SSE3 指令(请参阅此处:第 1 卷,第 5.7.1 节 of Intel 64 和 IA- 32 架构软件开发人员手册,2013 年 6 月)。这意味着任何支持 SSE3 指令集的 CPU 都应该支持FISTTP
.
就现代指令集而言(SSE、AVX、BMI ……,你说出来的),英特尔手册确实很好地详细说明了CPUID
任何指令所属的指令集(和相关的功能标志),几乎可以追溯到到CPUID
引入时的指令(晚期 80486 CPU)。有了这些信息,就可以很容易地确定哪个 CPU 型号支持给定的指令。
我不确定英特尔手册在找出真正古老的东西何时被引入时效果如何(对于 486 之前的 CPU,我有一份 1992 年的旧硬拷贝 Microsoft MASM 参考手册,其中详细介绍了这些东西)。但是,如果这些信息无法通过 google 获取,我会感到惊讶——无论如何,这些非常古老的更改(例如BT
在 386 上引入说明)现在可能只是从学术角度来看才有趣。