【问题标题】:Writing MASM functions for c++ program [closed]为 C++ 程序编写 MASM 函数
【发布时间】:2012-11-28 07:33:18
【问题描述】:

谁能给我一个很好的教程/解释在汇编中编写函数然后将它们链接到 c++ 程序中的基础知识?

【问题讨论】:

  • @neagoegab 内联汇编是另一回事。它不涉及以某种方式告诉汇编器某个点应该作为函数入口点导出,或者为汇编函数编写 c++ 函数原型,或者汇编成链接器可用的格式,或者担心调用约定,或者...

标签: c++ c assembly masm


【解决方案1】:
【解决方案2】:
  1. .asm 文件添加到项目并在其中实现所需的功能。编译后,您将获得与汇编源文件对应的标准.obj 文件。
  2. 在汇编源代码中将您的函数声明为extrn,以允许从其他链接单元调用它们。
  3. 在您的 C++ 代码中,将外部 asm 函数声明为 extern 并使用 C 链接 (extern "C") - 这是调用的汇编约定,您必须遵守。

【讨论】:

  • 还要小心调用约定——我认为在这种情况下最好明确指定。
  • @Voo 它在答案中(第 3 段)
  • 我不是指 C 链接,而是实际的调用约定,例如stdcall,定义函数时。
  • 在汇编源代码中?
  • 好吧,如果您将参数传递给 asm 函数,您仍然必须遵循正确的调用约定,并且没有编译器可以真正确保其隐式默认值与您手动实现的匹配。跨度>
【解决方案3】:

查看this one,应该会有帮助

【讨论】:

  • 我看到了。它是关于在 Visual Studio 中编写整个汇编程序,而不是仅仅编写一个函数并从 c/c++ 调用它
【解决方案4】:

您可以使用内联 ASM,但可能不支持某些指令。但也够了。如你所知,有些 CRT 功能是通过内联 ASM 实现的。

__asm
{
    emit ...
    ...
}

【讨论】:

  • 我知道内联 ASM。这不是我需要的,因为它不支持 x64 汇编。
猜你喜欢
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2018-08-27
  • 2016-06-14
  • 1970-01-01
  • 2015-11-08
相关资源
最近更新 更多