移植旧程序集(asm),使其在x64下编译
porting old assembly (_asm) so it compiles under x64
我正在移植一段包含汇编的旧代码。它不会在Vis Studio 2010下的x64上编译,并出现以下错误:此体系结构x64 不支持使用非标准扩展的'__asm'关键字
在阅读了其他一些条目后,我现在清楚地意识到,我必须重写代码才能使其具有可移植性。我很难移植一段代码。我需要一些帮助。我该如何重写这个区块,使其在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
}
非常感谢你的帮助!
汇编助记符cpuid
使用cpuid
指令提取处理器信息。看看这个MSVC页面,它有一个C++示例。
UPDATE我用一些简单的C代码尝试了这个功能-
#include <stdio.h>
#include <intrin.h>
int main(void)
{
int info[4] = {0};
__cpuid(info, 0);
printf("%X %X %X %Xn", info[0], info[1], info[2], info[3]);
return 0;
}
程序输出:
1 68747541 444D4163 69746E65
当您使用MSVC时,如果您想要替换asm块,请尝试:
int regs[4];
__cpuid( regs, tval );
AXr = regs[0];
BXr = regs[1];
CXr = regs[2];
DXr = regs[3];
您还需要:
#include <intrin.h>
__asm{}代码也可以通过使用asmjit库来替换。这可以用作jit编译器,并允许使用x64代码。开源,请参阅此处:https://asmjit.com/
相关文章:
- 为x86而非x64编译时出错
- 如何在 Windows x64 上编译支持 fips 的 openssl?
- 在Visual Studio 2017上无法使用调试模式x64进行OpenCV3.2编译
- MinGW 编译的可执行文件与网络无法在 x64 系统上运行
- 库将ARM架构错误编译为架构X64
- LNK2001在X64环境中的编译代码上看到的错误.但是,该代码在X86环境中填充了罚款
- 如何使用x64编译器使用MsBuild.exe编译大型c++项目
- 在CentOS 7 x64上编译QT时,如何解决矛盾的库问题
- 在 Visual Studio 中使用 SFML 在 X64 中编译时出现问题
- 如何使用VS2010编译Windows X64位的Leptonica库
- 在Win7 x64上编译Qt应用程序的最简单方法
- 不带.net的预编译SQLite x64
- 移植旧程序集(asm),使其在x64下编译
- 如何在Windows 64位计算机中将c++应用程序编译为x64模式
- QuantLib 1.5 编译错误无法打开文件'QuantLib-vc100-x64-mt.lib'
- 正在尝试在x64 FreeBSD上编译DevIL
- 当我的项目在msvc2010中兼容x64后无法编译时该怎么办
- 在编译期间混合 x86 和 x64 静态库C++
- 你如何为 x64 编译静态 pthread-win32 库
- 你如何为 x64 编译 OpenSSL