開発環境 Microsoft Visual Studio Community 2019
実行環境 Microsoft Windows 10 Home (64bit)

プロジェクトの作成

メニューから[ファイル]-[新規作成]-[プロジェクト]を選択。
プロジェクト テンプレート 空のプロジェクト(C++)
プロジェクト名 add32
場所 (例) C:\Projects\masm

cppファイルの追加

メニューから[プロジェクト]-[新しい項目の追加]を選択。
名前 add32.cpp

#include <Windows.h>
#include <stdio.h>
 
extern "C" DWORD __cdecl add32(DWORD, DWORD);
extern "C" DWORD __cdecl add32c(DWORD, DWORD);
extern "C" DWORD __stdcall add32s(DWORD, DWORD);
 
int main()
{
	DWORD ret;
 
	ret = add32(123, 456);
	printf("%d\n", ret);
 
	ret = add32c(12, 34);
	printf("%d\n", ret);
 
	ret = add32s(56, 78);
	printf("%d\n", ret);
 
	return 42;
}
 

asmファイルの追加

プロジェクトのディレクトリにexfunc.asmという空のファイルを作る。
メニューから[プロジェクト]-[既存の項目の追加]を選択。
※cppと同じ名前にするとobjがバッティングする。

.model flat
 
.code
 
_a$ = 8
_b$ = 12
_add32 proc
	push	ebp
	mov	ebp, esp
 
	mov	eax, _a$[ebp]
	add	eax, _b$[ebp]
 
	leave
	ret
_add32 endp
 
add32c proc c a:dword, b:dword
	mov	eax, a
	add	eax, b
	ret
add32c endp
 
add32s proc stdcall a:dword, b:dword
	mov	eax, a
	add	eax, b
	ret
add32s endp
 
end
 

ビルドのカスタマイズ

ソリューション エクスプローラーのプロジェクト(add32)を右クリックし、[ビルドの依存関係]-[ビルドのカスタマイズ]を選択。
masm(.targets, .props)にチェックを付ける。

exfunc.asmを右クリックし、[プロパティ]を選択。
項目の種類 Microsoft Macro Assembler

ビルド

ツールバーの項目を設定。
ソリューション構成 Release
ソリューション プラットフォーム x86

メニューから[プロジェクト]-[プロパティ]を選択。
構成プロパティ/Microsoft Macro Assembler
Listing File/List All Available Information はい (/Sa)
Listing File/Assembled Code Listing File $(IntDir)%(FileName)
Advanced/Use Safe Exception Handlers はい (/safeseh)

メニューから[ビルド]-[ソリューションのビルド]を選択。(Ctrl+Shift+B)

exfunc.lst からの抜粋
.
 = 00000008			_a$ = 8
 = 0000000C			_b$ = 12
 00000000			_add32 proc
 00000000  55				push	ebp
 00000001  8B EC			mov	ebp, esp
 
 00000003  8B 45 08			mov	eax, _a$[ebp]
 00000006  03 45 0C			add	eax, _b$[ebp]
 
 00000009  C9				leave
 0000000A  C3				ret
 0000000B			_add32 endp
 
 0000000B			add32c proc c a:dword, b:dword
 0000000B  55		   *	    push   ebp
 0000000C  8B EC	   *	    mov    ebp, esp
 0000000E  8B 45 08			mov	eax, a
 00000011  03 45 0C			add	eax, b
					ret
 00000014  C9		   *	    leave  
 00000015  C3		   *	    ret    00000h
 00000016			add32c endp
 
 00000016			add32s proc stdcall a:dword, b:dword
 00000016  55		   *	    push   ebp
 00000017  8B EC	   *	    mov    ebp, esp
 00000019  8B 45 08			mov	eax, a
 0000001C  03 45 0C			add	eax, b
					ret
 0000001F  C9		   *	    leave  
 00000020  C2 0008	   *	    ret    00008h
 00000023			add32s endp
 

実行

メニューから[デバッグ]-[デバッグなしで開始]を選択。(Ctrl+F5)

最終更新:2020年10月16日 18:40
添付ファイル