新聞中心
C++編程語言應用范圍非常廣泛,其中有很多功能可以幫助我們實現(xiàn)一些特定的需求,并在一定程度上提高編程效率。在這里我們會為大家介紹一下有關(guān)C++ cpuid指令的一些應用方法,方便大家理解。#t#

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、網(wǎng)站建設(shè)與策劃設(shè)計,開平網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:開平等地區(qū)。開平做網(wǎng)站價格咨詢:18980820575
1、什么是C++ cpuid指令
CPUID指令是intel IA32架構(gòu)下獲得CPU信息的匯編指令,可以得到CPU類型,型號,制造商信息,商標信息,序列號,緩存等一系列CPU相關(guān)的東西。
2、C++ cpuid指令的使用
cpuid使用eax作為輸入?yún)?shù),eax,ebx,ecx,edx作為輸出參數(shù),舉個例子:
- __asm
- {
- mov eax, 1
- cpuid
- ...
- }
以上代碼以1為輸入?yún)?shù),執(zhí)行cpuid后,所有寄存器的值都被返回值填充。針對不同的輸入?yún)?shù)eax的值,輸出參數(shù)的意義都不相同。為了更好的在C++中使用cpuid指令,可以使用類對指令進行封裝,在類中定義一個專門的函數(shù)負責cpuid的執(zhí)行,他需要一個輸入?yún)?shù)。還需要定義四個成員變量存儲C++ cpuid指令執(zhí)行以后返回來的值。由于這四個寄存器都是32位長的,可以使用unsinged long 類型變量存儲。
- typedef unsigned long DWORD
- class CPUID
- {
- public:
- ...
- private:
- void Executecpuid(DWORD eax); // 用來實現(xiàn)cpuid
- DWORD m_eax; // 存儲返回的eax
- DWORD m_ebx; // 存儲返回的ebx
- DWORD m_ecx; // 存儲返回的ecx
- DWORD m_edx; // 存儲返回的edx
- ...
- }
- void CPUID::Executecpuid(DWORD veax)
- {
- // 因為嵌入式的匯編代碼不能識別 類成員變量
- // 所以定義四個臨時變量作為過渡
- DWORD deax;
- DWORD debx;
- DWORD decx;
- DWORD dedx;
- __asm
- {
- mov eax, veax ;將輸入?yún)?shù)移入eax
- cpuid ;執(zhí)行cpuid
- mov deax, eax ;以下四行代碼把寄存器中的變量存入臨時變量
- mov debx, ebx
- mov decx, ecx
- mov dedx, edx
- }
- m_eax = deax; // 把臨時變量中的內(nèi)容放入類成員變量
- m_ebx = debx;
- m_ecx = decx;
- m_edx = dedx;
- }
這樣就可以通過直接調(diào)用Executecupid()函數(shù)的方式來執(zhí)行C++ cpuid指令了,返回值存在類成員變量m_eax, m_ebx, m_ecx和m_edx中。
本文標題:C++ cpuid指令正確理解
標題網(wǎng)址:http://m.fisionsoft.com.cn/article/djejssh.html


咨詢
建站咨詢
