LoginSignup
0
0

More than 1 year has passed since last update.

Visual Studio アセンブラでmsvcrtを使ってみた

Posted at

環境

Windows 11 Pro (64bit)
Visual Studio Community 2022

ソースなど

バッチファイル

dev32crt.bat
@echo off
path %path%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x86
set lib=%lib%;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x86
set lib=%lib%;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x86
cmd

アセンブリ ソース

printf.asm
comment *
ml /c printf.asm
link /subsystem:console printf
*
includelib msvcrt
includelib legacy_stdio_definitions

.model flat

printf proto c :dword,:vararg

.const
fmt1	db	'argc=[%d]',0ah,0
fmt2	db	'argv[%d]=[%s]',0ah,0

.data
i$	dd	?
p$	dd	?

.code
argc$ = 8
argv$ = 12
main proc c
	push	ebp
	mov	ebp, esp

	mov	eax, argc$[ebp]
	invoke	printf, addr fmt1, eax
	mov	i$, 0
@@:
	mov	edx, i$
	mov	eax, argv$[ebp]
	mov	ecx, [eax+edx*4]
	mov	p$, ecx
	cmp	p$, 0
	je	@f
	invoke	printf, addr fmt2, i$, p$
	inc	i$
	jmp	@b
@@:
	mov	eax, 0
	pop	ebp
	ret
main endp

end

実行例

D:\Projects\msvc>ml /c printf.asm
Microsoft (R) Macro Assembler Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.

 Assembling: printf.asm

D:\Projects\msvc>link /subsystem:console printf
Microsoft (R) Incremental Linker Version 14.34.31935.0
Copyright (C) Microsoft Corporation.  All rights reserved.


D:\Projects\msvc>printf tako ika manbo
argc=[4]
argv[0]=[printf]
argv[1]=[tako]
argv[2]=[ika]
argv[3]=[manbo]

D:\Projects\msvc>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0