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
CPUID
cmp ebx, "Genu "
jne no_intel
cmp edx, "ineI "
jne no_intel
cmp ecx, "ntel "
jne no_intel
jmp is_intel
...
合并ebx,edc,ecx寄存器的值,如果为GenuineIntel,就是Intel的CPU
另:
AuthenticAMD => AMD
CyrixInstead => Cyrix,被VIA兼并了
NexGenDriven => NextGen
RiseRiseRise => Rise
UMC UMC UMC => UMC
CentaurHauls => IDT
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. 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
Celeron 7,8 1
Pentium III Xeon 7,8 3
Pentium IV 7,8 4
Pentium III 7,8 L2Cache <1024
Pentium III Xeon 7,8 other
Pentium III Xeon 10($A)
Pentium VI or Ithanium 15($F)
用其它开发工具做个动态链接库文件供VB调用!
some website FYI
http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2000/larry/finalasm.htm
http://www.sun.com/products-n-solutions/hardware/docs/html/816-2485-12/asm.html#57334
分享到:
相关推荐
使用内嵌汇编调用CPUID指令”的方式获取CPU信息。首先使用内嵌汇编调用CPUID指令来获取CPUID、CPU厂商、CPU Brand、CPU Family、CPU Model、CPU Stepping ID,然后采用MD5算法计算CPU信息的Hash值。
在IT领域,Intel处理器的CPUID指令是程序员和硬件工程师们深入理解处理器特性和功能的重要工具。这份由Intel发布的文档,即"Intel® Processor Identification and the CPUID Instruction Application Note 485",...
CPUID指令在系统开发、维护以及性能调优领域发挥着重要作用,为深入理解和充分利用硬件资源提供了可能。 CPUID指令的全称是“Central Processing Unit Identification”,即“中央处理器标识指令”。它能够返回关于...
intel IA32构架cpuid指令详解,有助于帮助你了解intel 如何获取特定的CPUID信息。
本文档标题为《英特尔® 处理器识别以及CPUID指令》,是一份详细的应用笔记,用于指导用户如何通过CPUID指令来识别英特尔处理器。CPUID指令是英特尔处理器中的一项重要指令,用于提供处理器的详细信息,包括处理器的...
2. **执行CPUID指令**:调用CPUID指令,获取返回值。 3. **解析返回值**:检查EBX寄存器的第26位(对于SSE2来说),如果该位置1,则表示处理器支持SSE2指令集。 4. **输出结果**:根据解析的结果输出相应的信息。 #...
### CPUID指令详解 在计算机科学领域,CPUID指令是一个重要的功能,主要用于识别处理器的特性、类型以及制造商信息。此指令对于系统软件如操作系统、BIOS等尤其关键,因为它们可以利用这些信息来优化硬件资源的管理...
为了更好地支持开发者利用其处理器的强大功能,AMD发布了一系列的技术文档,其中《AMD CPUID Specification》是专门介绍如何通过CPUID指令来识别和获取AMD处理器相关信息的重要文档。本文将基于此文档对AMD CPUID...
在实际编程中,如`CPUID.cpp`这样的源文件可能会包含对CPUID指令的封装,通过C++代码调用汇编语言实现的函数来获取CPU信息。`CPUID.dsp`和`.dsw`文件则是项目文件,通常用于Visual Studio这样的IDE,用于组织和管理...
### CPUID:Intel处理器识别与CPUID指令应用说明 #### 概述 CPUID(Central Processing Unit Identification)是一项由Intel开发的技术,它主要用于提供处理器详细信息的功能。此技术通过CPUID指令来实现,该指令...
首先,我们需要了解CPUID指令的基本工作原理。CPUID指令是x86架构处理器提供的一条汇编指令,其基本形式为`CPUID`。执行这个指令时,会根据输入的参数EAX寄存器中的值,返回处理器相关信息到EAX、EBX、ECX和EDX...
这个压缩包可能是为了帮助开发者理解和使用CPUID指令,或者在程序中检测和利用处理器特性。 描述中的"cpuid检测的vc实现,有汇编代码,asm嵌入"进一步说明了这个项目的内容。"vc实现"意味着它是用Microsoft的Visual ...
1. **调用CPUID指令**:在x86架构的处理器中,CPUID指令的编码为`0Fh 01h D0h`。在汇编语言中,我们可以用`CPUID`关键字来表示这个操作。 2. **选择信息类型**:CPUID指令有一个输入参数EAX,它的值决定了返回信息...
`cpuid_hook`是一个涉及到计算机硬件交互和操作系统内核编程的技术主题,主要通过虚拟化技术中的VMX(Virtual Machine Extensions)来实现对CPUID指令的钩子(hook)。CPUID是一个在x86架构下的处理器指令,用于获取...
`cpuid.tar.gz_CPUID`是一个压缩包,其中包含了两个文件:`cpuid.cpp`和`cpuid.h`,它们很可能是用于实现一个C++程序,以利用CPUID指令来探测和显示CPU的具体信息。 `cpuid`指令是x86架构处理器提供的一种机制,...
CPUID指令在汇编语言中通过一个特殊的CPU指令执行,其主要目的是获取处理器的能力、制造商信息、时钟速度、缓存大小等关键数据。在这个“CPUID.rar”压缩包中,包含了一个名为“CPUID.ASM”的汇编源代码文件,可能是...
"CPUID.zip"这个压缩包可能包含了与CPUID相关的工具或库,特别是"CPUID_HOOK_CPUID.dll"和"CpuId DLL_hook cpuid"这两个文件,它们可能是一个动态链接库(DLL)文件,用于钩取(hook)CPUID指令,从而在CPU执行CPUID...
在给定的"获取cpuid的源代码"中,我们可以推测这是一个C++程序,它实现了通过CPUID指令获取CPU序列号的功能。以下是对这个主题的详细阐述: 首先,CPUID是一个特权指令,只能在ring0级别执行,也就是在操作系统内核...
CPUID指令是x86架构处理器提供的一种汇编语言指令,用于获取处理器的特性信息,如制造商标识、处理器型号、功能特征等。`cpuid_ex.zip`中的内容显然是关于如何使用CPUID指令的一个实例,主要面向汇编语言的学习者和...
标题中的"CPUID.ZIP_cpuid delphi_delphi cpuid_zip"表明这是一个关于使用Delphi编程语言实现CPUID指令的项目压缩包。CPUID是x86架构处理器提供的一种指令,用于获取处理器相关信息,如型号、特性、缓存信息等。 在...