CPUID指令介紹
CPUID指令
1. CPUID指令代碼: 0a20f
例:
{
CPUID MACRO
dw 0a20fh
ENDM
}
2. CPUID有效檢測
如果程序可以改變EFLAGE(擴展標誌字)的第21位,那麼CPUID有效,
否則無效。
注:對於Cyrix的CPU,在打開其內部CPUID標誌位之前,用此方法檢測
無效。
例:
{
...
pushfd
pop eax
mov ecx,eax
xor eax,200000h ;強制擴展標誌位第21位爲1
push eax
popfd
pushfd
pop eax
xor eax,ecx ;如果擴展標誌位的第21位爲1,那麼
je no_cpuid ;CPUID存在,否則不存在
jmp have_cpuid
...
}
3. CPUID指令
(1)基本指令
1.第0號功能: (EAX=0)
調用寄存器:
EAX=0
返回寄存器:
EAX=最大功能號
EBX:EDX:ECX=CPU廠商識別串
例:
{
...
xor eax,eax ;調用0號功能
CPUID ;執行CPUID指令
cmp ebx,"Genu" ;判斷EBX:EDX:ECX是否爲"GenuineIntel"
jne no_intel ;如果是則該CPU的廠商爲Intel,否則則不是
cmp edx,"ineI"
jne no_intel
cmp ecx,"ntel"
jne no_intel
jmp is_intel
...
}
2.第1號功能: (EAX=1)
調用寄存器
EAX=1
返回寄存器
EAX=CPU說明
CPU說明(見附錄1)
{
bit 內容
0--3 節率 (stepping)
4--7 型號 (model)
8--11 家族 (family)
}
EDX=特徵標誌字
{
bit 內容 縮寫
0 FPU On-chip FPU
1 Virtual Mode Extension VME
2 Debugging Extension DE
3 Page Size Extension PSE
4 Time Stamp Counter TSC
5 RDMSR/WRMSR Instructions
6 Physical Address Extension PAE
7 Machine Check Exception MCE
8 CMPXCHG8B Instruction
9 On-chip APIC HardWare
10 Undefined
11 SYSENTER/SYSEXIT Instructions
12 Memory Type Range Registers
13 Page Global Enable PGE
14 Machine Check Architecture MCA
15 Conditional Move Instruction CMI
16 Page Attribute Table PAT
17--22 Undefined
23 MMX Instructions MMX
24 internet Streaming SIMD Extensions SSE
25--31 Undefined
}
(2)擴展指令
1.第80000000號功能(EAX=80000000h)
調用寄存器:
EAX=80000000h
返回寄存器:
EBX,ECX,EDX=保留
EAX=最大功能號
2.第80000001號功能
調用寄存器:
EAX=80000001h
返回寄存器:
EAX=CPU說明(見第1號功能)
EDX=擴展特徵標誌字
{
EDX[0] <- FPU: FPU on Chip
EDX[1] <- VME: Virtual Mode Extention present
EDX[2] <- DE: Debbuging Extentions
EDX[3] <- PSE: CPU support 4MB size pages
EDX[4] <- TSC: TSC present (See RDTSC command)
EDX[5] <- MSR: CPU have K5 Compatible MSRs
EDX[6] <- 0 (Reserved)
EDX[7] <- MCE: Machine Check exception
EDX[8] <- CX8: Support CMPXCHG8B instruction
EDX[9] <- Reserved
EDX[10]<- Support SYSCALL and SYSRET instruction (!!!)
EDX[11,12]<- reserved
EDX[13]<- PGE: Page Global Feature support
EDX[14]<- reserved
EDX[15]<- CMOV: CPU support CMOV instruction
EDX[16]<- FCMOV: CPU support FP. FCMOV (!!!)
EDX[22..16] <- Reserved
EDX[23] <- MMX: CPU support IA MMX
EDX[24] <- (Cyrix) Cyrix Extended MMX
EDX[30..24] <- Reserved
EDX[31] <- AMD 3DNow!
}
(附錄1)各類CPU參數
1. Cyrix
廠商識別串: "CyrixInstead"
CPU名稱 家族 型號
MediaGX 4 4
6x86 5 2 (特徵標誌字=0x1)
6x86L 5 2 (特徵標誌字=0x105)
GXm 5 4
6x86MX 6 0
2. NexGen
廠商識別串: "NexGenDriven"
CPU名稱 家族 型號
Nx586 5
3. UMC
廠商識別串: "UMC UMC UMC "
CPU名稱 家族 型號
U5D 4 1
U5S 4 2
4. AMD
廠商識別串: "AuthenticAMD"
CPU名稱 家族 型號
486DX2WT 4 3
486DX2WB 4 7
486DX4WT 4 8
486DX4WB 4 9
5x86WT 4 0x0e
5x86WB 4 0x0f
486 4 Others
K5/SS 5 0
K5 5 1,2,3
K6 5 6,7
K6-2 5 8
K6-III 5 9
K5/K6 5 Others
K7工程樣本 6 0
K7 6 Others
5. IDT
廠商識別串: "CentaurHauls"
CPU名稱 家族 型號
WinChip C6 5 4
WinChip 2 5 8
6 Rise
廠商識別串: "RiseRiseRise"
CPU名稱 家族 型號
mP6 5 0
7. Intel
廠商識別串: "GenuineIntel"
CPU名稱 家族 型號
PentiumII 6 3
Celeron 6 5
CeleronA 6 6
PentiumIII 6 7
PentiumPro OverDrive P6 6 1
PentiumPro 6 Others
PentiumP5 5 1
PentiumP54C 5 2
Pentiumi486 5 3
PentiumMMX 5 4
PentiumDX4 5 5
Pentium OverDrive P5 5 6
Pentium 5 Others
486DX 4 0,1
486SX 4 2
486DX2 4 3
486SL 4 4
486SX2 4 5
486DX2_WB 4 7
486DX4 4 8
1. CPUID指令代碼: 0a20f
例:
{
CPUID MACRO
dw 0a20fh
ENDM
}
2. CPUID有效檢測
如果程序可以改變EFLAGE(擴展標誌字)的第21位,那麼CPUID有效,
否則無效。
注:對於Cyrix的CPU,在打開其內部CPUID標誌位之前,用此方法檢測
無效。
例:
{
...
pushfd
pop eax
mov ecx,eax
xor eax,200000h ;強制擴展標誌位第21位爲1
push eax
popfd
pushfd
pop eax
xor eax,ecx ;如果擴展標誌位的第21位爲1,那麼
je no_cpuid ;CPUID存在,否則不存在
jmp have_cpuid
...
}
3. CPUID指令
(1)基本指令
1.第0號功能: (EAX=0)
調用寄存器:
EAX=0
返回寄存器:
EAX=最大功能號
EBX:EDX:ECX=CPU廠商識別串
例:
{
...
xor eax,eax ;調用0號功能
CPUID ;執行CPUID指令
cmp ebx,"Genu" ;判斷EBX:EDX:ECX是否爲"GenuineIntel"
jne no_intel ;如果是則該CPU的廠商爲Intel,否則則不是
cmp edx,"ineI"
jne no_intel
cmp ecx,"ntel"
jne no_intel
jmp is_intel
...
}
2.第1號功能: (EAX=1)
調用寄存器
EAX=1
返回寄存器
EAX=CPU說明
CPU說明(見附錄1)
{
bit 內容
0--3 節率 (stepping)
4--7 型號 (model)
8--11 家族 (family)
}
EDX=特徵標誌字
{
bit 內容 縮寫
0 FPU On-chip FPU
1 Virtual Mode Extension VME
2 Debugging Extension DE
3 Page Size Extension PSE
4 Time Stamp Counter TSC
5 RDMSR/WRMSR Instructions
6 Physical Address Extension PAE
7 Machine Check Exception MCE
8 CMPXCHG8B Instruction
9 On-chip APIC HardWare
10 Undefined
11 SYSENTER/SYSEXIT Instructions
12 Memory Type Range Registers
13 Page Global Enable PGE
14 Machine Check Architecture MCA
15 Conditional Move Instruction CMI
16 Page Attribute Table PAT
17--22 Undefined
23 MMX Instructions MMX
24 internet Streaming SIMD Extensions SSE
25--31 Undefined
}
(2)擴展指令
1.第80000000號功能(EAX=80000000h)
調用寄存器:
EAX=80000000h
返回寄存器:
EBX,ECX,EDX=保留
EAX=最大功能號
2.第80000001號功能
調用寄存器:
EAX=80000001h
返回寄存器:
EAX=CPU說明(見第1號功能)
EDX=擴展特徵標誌字
{
EDX[0] <- FPU: FPU on Chip
EDX[1] <- VME: Virtual Mode Extention present
EDX[2] <- DE: Debbuging Extentions
EDX[3] <- PSE: CPU support 4MB size pages
EDX[4] <- TSC: TSC present (See RDTSC command)
EDX[5] <- MSR: CPU have K5 Compatible MSRs
EDX[6] <- 0 (Reserved)
EDX[7] <- MCE: Machine Check exception
EDX[8] <- CX8: Support CMPXCHG8B instruction
EDX[9] <- Reserved
EDX[10]<- Support SYSCALL and SYSRET instruction (!!!)
EDX[11,12]<- reserved
EDX[13]<- PGE: Page Global Feature support
EDX[14]<- reserved
EDX[15]<- CMOV: CPU support CMOV instruction
EDX[16]<- FCMOV: CPU support FP. FCMOV (!!!)
EDX[22..16] <- Reserved
EDX[23] <- MMX: CPU support IA MMX
EDX[24] <- (Cyrix) Cyrix Extended MMX
EDX[30..24] <- Reserved
EDX[31] <- AMD 3DNow!
}
(附錄1)各類CPU參數
1. Cyrix
廠商識別串: "CyrixInstead"
CPU名稱 家族 型號
MediaGX 4 4
6x86 5 2 (特徵標誌字=0x1)
6x86L 5 2 (特徵標誌字=0x105)
GXm 5 4
6x86MX 6 0
2. NexGen
廠商識別串: "NexGenDriven"
CPU名稱 家族 型號
Nx586 5
3. UMC
廠商識別串: "UMC UMC UMC "
CPU名稱 家族 型號
U5D 4 1
U5S 4 2
4. AMD
廠商識別串: "AuthenticAMD"
CPU名稱 家族 型號
486DX2WT 4 3
486DX2WB 4 7
486DX4WT 4 8
486DX4WB 4 9
5x86WT 4 0x0e
5x86WB 4 0x0f
486 4 Others
K5/SS 5 0
K5 5 1,2,3
K6 5 6,7
K6-2 5 8
K6-III 5 9
K5/K6 5 Others
K7工程樣本 6 0
K7 6 Others
5. IDT
廠商識別串: "CentaurHauls"
CPU名稱 家族 型號
WinChip C6 5 4
WinChip 2 5 8
6 Rise
廠商識別串: "RiseRiseRise"
CPU名稱 家族 型號
mP6 5 0
7. Intel
廠商識別串: "GenuineIntel"
CPU名稱 家族 型號
PentiumII 6 3
Celeron 6 5
CeleronA 6 6
PentiumIII 6 7
PentiumPro OverDrive P6 6 1
PentiumPro 6 Others
PentiumP5 5 1
PentiumP54C 5 2
Pentiumi486 5 3
PentiumMMX 5 4
PentiumDX4 5 5
Pentium OverDrive P5 5 6
Pentium 5 Others
486DX 4 0,1
486SX 4 2
486DX2 4 3
486SL 4 4
486SX2 4 5
486DX2_WB 4 7
486DX4 4 8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.