Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,长修远,我们不能没有钱
随笔 - 172, 文章 - 0, 评论 - 257, 引用 - 0
数据加载中……

[导入]在偶机器上找到一个读cpu串号的代码,delphi的,记录一下(申明是人家的代码)

unit CPU;

interface

uses
  SysUtils;

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

function GetCPUID: TCPUID; assembler; register;
function GetCPUVendor: TVendor; assembler; register;
function GetCPUInfo: string;

implementation


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;

function GetCPUInfo: string;
var
  CPUID: TCPUID;
  I: Integer;
  S: TVendor;
begin
  for I := Low(CPUID) to High(CPUID) do
    CPUID[I] := -1;

  CPUID := GetCPUID;

  S := GetCPUVendor;

  Result := S + IntToHex(CPUID[1], 8) + IntToHex(CPUID[2], 8)
    + IntToHex(CPUID[3], 8)
    + IntToHex(CPUID[4], 8);
end;


end.


以前中专d时候看ibm 8086/8088汇编有自己写过这些代码d,但是现在过了这么多年,退化到看不懂这些了

posted on 2006-01-12 09:56 Khan 阅读(990) 评论(0)  编辑 收藏 引用 所属分类: Delphi


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理