如何取得CPU的型号? (90分)

  • 主题发起人 主题发起人 wxf_wxf
  • 开始时间 开始时间
W

wxf_wxf

Unregistered / Unconfirmed
GUEST, unregistred user!
我想取得所有CPU的唯一标示符?用GetSystemInfo可以取得CPU的一些属性但好象没有CPU的型号之类的属性?
 
用socket编程
在Unix端写一段守候进程的程序,程序的作用就是准备接受来自客户端的socket的连接请求,当此进程和客户端确立连接之后互相发送数据。客户端发送的数据可被认为是一个Query字符串(command,命令格式自己定),由Unix服务端的守候进程负责解释这个请求,并执行相应的操作。不知道我说的对你有没有帮助
 
应该是在UNIX端写一个服务程序,根据客户端的请求来处理
 
以上是不是答非所问?
 
获得CPU型号和ID
两个文件

program CpuId;

uses
Forms,
Main in 'Main.pas' {DemoForm};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TDemoForm, DemoForm);
Application.Run;
end.






/////////////////////////////////
unit Main;

// (c) NPS, 1997
// kvk@estpak.ee

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons;

type
TDemoForm = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Bevel1: TBevel;
Label5: TLabel;
procedure BitBtn1Click(Sender: TObject);
end;

var
DemoForm: TDemoForm;

implementation

{$R *.DFM}

type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;

function GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
end;

function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI {Restore registers}
POP EBX
end;

procedure TDemoForm.BitBtn1Click(Sender: TObject);
var
CPUID : TCPUID;
I : Integer;
S : TVendor;
begin
for I := Low(CPUID) to High(CPUID) do CPUID := -1;
CPUID := GetCPUID;
Label1.Caption := 'CPUID[1] = ' + IntToHex(CPUID[1],8);
Label2.Caption := 'CPUID[2] = ' + IntToHex(CPUID[2],8);
Label3.Caption := 'CPUID[3] = ' + IntToHex(CPUID[3],8);
Label4.Caption := 'CPUID[4] = ' + IntToHex(CPUID[4],8);
S := GetCPUVendor;
Label5.Caption := S;
end;

end.

 
我有一段汇编可以用来取Intel CPU的速度.
 
接受答案了.
 
后退
顶部