我正在寻找一个解决方案,如何检查CPU是否支持aes-ni。我需要将这些信息放入我的应用程序中,因此我不需要任何CPU-Z、bash命令或其他东西。 我知道它被视为aes标志。我不知道如何在汇编或C语言中检查它。主要应用程序是用C#编写的,但这并不重要。
我正在寻找一个解决方案,如何检查CPU是否支持aes-ni。我需要将这些信息放入我的应用程序中,因此我不需要任何CPU-Z、bash命令或其他东西。 我知道它被视为aes标志。我不知道如何在汇编或C语言中检查它。主要应用程序是用C#编写的,但这并不重要。
这些信息是由cpuid
指令返回的。将eax=1
传递进去,ecx
中的第25位将显示支持情况。有关详细信息,请参见英特尔指令集参考。示例代码:
mov eax, 1
cpuid
test ecx, 1<<25
jz no_aesni
此外,您可以尝试执行它并捕获异常。
在 Visual C++ 中
static bool GetNNICapability()
{
unsigned int b;
__asm
{
mov eax, 1
cpuid
mov b, ecx
}
return (b & (1 << 25)) != 0;
}