为了简单起见,我只是粘贴一个例子而不是我的整个代码,这有点大。当我将我的代码移植到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将具有与调用函数之前相同的值。
提前感谢。
答案 0 :(得分:1)
很难看,因为它只是一个片段,而且它可以从C ++代码/ thiscall调用。
在某些情况下,它可能必须是'裸体'(__ decclspec(裸))。
它不会移植,因为VC正在丢弃x64内联asm支持iirc。
使用__cpuid或__cpuidex内在函数并享受。
答案 1 :(得分:0)
mov eax, what;
cpuid;
mov ecx, dword ptr peax;
mov [ecx], eax;
会奏效。
祝你好运!