【问题标题】:How do you compile assembly code using Visual Studio 2017?如何使用 Visual Studio 2017 编译汇编代码?
【发布时间】: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


【解决方案1】:

我没有采用默认值,而是手动输入了命令行的东西。首先我创建一个空项目,然后添加现有项目,即程序集源文件。然后在每个 .asm 源文件的项目窗口中,我右键单击名称,然后右键单击属性,一般,设置从构建中排除为否。然后单击自定义构建工具(您可能必须启用此功能),一般,然后单击以下,使用 x64.asm 作为示例源文件名。

command line for debug build:
    ml64 /c /Fo$(OutDir)\x64.obj x64.asm
outputs:
    $(OutDir)\x64.obj

command line for release build:  (the only difference is no /c)
    ml64 /Fo$(OutDir)\x64.obj x64.asm
outputs:
    $(OutDir)\x64.obj

对于 32 位版本,使用 ml 而不是 ml64。

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 2020-02-13
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多