⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eg0421.asm

📁 宏汇编器
💻 ASM
字号:
;eg0421.asm
	.686
	.model flat,stdcall
	option casemap:none
	includelib kernel32.lib
ExitProcess	proto,:DWORD
exit	MACRO dwexitcode
	invoke ExitProcess,dwexitcode
	ENDM

GetStdHandle	proto,:DWORD
WriteConsoleA	proto,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
WriteConsole	equ <WriteConsoleA>
ReadConsoleA	proto,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
ReadConsole	equ <ReadConsoleA>
STD_INPUT_HANDLE	= -10
STD_OUTPUT_HANDLE	= -11

	.data
msg1	byte 'Please enter your name: ',0
msg2	byte 'Welcome ',0
nbuf	byte 80 dup(0)
msg3	byte ' to Win32 Console!',0

_outsize	dword ?
_outhandle	dword ?
_insize	dd ?
_inbuffer	byte 255 dup(0)

	.code
start:
	mov eax,offset msg1
	call dispmsg
	mov eax,offset nbuf
	call readmsg
	mov eax,offset msg2
	call dispmsg
	mov eax,offset nbuf
	call dispmsg
	mov eax,offset msg3
	call dispmsg
	
	exit 0

dispmsg	proc	; 字符串显示子程序,入口参数:EAX=字符串地址
	push eax
	push ebx
	push ecx
	push edx
	push eax	; 保存入口参数,即字符串地址
	invoke GetStdHandle,STD_OUTPUT_HANDLE
	mov _outhandle,eax
	pop ebx	; EBX=字符串地址
	xor ecx,ecx	; 计算字符串长度
dispm1:	mov al,[ebx+ecx]
	test al,al	
	jz dispm2
	inc ecx
	jmp dispm1
dispm2:	invoke WriteConsole,_outhandle,ebx,ecx,addr _outsize,0
	pop edx
	pop ecx
	pop ebx
	pop eax
	ret
dispmsg	endp

readmsg	proc	; 字符串输入子程序,入口参数:EAX=缓冲区地址
	push ebx
	push ecx
	push edx
	push eax	; 保护输入的缓冲区地址参数
	invoke GetStdHandle,STD_INPUT_HANDLE
	invoke ReadConsole,eax,addr _inbuffer,255,addr _insize, 0
	sub _insize,2
	xor ecx,ecx
	pop ebx	; 获得缓冲区地址
readm1:	mov al,_inbuffer[ecx]
	mov [ebx+ecx],al	; 将输入的字符串复制到用户缓冲区
	inc ecx
	cmp ecx,_insize
	jb readm1
	mov byte ptr [ebx+ecx],0	; 最后填入结尾字符0
	mov eax,ecx
	pop edx
	pop ecx
	pop ebx
	ret
readmsg	endp

	end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -