c++ - 使用 MSVC10 编译 x64 C++ 时使用 ASM

标签 c++ 64-bit inline-assembly

由于 MSVC10 不允许在针对 x64 架构时使用内联 ASM 指令,我正在寻找任何方法来绕过此类限制。我从谷歌搜索中了解到,编写和编译单独的 ASM 模块然后链接它们并从 C++ 调用它们是一种方法,但我不知道我将如何做到这一点。除了使用编译器内在函数之外,还有其他方法吗?或者如何针对 VS2010 中的单独 ASM 模块编写/编译/链接?

最佳答案

您可以使用单独的汇编程序,将完整的汇编源文件编译成目标文件。只要您遵循正确的调用约定,您就可以为 C++ 中使用的函数提供原型(prototype),将 C++ 和 ASM 生成的目标文件链接在一起。

我使用 yasm .它使用英特尔语法,支持 x64 窗口和 VS2010 integration .它具有有用的宏并包含功能。我必须承认,自从 VS2008 以来我就不必使用它了,当时集成的工作方式有点不同,但它应该与 VS2010 一起工作得很好。

关于c++ - 使用 MSVC10 编译 x64 C++ 时使用 ASM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3570617/

相关文章:

c++ - 我如何从 TortoiseSVN 获取单行的历史记录?

c++ - C++ 中的基本 QT - 难以理解

c++ - 使用寄存器交换值

c++ - 为什么我的编译器在 64 位机器上运行时使用 8 位字符?

c - 跳出内联汇编在 AVR32 上转到了错误的目标

c - 程序接收信号SIGSEGV,ASM中使用SHRD的段错误

c++ - C++ 是否有定义的方法将指针传递给类的成员对象的成员函数?

c++ - VS2008 C++ 应用程序无法在 Debug模式下启动 : This application has failed to start because MSVCR90. 找不到 dll

c++ - 如何在不同的目标平台上以编程方式巧妙地注册 32 位 COM/DLL 组件?

c - 使用内联汇编将 int 保存在来自结构指针的函数变量中