请高手帮我看一下啊!library GetCpuId;uses
  SysUtils,
  Classes,
  ShareMem;{$R *.res}
 const
 ID_BIT = $200000;   // EFLAGS ID bit
type
 TCPUID  = array[1..4] of Longint;
 TVendor = array [0..11] of char;
function  GetId :PString; register;
var
  CPUID : TCPUID;
      I : Integer;
      S : TVendor;
 PCpuId : PString;
    str : String;
function IsCPUID_Available : Boolean; register;
asm
 PUSHFD       {direct access to flags no possible, only via stack}
  POP     EAX     {flags to EAX}
  MOV     EDX,EAX   {save current flags}
  XOR     EAX,ID_BIT {not ID bit}
  PUSH    EAX     {onto stack}
  POPFD        {from stack to flags, with not ID bit}
  PUSHFD       {back to stack}
  POP     EAX     {get back to EAX}
  XOR     EAX,EDX   {check if ID bit affected}
  JZ      @exit    {no, CPUID not availavle}
  MOV     AL,True   {Result=True}
@exit:
end;function GetCPU : 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;begin
     new(PCpuId);
for I:=Low(CPUID) to High(CPUID) do CPUID[I] :=-1;  if IsCPUID_Available then
     begin
     CPUID :=GetCPU;
         S :=GetCPUVendor;
     str:=IntToStr(CPUID[1] shr 8 and $f)+IntToStr(CPUID[1] shr 4 and $f)+IntToStr(CPUID[1] shr 12 and 3)+IntToStr(CPUID[1] and $f)+IntToHex(CPUID[1],8)+S;
     //AssignStr(PCpuId, str);
     PCpuid^:=str;
     result:=PCpuId;
     dispose(PCpuId);
     end
  else
  begin
     str:='ghfdegchehndjhdfhhpo';
     //AssignStr(PCpuId, str);
     PCpuid^:=str;
     result:=PCpuId;
     dispose(PCpuId);
  end;
end;exports
//注意大小写
  GetID;
begin
end.
/////////////////////////////////////////////////////////////////////////
调用:
var
  Form1: TForm1;
  function GetId:PString; external 'GetCpuId.dll';
implementation{$R *.dfm}procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   P :PString;
begin
      new(p)  ;
      p:=getid   ;
      edit1.Text:=p^;
      dispose(p)  ;
end;