**
在linux環境下,使用c語言內嵌彙編的手段使用cpuid指令,進而在高階語言層面上看到獲取的資訊。
實現檔案cpuid.c**如下:
struct主函式實現**如下:cpuid_result ;
/** generic cpuid function
*/static inline struct cpuid_result cpuid(unsigned int
op)static inline unsigned int cpuid_eax(unsigned int
op)void get_cpu_vendor(char* cpu_vendor, unsigned int*cpuid_level)
;
struct
cpuid_result result;
unsigned
int level = 0
; vendor_name[
0] = '
\0'; /*
unset
*/result = cpuid(cpuid_op); //
eax為0表示讀取vendor id,一共12位元組,依次在ebx、edx、ecx。
level =result.eax;
vendor_name[
0] = (result.ebx >> 0) & 0xff
; vendor_name[
1] = (result.ebx >> 8) & 0xff
; vendor_name[
2] = (result.ebx >> 16) & 0xff
; vendor_name[
3] = (result.ebx >> 24) & 0xff
; vendor_name[
4] = (result.edx >> 0) & 0xff
; vendor_name[
5] = (result.edx >> 8) & 0xff
; vendor_name[
6] = (result.edx >> 16) & 0xff
; vendor_name[
7] = (result.edx >> 24) & 0xff
; vendor_name[
8] = (result.ecx >> 0) & 0xff
; vendor_name[
9] = (result.ecx >> 8) & 0xff
; vendor_name[
10] = (result.ecx >> 16) & 0xff
; vendor_name[
11] = (result.ecx >> 24) & 0xff
; vendor_name[
12] = '\0'
; strcpy(cpu_vendor, vendor_name);
*cpuid_level =level;
}void get_cpu_id(char* cpu_id, unsigned int*cpu_sign)
struct
cpuinfo_x86 ;
//參考ia32開發手冊第2卷第3章。cpuid exa==0x01的圖3-6
static inline void get_fms(struct cpuinfo_x86 *c, uint32_t tfms)
void get_cpu_fms(unsigned int* family, unsigned int* model, unsigned int*stepping)
void get_cpu_name(char*processor_name)
temp_processor_name[
49] = '
\0'; //
最後的位元組為0,結束
/*skip leading spaces.
*/processor_name_start =temp_processor_name;
while (*processor_name_start == '')
processor_name_start++;
memset(processor_name,
0, 49
); strcpy(processor_name, processor_name_start);
}void get_address_bits(unsigned int* linear, unsigned int*physical)
intel處理器的cpuid遠不止上文所述,詳情請參考intel ia32軟體開發手冊。
在gcc中獲取cpuid資訊(相容vc)
*************************== end
Intel處理器系列
intel處理器系列俗稱x86,經歷了乙個長期的 不斷進化的發展過程。1.8086 1978年,29k個電晶體 它是第一代單晶元 16位微處理器之一。2.80286 1982年,134k個電晶體 它增加了更多的定址模式。3.i386 1985年,275k個電晶體 擴充套件到了32位,增加了平坦的定址...
Intel處理器基本暫存器
ia 32架構提供16個基本程式執行暫存器,用於一般系統和應用程式程式設計 這些暫存器可分為如下四類 通用暫存器主要儲存指令運算過程中的各類資料,包括 ia 32架構下共包含了8個通用暫存器,依次命名為eax ebx ecx edx esi edi ebp esp。儘管這些暫存器都可用於通用資料的儲...
協處理器CP15
在基於arm的嵌入式應用系統中,儲存系統通常是通過系統控制協處理器cp15完成的。arm處理器使用協處理器15 cp15 的暫存器來控制cache tcm和儲存器管理。cp15包含16個32位的暫存器,其編號為0 15。mcr arm暫存器到協處理器暫存器的資料傳送 mrc 協處理器暫存器到arm暫...