我正在尝试使用以下 cod 读取 cpuid 信息,但它不起作用。我正在使用 Visual Studio 2010:
#include "stdafx.h"
#include <stdio.h>
int main()
{
int a, b;
for (a = 0; a < 5; a++)
{
__asm__("cpuid"
:"=a"(b) // EAX into b (output)
:"0"(a) // a into EAX (input)
:"%ebx","%ecx","%edx"); // clobbered registers
printf("The code %i gives %i\n", a, b);
}
return 0;
}
它是这么说的:
'project_scs.exe': Loaded 'C:\Users\myUser\Documents\Visual Studio 2010\Projects\project_scs\Debug\project_scs.exe', Symbols loaded.
'project_scs.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Symbols loaded (source information stripped).
'project_scs.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Symbols loaded (source information stripped).
'project_scs.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Symbols loaded (source information stripped).
'project_scs.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded.
'project_scs.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded.
The thread 'Win32 Thread' (0x2190) has exited with code -1073741510 (0xc000013a).
The program '[8828] project_scs.exe: Native' has exited with code -1073741510 (0xc000013a).
谁能告诉我该怎么做才能让它运行?谢谢
主要问题是:您使用了用于 GCC 的 AT&T 语法。但是,Visual Studio 需要 Intel 语法。看看我下面的例子并看看其中的链接:
#include <stdio.h>
#include <intrin.h>
#define EAX 0
#define EBX 1
#define ECX 2
#define EDX 3
int main ( void )
{
int exx[4], a;
// http://msdn.microsoft.com/en-us/library/4ks26t93%28v=vs.100%29.aspx
puts ("Using VC inline assembler:");
for (a = 0; a < 5; a++)
{
__asm
{
xor ecx, ecx // needed for a=4
mov eax, a
cpuid
mov exx[EAX], eax
}
printf("The code %i gives %08X\n", a, exx[EAX]);
}
// http://msdn.microsoft.com/en-us/library/vstudio/hskdteyh%28v=vs.100%29.aspx
puts ("Using VC intrinsics:");
for (a = 0; a < 5; a++)
{
__cpuid(exx, a);
printf("The code %i gives %08X\n", a, exx[EAX]);
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)