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
.
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。
查看全文
相关阅读:
自定义开发服务器_2_使用webpack_dev_middleware和express
自定义开发服务器_1_使用webpack_dev_middleware
用webpack搭建专用于实时重加载html的开发服务器
如何批量导入组件,并在vue-router中批量设置?
[webpack]在package.json中设置开发服务器"start": "webpack serve --open"的一小坑
【读书笔记】node.js实战第二版中关于ejs的一个小坑
动态的修改页面标题title
vue-cropperjs 基本使用 及其裁剪前压缩,相同图片第二次选择失效,第二次压缩失效,第一次图片转Base64 失效 打印‘data:,' 的问题
原生js 首次加载的loading效果
vue 首次加载的loading效果
原文地址:https://www.cnblogs.com/Athrun/p/1239606.html
最新文章
理解javascript闭包
判断用户是pc访问还是手机访问
前端中的SEO
伪类与伪元素
前端-mate讲解
scroll运用、图片悬浮
【Eclipse】_Eclipse自动补全增强方法 & 常用快捷键
WSGI协议
GIL(全局解释器锁)
MySQL语句整理(二)
热门文章
MySQL语句整理(一)
MySQL数据库简识
HTTP协议(一)
正则表达式
python-协程
python-进程
python-线程
(angular)版轮播(半成品)
一鱼三吃:自动轮播图-vue版
学习札记
Copyright © 2011-2022 走看看