为 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代码的两个需要注意的地方