開発環境 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
添付ファイル