zoukankan
html css js c++ java
Delphi7中插入汇编[Assembly]獲取CPUID
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TCPUID
=
array
[
1
..
4
]
of
Longint;
TVendor
=
array
[
0
..
11
]
of
char;
type
TForm1
=
class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure
Button1Click(Sender: TObject);
private
{
Private declarations
}
public
{
Public declarations
}
end
;
const
ID_BIT
=
$
200000
;
//
CPU ID 專用變量 EFLAGS ID bit
var
Form1: TForm1;
FUNCTION IsCPUID_Available : BOOLEAN; register;
FUNCTION GetCPUID : TCPUID; assembler; register;
FUNCTION GetCPUVendor : TVendor; assembler; register;
implementation
{
$R *.dfm
}
//
CPU ID
==================================================
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 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
TForm1.Button1Click(Sender: TObject);
var
cpuid:TCPUID; i:integer;
begin
if
IsCPUID_Available
then
begin
edit1.text:
=
''
;
cpuid:
=
GetCPUID;
//
CPUIDStr:
=
GetCPUVendor
+
'
_
'
;
for
i:
=
1
to
4
do
edit1.text:
=
edit1.text
+
IntToHex(CPUID[i],
4
);
end
else
edit1.text:
=
'
CPUID_IS_NOT_AVAILABLE
'
;
end
;
end
.
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。
查看全文
相关阅读:
四层和七层负载均衡的区别-转
MySQL高可用方案一(MHA)
EC2.0开启多规格后,编辑无法获取规格数据
PHP中取出字符串中的空格 逗号
ECSTORE1.2 重启开启信任登陆模块(删除KEY)
云体检通用代码补丁
zendguard安装破解
MySQL历史版本下载(官方)
linux watch命令
python判断值是否为空
原文地址:https://www.cnblogs.com/Athrun/p/1239606.html
最新文章
JDBC连接数据库
Android zxing连续扫描
NDK 提示"undefined reference to xxx“的解决办法
NDK xxxxx could not be resolved解决方法
IOS ARC与非ARC混合编译
MySql开启跟踪
Messagebox.Show()常用参数设置
用泛型的IEqualityComparer<T>接口去重复项
Silverlight自动根据屏幕分辨率进行布局
【全面解析DeepZoom 之三】建立DeepZoom应用
热门文章
C# WinForm设置TreeView选中节点
在word中做复选框打对勾钩
WPF 类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义。
C# 汉字转拼音(转)
C# 带进度条的文件下载
C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
C#简单实现发送手机短信
.net(c#) winform文本框只能输入数字,不能其他非法字符
Redis VS Memcached 转载
ecstore实现图片分离(静态资源分离)配置文件
Copyright © 2011-2022 走看看