为 C++ 程序编写 MASM 函数

Posted

技术标签:

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

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

【问题讨论】:

内联汇编...codeproject.com/Articles/15971/Using-Inline-Assembly-in-C-C @neagoegab 内联汇编是另一回事。它不涉及以某种方式告诉汇编器某个点应该作为函数入口点导出,或者为汇编函数编写 c++ 函数原型,或者汇编成链接器可用的格式,或者担心调用约定,或者... 【参考方案1】:

您可以使用以下几篇文章: http://courses.engr.illinois.edu/ece390/books/labmanual/c-prog-mixing.html

http://lavernasbrute.blogspot.com/2010/02/calling-assembly-functions-in-c.html

只需 google 'C 中的汇编函数'。

【讨论】:

【参考方案2】:
    .asm 文件添加到项目并在其中实现所需的功能。编译后,您将获得与汇编源文件对应的标准.obj 文件。 在汇编源代码中将您的函数声明为extrn,以允许从其他链接单元调用它们。 在您的 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 汇编。

以上是关于为 C++ 程序编写 MASM 函数的主要内容,如果未能解决你的问题,请参考以下文章

从编写TcpStatC谈c++代码改写为masm32代码的两个需要注意的地方

有没有办法防止 MASM 更改指令?

masm32基本配置与写出第一个汇编程序

使用Visual Studio 2015 编写 MASM 汇编程序!

x86 MASM - 传递和访问二维数组

sysInfo-用MASM32编写的Windows系统软件硬件网络信息收集程序