開発環境 |
Microsoft Visual Studio Community 2017 |
実行環境 |
Microsoft Windows 10 Home (64bit) |
プロジェクトの新規作成
- メニューから「ファイル」→「新規作成」→「プロジェクト」を選択する
- 「Visual C++」→「空のプロジェクト」を選択する
- 名前を入力する「hello」
- 「ソリューションのディレクトリを作成」のチェックを外す
- 場所は任意(例 C:\Projects\asm\)
ビルドのカスタマイズ
- 「ソリューション エクスプローラー」の「hello」を右クリックし、ポップアップメニューから「ビルドの依存関係」→「ビルドのカスタマイズ」を選択する
- 「masm(.targets, .props)」をチェックする
ソースファイルの追加
- 「ソリューション エクスプローラー」の「ソース ファイル」を右クリックし、ポップアップメニューから「追加」→「新しい項目」を選択する
- 「C++ ファイル (.cpp)」を選択する
- 名前を入力する「hello.asm」
ビルドのカスタマイズの前にソースファイルを追加した場合
- 「ソリューション エクスプローラー」の「hello.asm」を右クリックし、ポップアップメニューから「プロパティ」を選択する
- 項目の種類に「Microsoft Macro Assembler」を選択する
ソースの入力
hello.asm
; hello.asm
.386
.model flat, stdcall
option casemap:none
NULL equ 0
MB_OK equ 0
MessageBoxA proto :dword, :dword, :dword, :dword
ExitProcess proto :dword
.data
caption db 'ハロー', 0
text db 'hello, world', 0
.code
start:
invoke MessageBoxA, NULL, offset text, offset caption, MB_OK
invoke ExitProcess, 0
end start
+
|
... |
; hello.asm
.586
.model flat, stdcall
NULL EQU 0
MB_OK EQU 0
MessageBoxA proto :dword, :dword, :dword, :dword
ExitProcess proto :dword
.data
CAPTION DB 'ハロー', 0
TEXT DB 'hello, world', 0
.code
WinMainCRTStartup proc
invoke MessageBoxA, NULL, offset TEXT, offset CAPTION, MB_OK
invoke ExitProcess, 0
ret
WinMainCRTStartup endp
end
|
ビルド
- ツールバーのソリューション構成に「Release」を選択する
- メニューから「ビルド」→「ソリューションのビルド」を選択する(Ctrl+Shift+Bでも可)
エラー一覧
|
説明 |
ファイル |
プロジェクト |
エラー |
error LNK1221: サブシステムは推論できません。定義されている必要があります。 |
|
hello |
エラー |
error LNK2026: モジュールは SAFESEH イメージには安全ではありません。 |
C:\Projects\ASM\hello\hello.obj |
hello |
エラー |
error LNK1281: SAFESEH イメージを生成できません。 |
C:\Projects\ASM\hello\Release\hello.exe |
hello |
プロジェクトの設定
- 「ソリューション エクスプローラー」の「hello」を右クリックし、ポップアップメニューから「プロパティ」を選択する
ツリー |
構成 |
項目 |
値 |
構成プロパティ/リンカー/システム |
Release |
サブシステム |
Windows (/SUBSYSTEM:WINDOWS) |
構成プロパティ/リンカー/詳細設定 |
Release |
安全な例外ハンドラーを含むイメージ |
いいえ (/SAFESEH:NO) |
構成プロパティ/リンカー/最適化 |
Release |
リンク時のコード生成 |
規定(または空) |
構成プロパティ/リンカー/マニフェスト ファイル |
Release |
マニフェストの生成 |
いいえ (/MANIFEST:NO) |
構成プロパティ/リンカー/デバッグ |
Release |
デバッグ情報の生成 |
いいえ |
実行
- メニューから「デバッグ」→「デバッグなしで開始」を選択する(Ctrl+F5でも可)
「Win32 コンソール アプリケーション」で作った場合
- 「構成プロパティ/リンカー/システム」のサブシステムが「コンソール (/SUBSYSTEM:CONSOLE)」となる
- 同時にデフォルトのエントリポイントが「mainCRTStartup」となる
エントリポイントを変更したい場合は「構成プロパティ/リンカー/詳細設定」の「エントリ ポイント」で指定する
END疑似命令で実行開始アドレス(エントリポイント)を定義することもできる
最終更新:2017年09月24日 08:38