「ASM/hello2」の編集履歴(バックアップ)一覧に戻る

ASM/hello2 - (2014/04/08 (火) 23:23:09) のソース

|開発環境|Microsoft Visual Studio Express 2013 for Windows Desktop|
|実行環境|Microsoft Windows 8.1 (64bit)|
|プロジェクトの種類|Visual C++/Win32 プロジェクト|
|プロジェクト名|hello|
|アプリケーションの種類|Windows アプリケーション|
|追加のオプション|空のプロジェクト, SDLチェック|
#table_zebra(project, #fff, #ddd)

参考
-[[Win32 MASM プログラミング入門>http://www7.plala.or.jp/keny01/asm/win32/index.html]]

*プロジェクトの新規作成
-メニューから「ファイル」→「新しいプロジェクト」を選択する
-「Win32 プロジェクト」を選択する
-名前を入力する「hello」
-「ソリューションのディレクトリを作成」のチェックを外す
-「空のプロジェクト」をチェックする
-「Security Development Lifecycle (SDL) チェック」はチェックしたままでいい

*ビルドのカスタマイズ
-「ソリューション エクスプローラー」の「hello」を右クリックし、ポップアップメニューから「ビルド依存関係」→「ビルドのカスタマイズ」を選択する
-「masm(.targets, .props)」をチェックする

*ソースファイルの追加
-「ソリューション エクスプローラー」の「ソース ファイル」を右クリックし、ポップアップメニューから「追加」→「新しい項目」を選択する
-「C++ ファイル (.cpp)」を選択する
-名前を入力する「hello.asm」

ビルドのカスタマイズの前にソースファイルを追加した場合
-「ソリューション エクスプローラー」の「hello.asm」を右クリックし、ポップアップメニューから「プロパティ」を選択する
-項目の種類に「Microsoft Macro Assembler」を選択する

*ソースの入力
hello.asm
#highlight(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
}}

#region
#highlight(asm){{
; 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
}}
#endregion

*ビルド
-ツールバーのソリューション構成に「Release」を選択する
-メニューから「ビルド」→「ソリューションのビルド」を選択する(F7キーでも可)

エラー一覧
|||説明|ファイル|プロジェクト|h
|エラー|1|error LNK2026: モジュールは SAFESEH イメージには安全ではありません。|C:\Projects\[[ASM]]\hello\hello.obj|hello|
|エラー|2|error LNK1281: SAFESEH イメージを生成できません。|C:\Projects\ASM\hello\Release\hello.exe|hello|

**プロジェクトの設定
-「ソリューション エクスプローラー」の「hello」を右クリックし、ポップアップメニューから「プロパティ」を選択する
#table_zebra(error, #fff, #ddd)

|ツリー|構成|項目|値|h
|構成プロパティ/リンカー/詳細設定|Release|安全な例外ハンドラーを含むイメージ|いいえ (/SAFESEH:NO)|
|構成プロパティ/リンカー/最適化|Release|[[リンク]]時のコード生成|規定(または空)|
|構成プロパティ/リンカー/マニフェスト ファイル|Release|マニフェストの生成|いいえ (/MANIFEST:NO)|
|構成プロパティ/リンカー/デバッグ|Release|デバッグ情報の生成|いいえ|
#table_zebra(property, #fff, #ddd)

----

「Win32 コンソール アプリケーション」で作った場合
-「構成プロパティ/リンカー/システム」のサブシステムが「コンソール (/SUBSYSTEM:CONSOLE)」となる
-同時にデフォルトのエントリポイントが「mainCRTStartup」となる

エントリポイントを変更したい場合は「構成プロパティ/リンカー/詳細設定」の「エントリ ポイント」で指定する
END疑似命令で実行開始アドレス(エントリポイント)を定義することもできる