開発環境 |
Microsoft Visual Studio Express 2013 for Windows Desktop |
実行環境 |
Microsoft Windows 8.1 (64bit) |
プロジェクトの種類 |
Visual C++/Win32 プロジェクト |
プロジェクト名 |
hello |
アプリケーションの種類 |
Windows アプリケーション |
追加のオプション |
空のプロジェクト, SDLチェック |
参考
プロジェクトの新規作成
- メニューから「ファイル」→「新しいプロジェクト」を選択する
- 「Win32 プロジェクト」を選択する
- 名前を入力する「hello」
- 「ソリューションのディレクトリを作成」のチェックを外す
- 「空のプロジェクト」をチェックする
- 「Security Development Lifecycle (SDL) チェック」はチェックしたままでいい
ビルドのカスタマイズ
- 「ソリューション エクスプローラー」の「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」を選択する
- メニューから「ビルド」→「ソリューションのビルド」を選択する(F7キーでも可)
エラー一覧
|
|
説明 |
ファイル |
プロジェクト |
エラー |
1 |
error LNK2026: モジュールは SAFESEH イメージには安全ではありません。 |
C:\Projects\ASM\hello\hello.obj |
hello |
エラー |
2 |
error LNK1281: SAFESEH イメージを生成できません。 |
C:\Projects\ASM\hello\Release\hello.exe |
hello |
プロジェクトの設定
- 「ソリューション エクスプローラー」の「hello」を右クリックし、ポップアップメニューから「プロパティ」を選択する
ツリー |
構成 |
項目 |
値 |
構成プロパティ/リンカー/詳細設定 |
Release |
安全な例外ハンドラーを含むイメージ |
いいえ (/SAFESEH:NO) |
構成プロパティ/リンカー/最適化 |
Release |
リンク時のコード生成 |
規定(または空) |
構成プロパティ/リンカー/マニフェスト ファイル |
Release |
マニフェストの生成 |
いいえ (/MANIFEST:NO) |
構成プロパティ/リンカー/デバッグ |
Release |
デバッグ情報の生成 |
いいえ |
「Win32 コンソール アプリケーション」で作った場合
- 「構成プロパティ/リンカー/システム」のサブシステムが「コンソール (/SUBSYSTEM:CONSOLE)」となる
- 同時にデフォルトのエントリポイントが「mainCRTStartup」となる
エントリポイントを変更したい場合は「構成プロパティ/リンカー/詳細設定」の「エントリ ポイント」で指定する
END疑似命令で実行開始アドレス(エントリポイント)を定義することもできる
最終更新:2014年04月08日 23:23