Visual studio 将内联asm寄存器值保存到C指针,可以在GCC上获取,但不能在VC上获取

Visual studio 将内联asm寄存器值保存到C指针,可以在GCC上获取,但不能在VC上获取,visual-studio,gcc,assembly,x86,pointers,Visual Studio,Gcc,Assembly,X86,Pointers,为了简单起见,我只粘贴一个示例,而不是我的整个代码,这有点大。当我将代码移植到VC++而不是使用GCC时,我需要重写一些内联汇编函数,这些函数接收指针并保存这些指针上的值 想象一下cpuid,例如: void cpuid( int* peax, int* pebx, int* pecx, int* pedx, int what ){ __asm__ __volatile__( "cpuid" : "=a" (*peax), "=b" (*pebx), "=c" (*pecx), "=d"

为了简单起见,我只粘贴一个示例,而不是我的整个代码,这有点大。当我将代码移植到VC++而不是使用GCC时,我需要重写一些内联汇编函数,这些函数接收指针并保存这些指针上的值

想象一下cpuid,例如:

void cpuid( int* peax, int* pebx, int* pecx, int* pedx, int what ){
    __asm__ __volatile__( "cpuid" : "=a" (*peax), "=b" (*pebx), "=c" (*pecx), "=d" (*pedx) : "a" (what) );
}
这就行了,它会将cpuid“返回”的寄存器上的值保存在我传递给函数的指针上

对于VC的内联汇编程序也可以这样做吗? 到目前为止,功能签名完全相同,但具有:

mov eax, what;
cpuid;
mov dword ptr [peax], eax;
etc
不会工作,peax将具有与调用函数之前相同的值


提前感谢。

很难看到,因为它只是一个片段,加上它可以从C++代码/这个调用中调用。 在某些情况下,它可能必须是“裸的”(裸的)

由于VC正在放弃x64内联asm支持iirc,因此它不会进行移植

使用_cpuid或_cpuidex的内在特性并享受

mov eax, what;
cpuid;
mov ecx, dword ptr peax;
mov [ecx], eax;
会有用的

祝你好运