使用cpuid 指令存取Linux 上的CPU 資訊
在這個問題中,開發人員試圖使用方法類似於Windows API 中的_>
在這個問題中,開發人員試圖使用方法類似於Windows API 中的_ cpuinfo() 函數。提供的程式碼嘗試利用彙編指令(cpuid)來檢索此信息,但開發人員希望避免手動彙編的需要。 解決方案在於利用編譯程式碼時可用的 cpuid.h 頭檔海灣合作委員會。這個標頭宣告了兩個函數:<code class="c">unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig); int __get_cpuid(unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx);</code>__get_cpuid_max 函數傳回 cpuid 指令支援的最高輸入值。您可以將 __ext 指定為 0x0(表示基本資訊)或 0x8000000(表示擴充資訊)。 __get_cpuid 函數會擷取指定層級的 CPU 訊息,並傳回 eax、ebx、ecx 和 edx 暫存器中的資料。如果成功,則傳回非零值;如果不支援請求的級別,則傳回零。
使用範例:
<code class="c">#include <stdio.h> #include <cpuid.h> int main() { unsigned int eax, ebx, ecx, edx; // Get maximum supported CPUID level unsigned int max_level = __get_cpuid_max(0x0, NULL); // Iterate over different CPUID levels for (unsigned int level = 0; level <= max_level; level++) { // Retrieve CPUID data for the current level __get_cpuid(level, &eax, &ebx, &ecx, &edx); printf("Level %u: EAX=%u, EBX=%u, ECX=%u, EDX=%u\n", level, eax, ebx, ecx, edx); } return 0; }</code>
以上是如何在 Linux 中使用「cpuid」指令存取 CPU 資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!