CPUID 彙編指令

來源:互聯網
上載者:User

利用利用CPUID 彙編指令(機器碼:0FH A2H, 如果你的編譯器不支援CPUID 指令,只有emit 機器碼了), 該指令可以被如下CPU識別:

  Intel 486 以上的CPU,

  Cyrix M1 以上的CPU,

  AMD Am486 以上的CPU

  (1) 取CPU OEM 字串, 判斷CPU 廠商

  先讓EAX=0, 再調用CPUID

  Inel的CPU將返回:

EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX 將連成"GenuineIntel", 真正的Intel。

  Cyrix 的CPU 將返回:

EBX:43797269H
EDX:78496E73H
ECX:74656164H
"CyrixInstead","Cyrix 來代替"。

  AMD 的CPU 將返回:

EBX:41757468H
EDX:656E7469H
ECX:63414D44H
"AuthenticAMD", 可信的AMD。

  在Windows98中,用按右鍵"我的電腦",選擇" 屬性- 常規"在電腦描述 處就可看見CPU OEM 字串。

  (2)CPU 到底是幾86, 是否支援MMX

  先讓EAX=1,再調用CPUID

  EAX的8到11位就表明是幾86

  3 - 386
  4 - i486
  5 - Pentium
  6 - Pentium Pro Pentium II
  2 - Dual Processors

  EDX 的第0位:有無FPU

  EDX的第23位:CPU是否支援IA MMX,很重要啊 !如果你想用那57條新增的指 令,先檢查這一位吧,否則就等著看Windows 的"該程式執行了非法指令,將被關 閉" 吧。

  (3) 專門檢測是否P6架構

  先讓EAX=1,再調用CPUID

  如果AL=1,就是Pentium Pro 或Pentium II

  (4) 專門檢測AMD的CPU資訊

  先讓EAX=80000001H,再調用CPUID

  如果EAX=51H, 是AMD K5

  如 果EAX=66H, 是K6

  EDX第0 位: 是否有FPU( 多餘的 !誰用過沒FPU的K5,K6?)

  EDX 第23 位,CPU是否支援MMX,

  程式如下:

//------CPUID Instruction Demo Program------------
#include
#include
#pragma hdrstop
//------------------------------------------------
#pragma inline
#pragma argsused
int main(int argc, char **argv)
{
 char OEMString[13];
 int iEAXValue,iEBXValue,iECXValue,iEDXValue;
 _asm {
  mov eax,0
  cpuid
  mov DWORD PTR OEMString,ebx
  mov DWORD PTR OEMString 4,edx
  mov DWORD PTR OEMString 8,ecx
  mov BYTE PTR OEMString 12,0
 }
 cout< < "This CPU 's OEM String is:"< < OEMString< < endl;
 _asm {
  mov eax,1
  cpuid
  mov iEAXValue,eax
  mov iEBXValue,ebx
  mov iECXValue,ecx
  mov iEDXValue,edx
 }
 if(iEDXValue&0x800000)
  cout < < "This is MMX CPU"< < endl;
 else
  cout < < "None MMX Support."< < endl;
  int iCPUFamily=(0xf00 & iEAXValue) > >8;
  cout < < "CPU Family is:"< < iCPUFamily< < endl;
  _asm{
   mov eax,2
   CPUID
  }
  if(_AL==1)
   cout < < "Pentium Pro or Pentium II Found";
   getch();
 return 0;
}

  利用利用CPUID 彙編指令(機器碼:0FH A2H, 如果你的編譯器不支援CPUID 指令,只有emit 機器碼了), 該指令可以被如下CPU識別:

  Intel 486 以上的CPU,

  Cyrix M1 以上的CPU,

  AMD Am486 以上的CPU

  (1) 取CPU OEM 字串, 判斷CPU 廠商

  先讓EAX=0, 再調用CPUID

  Inel的CPU將返回:

EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX 將連成"GenuineIntel", 真正的Intel。

  Cyrix 的CPU 將返回:

EBX:43797269H
EDX:78496E73H
ECX:74656164H
"CyrixInstead","Cyrix 來代替"。

  AMD 的CPU 將返回:

EBX:41757468H
EDX:656E7469H
ECX:63414D44H
"AuthenticAMD", 可信的AMD。

  在Windows98中,用按右鍵"我的電腦",選擇" 屬性- 常規"在電腦描述 處就可看見CPU OEM 字串。

  (2)CPU 到底是幾86, 是否支援MMX

  先讓EAX=1,再調用CPUID

  EAX的8到11位就表明是幾86

  3 - 386
  4 - i486
  5 - Pentium
  6 - Pentium Pro Pentium II
  2 - Dual Processors

  EDX 的第0位:有無FPU

  EDX的第23位:CPU是否支援IA MMX,很重要啊 !如果你想用那57條新增的指 令,先檢查這一位吧,否則就等著看Windows 的"該程式執行了非法指令,將被關 閉" 吧。

  (3) 專門檢測是否P6架構

  先讓EAX=1,再調用CPUID

  如果AL=1,就是Pentium Pro 或Pentium II

  (4) 專門檢測AMD的CPU資訊

  先讓EAX=80000001H,再調用CPUID

  如果EAX=51H, 是AMD K5

  如 果EAX=66H, 是K6

  EDX第0 位: 是否有FPU( 多餘的 !誰用過沒FPU的K5,K6?)

  EDX 第23 位,CPU是否支援MMX,

  程式如下:

//------CPUID Instruction Demo Program------------
#include
#include
#pragma hdrstop
//------------------------------------------------
#pragma inline
#pragma argsused
int main(int argc, char **argv)
{
 char OEMString[13];
 int iEAXValue,iEBXValue,iECXValue,iEDXValue;
 _asm {
  mov eax,0
  cpuid
  mov DWORD PTR OEMString,ebx
  mov DWORD PTR OEMString 4,edx
  mov DWORD PTR OEMString 8,ecx
  mov BYTE PTR OEMString 12,0
 }
 cout< < "This CPU 's OEM String is:"< < OEMString< < endl;
 _asm {
  mov eax,1
  cpuid
  mov iEAXValue,eax
  mov iEBXValue,ebx
  mov iECXValue,ecx
  mov iEDXValue,edx
 }
 if(iEDXValue&0x800000)
  cout < < "This is MMX CPU"< < endl;
 else
  cout < < "None MMX Support."< < endl;
  int iCPUFamily=(0xf00 & iEAXValue) > >8;
  cout < < "CPU Family is:"< < iCPUFamily< < endl;
  _asm{
   mov eax,2
   CPUID
  }
  if(_AL==1)
   cout < < "Pentium Pro or Pentium II Found";
   getch();
 return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.