最近我遇到了与英特尔处理器相关的术语“识别寄存器”。它就像键值对“IdentificationRegisters”:“0x34AC34DC8901274A”。 既然我对这些与处理器相关的术语知之甚少(可能是为了识别它们!),我可以从这个社区得到一些关于这可能意味着什么的意见吗?
另外我想知道它们是否与寄存器EAX,EBX,ECX和EDX有关,因为在某处我看到了以下值:
Level EAX EBX ECX EDX
0x00000000 0x0000000b 0x756e6547 0x6c65746e 0x49656e69
0x00000001 0x000106a5 0x17100800 0x009ce3bd 0xbfebfbff
0x80000000 0x80000008 0x00000000 0x00000000 0x00000000
0x80000001 0x00000000 0x00000000 0x00000001 0x28100800
0x80000008 0x00003028 0x00000000 0x00000000 0x00000000
0x8000000a 0x00000000 0x00000000 0x00000000 0x00000000
如果有人可以帮助我理解这些东西,那就太好了。
答案 0 :(得分:1)
您可能意味着x86系列(不仅仅是英特尔)的通用功能,使用称为CPUID的机器指令提供有关特定处理器及其支持的功能的信息。
您可以直接在自己的程序中使用此指令,也可以通过现有的包装程序来了解您的CPU(大多数操作系统提供此类功能,或第三方程序告诉您有关CPU的信息,如CPU-Z)。
更常见的是,您可以使用它来确定您的程序是否支持某些优化(例如某个宽度的向量指令),并相应地调用优化代码。一些编译器使用这种技术生成优化的代码,以适应它运行的机器。
CPUID支持多种功能" (由RAX的值表示,在某些情况下也表示为RCX),并通过通用寄存器返回数据,这就是为什么你会看到提到RAX,RBX,......
这里有一个很好的摘要 - https://en.wikipedia.org/wiki/CPUID 虽然为了获得最准确的描述,您应该参考您的处理器手册(例如 - http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-2a-manual.pdf#G4.1062988)
最后但并非最不重要 - CPUID具有导致序列化的副作用,这就是它偶尔与时间检查或其他同步点一起使用的原因。我不会说这是一个很好的做法,因为它有很大的开销,但在这种情况下看到它是很常见的。