開発環境 Microsoft Visual Studio Community 2019
実行環境 Microsoft Windows 10 Home (64bit)

プロジェクトの作成

メニューから[ファイル]-[新規作成]-[プロジェクト]を選択。
プロジェクト テンプレート 空のプロジェクト(C++)
プロジェクト名 hello2019c

asmファイルの追加

プロジェクトのディレクトリにhello2019c.asmという空のファイルを作る。
メニューから[プロジェクト]-[既存の項目の追加]を選択。

.model flat, c
 
NULL			equ	0
STD_OUTPUT_HANDLE	equ	-11
 
ExitProcess	proto stdcall, :dword
GetStdHandle	proto stdcall, :dword
WriteConsoleA	proto stdcall, :dword, :dword, :dword, :dword, :dword
 
.data
 
msg	byte	'hello, world', 0dh, 0ah
msglen	equ	$ - msg
 
.code
 
main proc
	local	hConsole:dword
	local	written:dword
 
	invoke	GetStdHandle, STD_OUTPUT_HANDLE
	mov	hConsole, eax
	invoke	WriteConsoleA, hConsole, addr msg, msglen, addr written, NULL
	invoke	ExitProcess, 42
	ret
main endp
 
end main
 

ビルドのカスタマイズ

ソリューション エクスプローラーのプロジェクト(hello2019c)を右クリックし、[ビルドの依存関係]-[ビルドのカスタマイズ]を選択。
masm(.targets, .props)にチェックを付ける。

hello2019c.asmを右クリックし、[プロパティ]を選択。
項目の種類 Microsoft Macro Assembler

ビルド

ツールバーの項目を設定。
ソリューション構成 Release
ソリューション プラットフォーム x86

ソリューション エクスプローラーのプロジェクトを右クリックし、[プロパティ]を選択。
  • リンカー
システム サブシステム コンソール (/SUBSYSTEM:CONSOLE)
最適化 リンク時のコード生成 (削除)
  • Microsoft Macro Assembler
Listing File List All Available Information はい (/Sa)
Assembled Code Listing File $(IntDir)%(FileName)
Advanced Use Safe Exception Handlers はい (/safeseh)

メニューから[ビルド]-[ソリューションのビルド]を選択。(Ctrl+Shift+B)

hello2019c.lst から抜粋
.
 00000000			main proc
					local	hConsole:dword
					local	written:dword
 
 00000000  55		   *	    push   ebp
 00000001  8B EC	   *	    mov    ebp, esp
 00000003  83 C4 F8	   *	    add    esp, 0FFFFFFF8h
					invoke	GetStdHandle, STD_OUTPUT_HANDLE
 00000006  6A F5	   *	    push    -00000000Bh
 00000008  E8 00000000 E   *	    call   GetStdHandle
 0000000D  89 45 FC			mov	hConsole, eax
					invoke	WriteConsoleA, hConsole, addr msg, msglen, addr written, NULL
 00000010  6A 00	   *	    push   +000000000h
 00000012  8D 45 F8	   *	    lea    eax, dword  ptr ss:[ebp]+0FFFFFFF8h
 00000015  50		   *	    push   eax
 00000016  68 0000000E	   *	    push   +00000000Eh
 0000001B  68 00000000 R   *	    push   OFFSET msg
 00000020  FF 75 FC	   *	    push   dword  ptr ss:[ebp]+0FFFFFFFCh
 00000023  E8 00000000 E   *	    call   WriteConsoleA
					invoke	ExitProcess, 42
 00000028  6A 2A	   *	    push   +00000002Ah
 0000002A  E8 00000000 E   *	    call   ExitProcess
					ret
 0000002F  C9		   *	    leave  
 00000030  C3		   *	    ret    00000h
 00000031			main endp
 

実行

メニューから[デバッグ]-[デバッグなしで開始]を選択。(Ctrl+F5)

最終更新:2020年10月18日 17:16
添付ファイル