printf.asm
comment *
ml64 /c /Fl printf.asm
link /subsystem:console /entry:start printf
*
 
includelib kernel32
includelib user32
 
extern ExitProcess:proc
extern GetStdHandle:proc
extern lstrlenA:proc
extern WriteConsoleA:proc
extern wsprintfA:proc
 
STD_OUTPUT_HANDLE equ -11
 
.const
fmt	db	'RAX:%016Ix RBX:%016Ix RCX:%p', 0dh, 0ah, 0
 
.data?
hstdout	dq	?
buf	db	1024 dup (?)
 
.code
 
start proc
	sub	rsp, 28h
 
	mov	rcx, STD_OUTPUT_HANDLE
	call	GetStdHandle
	mov	hstdout, rax
 
	lea	rcx, offset buf
	lea	rdx, offset fmt
	mov	r8, 123456789abcdefh
	mov	r9d, r8d
	mov	qword ptr [rsp+20h], rdx
	call	wsprintfA
 
	lea	rcx, offset buf
	call	_puts
 
	mov	rcx, 0
	call	ExitProcess
start endp
 
str$ = 30h
_puts proc
	mov	qword ptr [rsp+8h], rcx
	sub	rsp, 28h
 
	call	lstrlenA
 
	mov	rcx, hstdout
	mov	rdx, qword ptr str$[rsp]
	mov	r8d, eax
	xor	r9d, r9d
	mov	qword ptr [rsp+20h], 0
	call	WriteConsoleA
 
	add	rsp, 28h
	ret
_puts endp
 
end
 

出力例
RAX:0123456789abcdef RBX:0000000089abcdef RCX:00007FF6665C2040
最終更新:2021年10月09日 20:57