unit unit1;<br><br>interface<br> <br>uses <br> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, <br> ExtCtrls, StdCtrls, Buttons; <br><br>type <br> TForm1 = class(TForm) <br> Label1: TLabel; <br> Label2: TLabel; <br> Label3: TLabel; <br> Label4: TLabel; <br> BitBtn1: TBitBtn; <br> Label5: TLabel;<br> BitBtn2: TBitBtn;<br> procedure BitBtn1Click(Sender: TObject);<br> procedure BitBtn2Click(Sender: TObject);<br> end; <br> <br>var <br> Form1: TForm;<br><br>implementation <br> <br>{$R *.DFM} <br> <br>type <br> TCPUID = array[1..4] of Longint;<br> TVendor = array [0..11] of char;<br> <br>function GetCPUID : TCPUID; assembler; register; <br>asm <br> PUSH EBX {Save affected register}<br> PUSH EDI <br> MOV EDI,EAX {@Resukt} <br> MOV EAX,1 <br> DW $A20F {CPUID Command} <br> STOSD {CPUID[1]}<br> MOV EAX,EBX <br> STOSD {CPUID[2]} <br> MOV EAX,ECX <br> STOSD {CPUID[3]} <br> MOV EAX,EDX <br> STOSD {CPUID[4]} <br> POP EDI {Restore registers}<br> POP EBX<br>end; <br> <br>function GetCPUVendor : TVendor; assembler; register; <br>asm <br> PUSH EBX {Save affected register}<br> PUSH EDI<br> MOV EDI,EAX {@Result (TVendor)}<br> MOV EAX,0<br> DW $A20F {CPUID Command}<br> MOV EAX,EBX <br> XCHG EBX,ECX {save ECX result} <br> MOV ECX,4 <br>@1: <br> STOSB <br> SHR EAX,8 <br> LOOP @1 <br> MOV EAX,EDX <br> MOV ECX,4 <br>@2: <br> STOSB <br> SHR EAX,8 <br> LOOP @2 <br> MOV EAX,EBX <br> MOV ECX,4 <br>@3: <br> STOSB <br> SHR EAX,8 <br> LOOP @3 <br> POP EDI {Restore registers} <br> POP EBX <br>end; <br> <br>procedure TForm1.BitBtn1Click(Sender: TObject);<br>var <br> CPUID : TCPUID; <br> I : Integer; <br> S : TVendor;<br>begin<br> for I := Low(CPUID) to High(CPUID) do CPUID := -1;<br> CPUID := GetCPUID;<br> Label1.Caption := 'CPUID[1] = ' + IntToHex(CPUID[1],8); <br> Label2.Caption := 'CPUID[2] = ' + IntToHex(CPUID[2],8); <br> Label3.Caption := 'CPUID[3] = ' + IntToHex(CPUID[3],8); <br> Label4.Caption := 'CPUID[4] = ' + IntToHex(CPUID[4],8); <br> S := GetCPUVendor; <br> Label5.Caption := S; <br>end; <br><br>procedure TForm1.BitBtn2Click(Sender: TObject);<br>begin<br> Close;<br>end;<br><br>end.<br>