我正在移植一段包含程序集的旧代码。它无法在维斯Studio 2010下的x64上编译,并出现以下错误:使用了非标准扩展'__asm'关键字,此体系结构x64不支持该关键字
在阅读了一些其他条目后,我现在很清楚,我必须重写代码,使其能够移植。我在移植一段代码时遇到了坚韧。我可以使用一些帮助。我如何重写这段代码,使其在x86和x64下编译?
unsigned tval= 0;
unsigned AXr, BXr, CXr, DXr;
_asm{
push eax
push ebx
push ecx
push edx
mov eax, tval
mov ebx, 0
mov ecx, 0
mov edx, 0
cpuid
mov AXr, eax
mov BXr, ebx
mov CXr, ecx
mov DXr, edx
pop edx
pop ecx
pop ebx
pop eax
}
非常感谢你的帮助!
3条答案
按热度按时间zujrkrfu1#
汇编程序助记符
cpuid
使用cpuid
指令提取处理器信息。请看this MSVC page-它有一个C++示例。UPDATE我用一些简单的C代码尝试了这个函数-
程序输出:
mjqavswn2#
当您使用MSVC时,如果您希望使用一个直接替代的asm-block,请尝试:
您还需要:
im9ewurl3#
__asm {}代码也可以用asmjit库来替换。这可以作为一个jit编译器来使用,并且允许使用x64代码。