这是Linux内核似乎使用的内容:
static inline void native_cpuid(unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx){ asm volatile("cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "0" (*eax), "2" (*ecx));}然后可以将其用作例如:
#include <stdio.h>int main(int argc, char **argv){ unsigned eax, ebx, ecx, edx; eax = 1; native_cpuid(&eax, &ebx, &ecx, &edx); printf("stepping %dn", eax & 0xF); printf("model %dn", (eax >> 4) & 0xF); printf("family %dn", (eax >> 8) & 0xF); printf("processor type %dn", (eax >> 12) & 0x3); printf("extended model %dn", (eax >> 16) & 0xF); printf("extended family %dn", (eax >> 20) & 0xFF); eax = 3; native_cpuid(&eax, &ebx, &ecx, &edx); printf("serial number 0x%08x%08xn", edx, ecx);}这篇Wikipedia文章中有关如何使用该
CPUID指令的很好参考。
编辑 Wikipedia文章说,序列号是随Pentium
III一起引入的,但是由于隐私问题,以后的型号中不再使用该序列号。在Linux系统上,您可以通过执行以下操作检查此功能(PSN位)是否存在:
grep -i --color psn /proc/cpuinfo
如果未显示任何内容,则您的系统不支持处理器序列号。



