能给代码吗?不胜感谢.
解决方案 »
- 这个SQL语句为什么错了
- delphi iocp component问题,关键词:delphi iocp 内存溢出
- Rave 具体操作或这方面的电子中文帮助,帮帮我吧!
- 急呀,!TDBChart的简单问题,在线等待。解决立即发分。
- 请教:用异或方式在地图上rectangle画点,为什么有时会出现删不干净点的情况?
- 集合问题
- 过完春节去深圳,边防证哪里办啊?我在北京海淀。
- 急!高分!用mscomm编程时,怎么样在二进制形式下,把mscomm1.input输入二进制转化成字符!
- Excel中的自动提示以前输入的字符功能是如何实现的?内详>>>
- 在线等待!怎样获得键盘的左右键信息?
- 我需要调用对话框函数messagedlg的第二种重载格式:
- 如何让TDbGrid的标题变平,就是不要3d的,纯平面,急
下面这个函数会返回一个字符串列表及特性集合,这个函数只对Intel 486及以上的CPU有效。其他CPU将返回[cpuNonIntel] 或 [cpuNoCPUID].用法:GetCpuFeatures(memo1.Lines);支持的特性
---------------------------------------
CPU Family 6
CPU Model 7
CPU Stepping 3
On-Chip FPU
VirtualMode Extensions
Debugging Extensions
Page Size Extensions
Time Stamp Counter
Model Specific Registers
Physical Address Extensions
Machine Check Extensions
CMPXCHG8B Instruction
Fast System Call
Memory Type Range Registers
Page Global Enable
Machine Check Architecture
Conditional Move Instruction
Page Attribute Table
32 Bit Page Size Extension
Intel MMX Technology
Fast Floating Point Save and Restore
Streaming SIMD Extensionsunit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations } end; TCpuFeature = (cpuNoCPUID,cpuNonIntel,cpuOnChipFPU,
cpuVirtualModeExtensions,cpuDebuggingExtensions,
cpuPageSizeExtensions,cpuTimeStampCounter,
cpuModelSpecificRegisters,cpuPhysicalAddressExtensions,
cpuMachineCheckExtensions,cpuCMPXCHG8B,cpuOnChipAPIC,
cpuFastSystemCall,cpuMemoryRangeRegisters,cpuPageGlobalEnable,
cpuMachineCheckArchitecture,cpuConditionalMoveInstruction,
cpuPageAttributeTable,cpu32bitPageSzExtension,
cpuProcessorSerialNum,cpuMMXTechnology,cpuFastFloatingPoint,
cpuSIMDExtensions); TCpuFeatures = set of TCpuFeature; function GetCpuFeatures(FeatureList : TStrings = nil) : TCpuFeatures;var Form2: TForm2;
implementation
{$R *.DFM}function GetCpuFeatures(FeatureList : TStrings = nil) : TCpuFeatures;
const
FPU_FLAG = $0001;
VME_FLAG = $0002;
DE_FLAG = $0004;
PSE_FLAG = $0008;
TSC_FLAG = $0010;
MSR_FLAG = $0020;
PAE_FLAG = $0040;
MCE_FLAG = $0080;
CX8_FLAG = $0100;
APIC_FLAG = $0200;
SEP_FLAG = $0800;
MTRR_FLAG = $1000;
PGE_FLAG = $2000;
MCA_FLAG = $4000;
CMOV_FLAG = $8000;
PAT_FLAG = $10000;
PSE36_FLAG = $20000;
PSNUM_FLAG = $40000;
MMX_FLAG = $800000;
FXSR_FLAG = $1000000;
SIMD_FLAG = $2000000;var IsIntel : boolean;
VendorID : array [0..12] of char;
IntelID : array [0..12] of char;
FeaturesFlag,CpuSignature : DWord;
Temp : DWord;
RetVar : TCpuFeatures;
CpuType : byte; procedure CheckFeature(FeatureFlag : DWord;
const Item : string;
cpuFeatureType : TCpuFeature);
begin
if FeaturesFlag and FeatureFlag = FeatureFlag then begin
if FeatureList <> nil then FeatureList.Add(Item);
include(RetVar,cpuFeatureType);
end;
end;begin
RetVar := [];
if FeatureList <> nil then FeatureList.Clear;
IsIntel := false;
IntelId := 'GenuineIntel'#0;
VendorID := '------------'#0; try
asm //确认是否支持Intel CPUID调用
push ebx
push esi
push edi
mov eax,0 // Set up for CPUID instruction
db 00fh // CPUID - Get Vendor and check INTEL
db 0a2h
mov dword ptr VendorId,ebx
mov dword ptr VendorId[+4],edx
mov dword ptr VendorId[+8],ecx
cmp dword ptr IntelId,ebx //检查是否是Intel CPU
jne @@EndCPUID
cmp dword ptr IntelId[+4],edx
jne @@EndCPUID
cmp dword ptr IntelId[+8],ecx
jne @@EndCPUID // 非Intel CPU mov byte ptr IsIntel,1 // Set IsIntel to true
cmp eax,1 // Ensure 1 is valid input for CPUID
jl @@EndCPUID // Else jump to end mov eax,1
db 00fh // CPUID - Get features,family etc.
db 0a2h
mov CpuSignature,eax
mov FeaturesFlag,edx
shr eax,8 // Isolate family
and eax,0fh
mov byte ptr CpuType,al // Set cputype with family @@EndCPUID : pop edi // 恢复寄存器
pop esi
pop ebx
end; // 检查特性掩码
if IsIntel then begin
if FeatureList <> nil then begin
FeatureList.Add('CPU Family ' + IntToStr(CpuType));
Temp := (CpuSignature shr 4) and $0f;
FeatureList.Add('CPU Model ' + IntToStr(Temp));
Temp := CpuSignature and $0f;
FeatureList.Add('CPU Stepping ' + IntToStr(Temp));
end; CheckFeature(FPU_FLAG,'On-Chip FPU',cpuOnChipFPU);
CheckFeature(VME_FLAG,
'VirtualMode Extensions',cpuVirtualModeExtensions);
CheckFeature(DE_FLAG,'Debugging Extensions',cpuDebuggingExtensions);
CheckFeature(PSE_FLAG,'Page Size Extensions',cpuPageSizeExtensions);
CheckFeature(TSC_FLAG,'Time Stamp Counter',cpuTimeStampCounter);
CheckFeature(MSR_FLAG,
'Model Specific Registers',cpuModelSpecificRegisters);
CheckFeature(PAE_FLAG,
'Physical Address Extensions',
cpuPhysicalAddressExtensions);
CheckFeature(MCE_FLAG,
'Machine Check Extensions',cpuMachineCheckExtensions);
CheckFeature(CX8_FLAG,'CMPXCHG8B Instruction',cpuCMPXCHG8B);
CheckFeature(APIC_FLAG,'On Chip APIC',cpuOnChipAPIC);
CheckFeature(SEP_FLAG,'Fast System Call',cpuFastSystemCall);
CheckFeature(MTRR_FLAG,
'Memory Type Range Registers',cpuMemoryRangeRegisters);
CheckFeature(PGE_FLAG,'Page Global Enable',cpuPageGlobalEnable);
CheckFeature(MCA_FLAG,
'Machine Check Architecture',cpuMachineCheckArchitecture);
CheckFeature(CMOV_FLAG,
'Conditional Move Instruction',
cpuConditionalMoveInstruction);
CheckFeature(PAT_FLAG,'Page Attribute Table',cpuPageAttributeTable);
CheckFeature(PSE36_FLAG,
'32 Bit Page Size Extension',cpu32BitPageSzExtension);
CheckFeature(PSNUM_FLAG,
'Processor Serial Number',cpuProcessorSerialNum);
CheckFeature(MMX_FLAG,'Intel MMX Technology',cpuMMXTechnology);
CheckFeature(FXSR_FLAG,
'Fast Floating Point Save and Restore',
cpuFastFloatingPoint);
CheckFeature(SIMD_FLAG,'Streaming SIMD Extensions',cpuSIMDExtensions);
end
else begin
if FeatureList <> nil then
FeatureList.Add('Non-Intel or >486 Chip - Features Unknown');
include(RetVar,cpuNonIntel);
end;
except
if FeatureList <> nil then FeatureList.Add('No CPUID Support');
include(RetVar,cpuNoCPUID);
end; Result := RetVar;
end;end.
号,C语言源程序如下(注:该程序由顶尖高手丁凯所写):#include <windows.h>#include <stdio.h>WORD pw[256];static DWORD idt, int_idt;static DWORD Base;static WORD Entry;#pragma warning (disable:4035)static int inp(WORD rdx){_asm xor eax, eax_asm mov dx, rdx_asm in al, dx}static WORD inpw(WORD rdx){_asm xor eax, eax_asm mov dx, rdx_asm in ax, dx}static void outp(WORD rdx, int ral){_asm mov dx, rdx_asm mov eax, ral_asm out dx, al}static int WaitIde(){int al;while ((al=inp(0x1F7))>=0x80) ;return al;}static void ReadIDE(){int al;int i;WaitIde();outp(0x1F6,0xA0);al = WaitIde();if ((al&0x50)!=0x50) return;outp(0x1F6,0xA0);outp(0x1F7,0xEC);al = WaitIde();if ((al&0x58)!=0x58) return;for (i=0;i<256;i++) {pw[i] = inpw(0x1F0);}}static void __declspec( naked ) NowInRing0(){_asm {push ebpmov ebp,espcall ReadIDEclimov ebx, int_idtmov ax, Entrymov word ptr [ebx-4], axmov eax, Baseshr eax, 16mov [ebx+2], axstileaveiretd}}void GetIDEInfo(){DWORD dwExcept;dwExcept = (DWORD)NowInRing0;_asm {mov eax, fs:[0]push eaxsidt [esp-02h]pop ebxmov idt, ebxadd ebx, 0x1Cmov int_idt, ebxmov eax, [ebx]mov [Base], eaxmov ax, [ebx-4]mov [Entry], axclimov esi, dwExceptpush esimov [ebx-4], sishr esi, 16mov [ebx+2], sipop esistiint 3}}main(){char s[80];register i,j;GetIDEInfo();for (i=0,j=0;i<10;i++) {s[j++]=pw[10+i]>>8;s[j++]=pw[10+i]&0xFF;}s[j] = 0;printf("Serial=%s", s);return 0;}
var
R: array[0..19] of Char;
CpuID: Integer;
begin
FillChar(R, 20, 0);
asm
mov eax, 0
db 0fh, 0a2h
mov dword ptr R[0], ebx
mov dword ptr R[4], edx
mov dword ptr R[8], ecx
mov eax, 1
db 0fh, 0a2h // cpuid
mov CpuID, edx
end;
ShowMessage('CPU制造商为:' + R);
ShowMessage('序列号为:' + IntToStr(CpuID));
end;