開発環境 |
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