Visual C++インラインアセンブラをx64に移植する

 

プロジェクトに.asmファイルを追加してビルドできるようにする方法(VS 2010)

プロジェクトに.asmファイルを追加

[プロジェクト]-[新しい項目を追加] で拡張子.asmのファイルを追加します。

ファイルの種類に.asmがありませんが、たたりがあるやつでなければなんでもいいです。リストからは「C++ファイル(cpp)」あたりを選択して、ファイル名の欄でファイル名を.asmの拡張子付きで指定すればOKです。追加したファイル名がソリューションエクスプローラーにasmのアイコン付きで表示されるのを確認してください。

ビルドに追加する

ソリューションエクスプローラーでasmファイルを右クリックして、プロパティの全般の「ビルドに含めない」を「カスタムビルドツール」に変更します。

ビルド方法をVSに教えてあげる

x64のasmファイルをアセンブルしてobjファイルを作るには、ml64.exeというプログラムを使います。ml64.exeはVisual Studio 2010にはデフォでついてますので、プロジェクトのプロパティ(または追加したasmファイルのプロパティ)の「カスタムビルドツール」でml64.exeのコマンドラインを指定してやればアセンブルできます。asmファイルがひとつだけならどちらのプロパティで指定しても同じです。2つ以上あるならプロジェクトのプロパティで指定したほうがすべてのasmファイルに適用されるので便利でしょう。

①カスタムビルドツールを選択します。

②プラットフォームから「x64」を選択します。まだ「x64」がない場合は先に構成マネージャーで作ってください。

③DebugとReleaseそれぞれについてコマンドラインを指定します。

④コマンドラインの例を示します。順番とか重要です。詳しくはMSDNをML64で検索してください。

デバッグ版

ml64 /Fo $(Platform)\$(Configuration)\%(Filename).obj /c /Cp /Zi /Zd %(Filename).asm

リリース版

ml64 /Fo $(Platform)\$(Configuration)\%(Filename).obj /c /Cp %(Filename).asm

/Fo 出力する.objファイルのパス名を指定します。指定しないとソースファイルと同じディレクトリ・ファイル名の.objファイルになりますが、プロジェクトの他のobjと同様に構成別にフォルダに入れたほうがいいと思うのでここでパス名を指定します。

/c ml64がアセンブルだけをする(リンクは別に行う)ことを指定します。

/Cp ソース中のラベルの大文字と小文字を区別します。

/Zi /Zd 出力する.objファイルにデバッグ情報を含めます。これによりVisual Studioのソースのウィンドウでブレークポイントを仕掛けたり現在行を→で表示したりできるようになります。

$(Platform)や%(Filename)などはml64の機能ではなくVisual Studio側で置換される文字列です。

⑤出力ファイルの指定をお忘れなく。

32ビットと同じプロジェクトで64ビットのビルドのときだけ.asmを組み込みたい

プラットフォーム「x64」にだけ上の設定をして「Win32」のほうを空欄にしておけばx64のときだけビルドされるようです。