2011-10-11 40 views
8

我想问有关的东西我想尝试与Visual Studio 2010中MS Visual Studio 2010中如何使用.ASM生成的文件

我通过设置生成从the.cpp文件中的.asm文件项目属性 - > C/C++ - >输出文件(/ FA)中的“汇编器输出”选项。

我的问题是,我如何在下一步使用.asm生成的文件再次链接,而不再使用.cpp文件,以防我想在.asm文件中进行一些修改,然后通过保持我在汇编级别所做的修改再次链接。

如果您可以提供确切的步骤,包括项目属性中可能需要的正确配置,将会非常有帮助。

+0

首先,您需要使用ML编译它,然后才能转到链接器。看看ML.EXE的命令行参数,我从来没有在VS2010中试过它。 –

+0

在某些情况下,您可以使用内联asm – BlackBear

+0

如果您想将其用于超越实验/学习的任何内容,请小心。 MSVC汇编程序输出在C++(特别是异常处理)方面效果不佳,MS不支持除“信息目的”以外的汇编列表。请参阅http://stackoverflow.com/questions/7488056/a-problem-with-cl-exe-and-ml-exe/7495413#7495413 –

回答

1
+0

谢谢你的时间,但我已经知道该教程描述了另一个与我不同的案例。正如已经说过的,我不想仅仅链接用asm编写的函数。我可以使用.cpp文件内部的inline asm轻松完成此操作。 –

+0

之后你不需要cpp文件。我使用ml.exe进行自定义编译步骤编译。 – MartyTPS

+0

正如我所说的,我实际上正在寻找一个解决方案,在编译C++源代码(cpp文件)后使用整个.asm生成的文件,然后仅使用生成的asm编译而不用再使用cpp。 谢谢。 这个特定的教程描述了他使用他在asm中编写的函数以及与我想要的不同的cpp文件的情况。 但是,我可以使用该教程为我的案例找到自定义解决方案,因为我已经在cpp文件中的.asm中编写了大量代码。 –

0

我最近做这个。这里是我在这里给出的答案compile-assembly-output-generated-by-vc的重复。事实证明,你仍然可以在MSVC2012的32位模式下做到这一点,但我认为64位模式是无望的。

对于32位模式,这里是你所做的。

创建一个空的项目和源文件Source.cpp

#include <stdio.h> 
int main() { 
    printf("hello world\n"); 
    return 0; 
} 
  1. 您的项目舔右键并选择“生成定制”和
    选择MASM这里描述http://www.masm32.com/board/index.php?topic=9231.0
  2. 下C++/OutputFiles选择组件输出/ FA
  3. 以32位模式编译发布模式
  4. Source.asm文件加载到MSVC中,以便您可以查看它。它不会工作。一些变化仍然是必要的。
  5. 在C++/Optimization下关闭Whole Program Optimization(删除/GL)。这增加了该行INCLUDELIB MSVCRT
  6. 在连接/高级设置的最后一个选项“的形象安全异常处理程序”为否(/SAFESEH:NO
  7. 现在,你应该有一个Source.asm文件,该文件会做同样的事情将来源。 cpp文件没有。将Source.cpp从Release目录复制到与Source.cpp相同的目录中(因此在构建/清除时不会将其删除)。
  8. 加入Source.asm(作为现有文件)到源文件并从构建中删除Source.cpp
  9. 重建,你应该看到“你好世界”,而不必手工改变任何组装线。

我已经使用这个更复杂的功能。我通常在一个单独的模块上执行此操作,并在函数名称上使用extern "C"以删除C++名称修改。

相关问题