2010-09-29 4 views

ответ

3

Вот минимальный пример того, как вы бы идти о поиске его помощью CPUID инструкции:

#include <stdio.h> 
#include <limits.h> 

#define cpuid(id) __asm__("cpuid" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(id), "b"(0), "c"(0), "d"(0)) 
#define b(val, base, end) ((val << (__WORDSIZE-end-1)) >> (__WORDSIZE-end+base-1)) 

int main(int argc, char **argv) 
{ 
     unsigned long eax, ebx, ecx, edx; 

     cpuid(0); 
     printf("identification: \"%.4s%.4s%.4s\"\n", (char *)&ebx, (char *)&edx, (char *)&ecx); 

     printf("cpu information:\n"); 

     cpuid(1); 
     printf(" family %ld model %ld stepping %ld efamily %ld emodel %ld\n", 
         b(eax, 8, 11), b(eax, 4, 7), b(eax, 0, 3), b(eax, 20, 27), b(eax, 16, 19)); 
     printf(" brand %ld cflush sz %ld*8 nproc %ld apicid %ld\n", 
         b(ebx, 0, 7), b(ebx, 8, 15), b(ebx, 16, 23), b(ebx, 24, 31)); 

     cpuid(0x80000006); 
     printf("L1 cache size (per core): %ld KB\n", b(ecx, 16, 31)); 

     return(0); 
} 
1

Вы можете использовать инструкцию CPUID. Если вы установите регистр EAX на определенные значения, вы можете получить необходимую информацию в регистрах EAX, EBX, ECX и EDX.

Информация о вас может быть получена this guide от AMD.

0

Как предлагает Soravux, принципиальная схема CPUID - это то, что вы хотите посмотреть. (Возможно, вам стоит взглянуть на CPUID, например, на Руководство разработчика программного обеспечения Intel 64 и IA-32, том 2A, here).

Функции, которые вас, скорее всего, будут интересовать, следующие: CPUID.EAX=02h и/или CPUID.EAX=04h (в зависимости от ваших конкретных потребностей). Эти функции дают довольно много результатов, поэтому я не буду подробно останавливаться на этом, но руководства Intel и AMD должны содержать все, что вам нужно.

Смежные вопросы