c - 如何使用 __cpuid 检查 AES-NI 支持?
问题描述
我正在寻找一种方法来检查我的 CPU 是否支持 AES-NI 指令。我在 Internet 上发现了很多东西,但其中很多都是内联汇编代码,而且由于我在 Microsoft Visual Studio 下并且我正在 x64 中编译,所以这不起作用。Visual Studio 不支持 x64 内联汇编代码,而 x64 对我来说至关重要。
所以我找到了内在函数__cpuid()。问题是我不知道汇编/内在用途等……(我只是复制粘贴我找到的代码)
所以我在这里问你关于我使用互联网的代码片段自己编写的下面的代码。输出是“支持 AES-Ni”,但这并不意味着我的代码是正确的并且真正检索了我的 CPU 的 AES-NI 容量。
int cpuInfo[4] = { -1 };
__cpuid(cpuInfo, 1);
_Bool returned = ((cpuInfo[3] & 0x2000000) != 0);
if (returned == 1)
printf("AES-NI supported");
else
printf("AES-NI not-supported");
解决方案
AES 位在 ECX(第 25 位)中,因此您应该使用 cpuInfo[2]。
推荐阅读
- laravel - 一般错误:1824 无法打开引用的表
- javascript - 将套接字请求从一个组件发送到不同的组件
- vxworks - Simics 和 VxWorks Simulator 是一回事吗?
- asp.net - 为什么我会收到此错误?从字符串“Invoice”到类型“Integer”的转换无效
- c++ - 我的以下代码显示了分段错误。如何预防?
- sql - 复制了当前解决方案文件中的现有报告并收到以下错误
- php - Laravel:根据条件创建 HasMany 关系
- java - Windows 10 java.net.BindException:地址已在使用中:绑定所有端口
- azure - Powershell 代码将 Blob 内容的所有子文件夹下载到本地到单个文件夹中
- vba - 使用 VBA 宏删除对 MS Word 文档的直接格式化