cpuid limit,cpuid function
先贴上自己糊弄的代码(32位系统下编译):用来在32位系统中读取CPUID指令的各种信息。
cpuid的详细信息请参考64-ia-32-architectures-software-developer-manual-325462,从689页开始
32位下嵌入汇编可以使用_asm{…}格式(汇编语句后面不用加分号)
**************************************************************************************************************************************************
#include
void __cpuidex( int *CPUInfo, int InfoType, int ECXValue )// 在32位下模拟__cpuidex函数, 64位VS不支持嵌套汇编
{
if( NULL == CPUInfo ) return;
_asm{
mov edi, CPUInfo //将数组地址保存在寄存器edi
mov eax, InfoType //输入功能号
mov ecx, ECXValue //输入子功能号
cpuid //执行cpuid指令
mov [edi], eax //返回寄存器的值
mov [edi+4], ebx
mov [edi+8], ecx
mov [edi+12], edx
}
}
int main(void) {
int dwBuf[4] = {0};// EAX EBX ECX EDX output
int eax_value; // EAX input/output
int ecx_value; // ECX input/output
unsigned int flag = 1;// loop control
unsigned int count; // The count of array
unsigned int checkSpecial[] = { 0x0D, 0x0F, 0x10, 0x14 }; // special value of EAX
while (flag){
printf("\nPlease enter a value as EAX input: ");
scanf_s("%X", &eax_value); // assign eax_value
if (((eax_value >= 0x00) && (eax_value <= 0x16)) || ((eax_value >= 0x80000000) && (eax_value <= 0x80000008))) { // Limit of eax_value
for (count = 0; count < 4; count++){
if (eax_value == checkSpecial[count]){// check special value
printf("Please enter a value as ECX input: ");
scanf_s("%X", &ecx_value); //assign ecx_value
}
}
__cpuidex( dwBuf, eax_value, ecx_value);
printf("EAX: %8X", dwBuf[0]);
printf("\nEBX: %8X", dwBuf[1]);
printf("\nECX: %8X", dwBuf[2]);
printf("\nEDX: %8X", dwBuf[3]);
}
else
printf("\nInput EAX value invalid !!! \n");
if(eax_value == -1){
flag = 0;
}
}
return 0;
}
***********************************************************************************************************************************************************************************************
void __cpuidex(
int cpuInfo[4],
int function_id,
int subfunction_id
);
请注意:第一参数int cpuInfo[4] 是指针!是指针!是指针!用于接收eax, ebx, ecx, edx的返回值
function_id即eax的输入值, subfunction_id即ecx的输入值
这个库函数放在头文件intrin.h里边
cpuid limit,cpuid function相关推荐
- Limit CPUID MAX
Limit CPUID MAX to 3.是指出现在英特尔平台的BIOS设置选项.很多主板也显示成CPUID maximum value limit选项.中文意义是:限制执行CPUID指令返回数值大于 ...
- CPUID — CPU Identification
CPUID- CPU Identificationhttps://www.felixcloutier.com/x86/cpuid 目录 CPUID - CPU Identification Instr ...
- Intel处理器CPUID指令学习
前文<Intel处理器Family.Model.Stepping等的学习>只是简单讲了CPU的标识等内容(仅针对Intel,本文也是),但其读取方法未涉及.本文就此未完事宜来了解读取的方法 ...
- 通过CPUID指令读取处理器信息
一.CPUID简介 CPUID操作码是一个面向x86架构的处理器补充指令,它的名称派生自CPU识别,作用是允许软件通过CPUID指令读取处理器的详细信息. 二.CPUID基本原理 CPUID有很多fu ...
- 获取硬件信息的delphi源码(CPUID、操作系统、Mac物理地址、计算机名称、IP地址、用户名)
转载请保留本文链接地址:http://blog.csdn.net/sushengmiyan/article/details/8545673 {----------------------------- ...
- arm linux读cpu id,基于ARM架构的芯片获取CPU信息(cpuID)的多种方法
由于工作的原因,要获取到ARM芯片的cpuid. 了解下存储cpu信息的寄存器内容: CPUID寄存器内容: 字段名:Implementer(venter 销售ID)|Variant(大版本号) | ...
- 【Optimizaition/x86】Intel CPU的CPUID指令获取的C实现
Date: 2018.7.22 1.参考: https://www.cnblogs.com/DxSoft/articles/5053954.html https://blog.csdn.net/lis ...
- linux cpuid指令,通过CPUID指令获取CPU信息
1.简介 在计算机领域中需要用到CPU信息的地方有很多.比如,在可信计算中,需要收集终端的软硬件的完整性信息,其中就包含CPU的信息:再比如,一些加密软件需要绑定CPU的某些信息,去生成加密密钥.本文 ...
- Intel CPU的CPUID指令
Intel有一个超过100页的文档,专门介绍cpuid这条指令,可见这条指令涉及内容的丰富. 记得去年的时候,曾经有个"英布之剑"问过我这条指令,当时并没有给出一个满意的回答,现在 ...
最新文章
- 免费公开课 | 基于定制数据流技术的AI计算加速
- iOS学习之iOS沙盒(sandbox)机制和文件操作(二)
- 一个nuxt(vue)+mongoose全栈项目聊聊我粗浅的项目架构
- [渝粤教育] 西南科技大学 建筑制图 在线考试复习资料(1)
- 《Python数据分析》第二版.第三章.[学习笔记][Jupyter notebook]
- 含有Date类型的对象或集合转换成json时的问题
- web安全day11:进一步学习windows域的gpo
- 6.业务架构·应用架构·数据架构实战 --- 双轮驱动的技术架构设计
- 全卷机神经网络图像分割(U-net)-keras实现
- OPNET出错集锦:)
- Unity 接入有道智云AI - 文本翻译
- 轻量级web api_API接口管理,这15种开源工具助你管理API
- 【2023王道数据结构】【树与二叉树】通过C++实现中序遍历的非递归算法(手动入出栈)C、C++完整实现(可直接运行
- 初次面试初生牛犊不怕虎,居然觉得面试就是聊天?
- oracle迁移到人大金仓,Oracle迁移数据到人大金仓V8
- 微信网页/微信小程序内实现长按识别二维码
- hadoop 集群txid不一致
- 排位赛[USACO20JAN]Loan Repayment(二分+数学)
- 第六章—身份认证、第七章—控制访问
- 微信小程序 - 无法获取云端数据库中的数据的问题(修改云端数据库权限)
热门文章
- 一百一十三、SAP的SCAT录屏操作,类似按键精灵可用于批量修改数据
- html5画布星空,HTML5 Canvas星空|星域背景图生成器
- 几种室内定位技术的简要介绍
- 利用Scrapy框架爬取LOL皮肤站高清壁纸
- 西安二本理科大学计算机专业排名,二本理科大学排名及分数线
- 【医学+深度论文:F18】2019 Robust optic disc and cup segmentation with deep learning for glaucoma detection
- 第012天:Material Design界面设计语言
- OpenCV是什么?OpenCV是干什么的?OpenCV概述
- system verilog 三段式状态机和interface
- 机器学习课程 Variational Inference