2011-10-11 23 views
8

ファイル生成私は設定してthe.cppファイルから.ASMファイルを生成しています私は、Visual Studioで2010MSのVisual Studio 2010が

をしようと考えています何かについてお尋ねしたいと思いますプロジェクトプロパティ - > C/C++ - >出力ファイル(/ FA)の "アセンブラ出力"のオプション。

私の質問は、.asmファイル内でいくつかの変更を行いたい場合に備えて、.asmファイルをもう一度.cppファイルを使用せずにリンクする方法ですアセンブリレベルで行った変更を維持して、再度リンクしてください。

プロジェクトプロパティで正しい設定が必要な場合など、正確な手順を提供できると非常に役に立ちます。ここで

+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

は、私は最近、これをしなかったチュートリアルhttp://www.cs.virginia.edu/~evans/cs216/guides/vsasm.html

+0

お時間をありがとうございますが、私は既に別のケースを説明しているチュートリアルを知っています。すでに述べたように、私はasmで書かれた関数をリンクするだけではいけません。 .cppファイル自体の内部でインライン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ビットモードの場合は、ここで行います。

#include <stdio.h> 
int main() { 
    printf("hello world\n"); 
    return 0; 
} 
  1. Source.cppプロジェクトを右なめる空のプロジェクトやソースファイルを作成し、「カスタマイズの構築」を選択し、
    ここhttp://www.masm32.com/board/index.php?topic=9231.0
  2. の下で説明するようにMASMを選択C++/OutputFilesアセンブリ出力/ FAを選択
  3. Comipile in 32-bit modeリリースモード
  4. Source.asmファイルをMSVCにロードすると、表示できます。それはまだ動作しません。それでもいくつかの変更が必要です。
  5. C++/Optimizationでは、Whole Program Optimization(/GLを削除)をオフにします。これは、リンカ/アドバンスドでINCLUDELIB MSVCRT
  6. は最後のオプション(/SAFESEH:NO
  7. 今、あなたは同じことそのソースを行いますSource.asmファイルを持つ必要がありませんに「イメージセーフ例外ハンドラを持って」設定行を追加します。 cppファイルがしました。リリースディレクトリのSource.cppをSource.cppと同じディレクトリにコピーします(ビルド/クリーンアップ時に削除されないようにします)。
  8. ソースファイルにSource.asm(既存のファイルとして)を追加し、ビルドからSource.cppを削除します。
  9. リビルドと手作業でアセンブリ行を変更することなく "Hello World"が表示されるはずです。

これをもっと複雑な機能に使用しました。私は通常別のモジュールでそれを行い、関数名にextern "C"を使用してC++の名前のマングリングを削除します。

関連する問題