C语言调用Intel处理器CPUID指令的实例
来源 https://blog.csdn.net/subfate/article/details/50789905
在Linux环境下,使用C语言内嵌汇编的手段使用CPUID指令,进而在高级语言层面上看到获取的信息。
实现文件cpuid.c代码如下:
struct cpuid_result { uint32_t eax; uint32_t ebx; uint32_t ecx; uint32_t edx; }; /* * Generic CPUID function */ static inline struct cpuid_result cpuid(unsigned int op) { struct cpuid_result result; __asm volatile( "mov %%ebx, %%edi;" "cpuid;" "mov %%ebx, %%esi;" "mov %%edi, %%ebx;" : "=a" (result.eax), "=S" (result.ebx), "=c" (result.ecx), "=d" (result.edx) : "0" (op) : "edi"); return result; } static inline unsigned int cpuid_eax(unsigned int op) { //unsigned int eax, ebx, ecx, edx; struct cpuid_result regs; regs = cpuid(op); return regs.eax; } void get_cpu_vendor(char* cpu_vendor, unsigned int* cpuid_level) { unsigned int cpuid_op = 0x00000000; char vendor_name[16] = {'