【问题标题】:Why asm files are used in a Windows C++ project?为什么在 Windows C++ 项目中使用 asm 文件?
【发布时间】:2017-06-29 05:55:26
【问题描述】:

我负责维护 Windows 工具。该工具主要用C++编写,提供GUI,通过COM接口连接本地运行的服务器。在源文件夹中,我看到了很多 .asm 文件。我知道在一些嵌入式应用程序中,我们可以在 C 文件中插入一些装配线,以便调用中断或读/写寄存器(我不确定)。项目创建者已经退休,我不明白为什么那些 .asm 文件在那里。为什么我们需要它们?它们是由 Visual Studio 自动创建的吗?他们只是为了加快编译过程吗? 我在下面提供3张图片以便更好地理解。 图一显示了 Windows 资源管理器视图:

图二显示了源洞察视图。每个 asm 文件都有一个同名的 cpp 文件:

图三是VS2010项目中的一个视图,没有包含asm文件。

【问题讨论】:

  • 那些.asm文件很难阅读。
  • .asm 文件具有最近的日期修改值。项目是否启用了 /FA 或相关选项?它们可能是编译器生成的输出文件。
  • @Blastfurnace。是的,我看到使用了 /FAu 开关。
  • 那些 /FA 选项告诉编译器输出汇编文件。他们不需要构建项目。也许以前的开发人员喜欢将生成的程序集视为调试帮助。
  • 好的。这是合理的。谢谢!

标签: c++ visual-studio-2010 assembly


【解决方案1】:

似乎该项目正在使用/FAu 编译器选项。生成项目不需要生成的 .asm 文件。它们是人类可读的汇编器,可用于检查编译器输出的指令。

根据MSDN documentation for the flag

创建一个包含汇编代码的列表文件。

使输出文件以 UTF-8 格式创建,带有一个字节 订单标记。默认情况下,文件编码为 ANSI,但如果 您想要一个可以在任何系统上正确显示的列表文件,或者如果 您正在使用 Unicode 源代码文件作为编译器的输入。

【讨论】:

  • 完全正确。不寻常的是将编译器生成的程序集列表文件转储到 source code 目录中。默认情况下,VS 会将它们与目标文件一起放在临时输出目录中。显然有人出于难以想象的原因更改了此设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 2022-01-04
相关资源
最近更新 更多