程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ cpuid指令正確理解

C++ cpuid指令正確理解

編輯:C++入門知識

C++編程語言應用范圍非常廣泛,其中有很多功能可以幫助我們實現一些特定的需求,並在一定程度上提高編程效率。在這裡我們會為大家介紹一下有關C++ cpuid指令的一些應用方法,方便大家理解。

  • C++類模板特化基本概念概述
  • C++非類型類模板參數基本概念正確理解
  • C++函數模板非類型參數應用注意事項總結
  • C++ typename不同應用方式介紹
  • C++內存分配應用技巧分享

1、什麼是C++ cpuid指令

CPUID指令是intel IA32架構下獲得CPU信息的匯編指令,可以得到CPU類型,型號,制造商信息,商標信息,序列號,緩存等一系列CPU相關的東西。

2、C++ cpuid指令的使用

cpuid使用eax作為輸入參數,eax,ebx,ecx,edx作為輸出參數,舉個例子:

  1. __asm  
  2. {  
  3. mov eax, 1  
  4. cpuid  
  5. ...  

以上代碼以1為輸入參數,執行cpuid後,所有寄存器的值都被返回值填充。針對不同的輸入參數eax的值,輸出參數的意義都不相同。為了更好的在C++中使用cpuid指令,可以使用類對指令進行封裝,在類中定義一個專門的函數負責cpuid的執行,他需要一個輸入參數。還需要定義四個成員變量存儲C++ cpuid指令執行以後返回來的值。由於這四個寄存器都是32位長的,可以使用unsinged long 類型變量存儲。

  1. typedef unsigned long DWORD  
  2. class CPUID  
  3. {  
  4. public:  
  5. ...  
  6. private:  
  7. void Executecpuid(DWORD eax); // 用來實現cpuid  
  8. DWORD m_eax; // 存儲返回的eax  
  9. DWORD m_ebx; // 存儲返回的ebx  
  10. DWORD m_ecx; // 存儲返回的ecx  
  11. DWORD m_edx; // 存儲返回的edx  
  12. ...  
  13. }  
  14. void CPUID::Executecpuid(DWORD veax)  
  15. {  
  16. // 因為嵌入式的匯編代碼不能識別 類成員變量  
  17. // 所以定義四個臨時變量作為過渡  
  18. DWORD deax;  
  19. DWORD debx;  
  20. DWORD decx;  
  21. DWORD dedx;  
  22. __asm  
  23. {  
  24. mov eax, veax ;將輸入參數移入eax  
  25. cpuid ;執行cpuid  
  26. mov deax, eax ;以下四行代碼把寄存器中的變量存入臨時變量  
  27. mov debx, ebx  
  28. mov decx, ecx  
  29. mov dedx, edx  
  30. }  
  31. m_eax = deax; // 把臨時變量中的內容放入類成員變量  
  32. m_ebx = debx;  
  33. m_ecx = decx;  
  34. m_edx = dedx;  

這樣就可以通過直接調用Executecupid()函數的方式來執行C++ cpuid指令了,返回值存在類成員變量m_eax, m_ebx, m_ecx和m_edx中。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved