【发布时间】:2019-01-26 01:24:07
【问题描述】:
人们希望在 Microsoft Visual C++ 2017 中使用汇编几乎和 C/C++ 一样简单(对于像我这样已经编写汇编超过 50 年的人)。这些希望都破灭了。
我在网上找到的帮助说,右键单击您的项目名称并选择“构建依赖项”,然后选择“构建自定义项...”。或者“Project->(right click)->Build Dependencies->Build Customizations...->(check) masm”这是一个非首发因为 Project->(right click)->Build Dependencies 不是一个提供的选择.
我的代码在删除了一些 masm 需要知道目标处理器类型的项目后从 ml64 组装。 FWIW 似乎 extern "C" void myAsmFunc(unsigned int*);需要“公共 _myAsmFunc”。我发现添加在栏下很烦人。
那么,我如何不仅要汇编这个特定的 .asm,还要为所有 ml64 汇编代码定义一个通用规则? (为 32 位目标启用 masm 会很好。但这不是我要问的。)
【问题讨论】:
-
在您的汇编代码中,您可以使用
proc C定义您的函数(即:myproc proc C,它会为您添加下划线。如果生成 32 位代码,您可以将.model flat, C放在顶部。默认情况下,所有 PROC 语句都是 PROC C。使用该指令。 -
@MichaelPetch - 我删除了我之前的评论。我稍后会删除这个。
-
可能重复:Compiling assembly in Visual Studio / How can I make a pure assembly project in Visual Studio? / Assembly programming - WinAsm vs Visual Studio 2017。最后一个有演练的截图。我不使用 Windows 或 Visual Studio,因此我不会将其作为其中任何一个的副本关闭;我会把这个选择留给那些可以更好地检查或测试答案的人。 (@MichaelPetch,这些有什么好处吗?)
-
@PeterCordes :我最初考虑stackoverflow.com/questions/52796300/… 但是这个问题也确实询问了下划线问题。我没有找到我喜欢的链接。我希望 OP 能回复我们。
-
您将使用 PROTO 指令将 prrintf 声明为外部并使用模型指定的默认调用约定。例如:
printf proto:VARARG顶部带有.model flat,C将进行正确的名称修改。您可以使用printf proto STDCALL:VARARG之类的内容覆盖默认语言/调用约定。如果您使用EXTERN printf:PROC,则不会发生重整,因此您必须使用EXTERN _printf:PROC
标签: visual-studio assembly masm