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

📄 第一次示例.asm

📁 汇编的实验:熟悉汇编语言程序调试环境及顺序程序设计
💻 ASM
字号:

include windows.inc		;包含 Windows API 函数、常数、结构体声明

.data
	wc			WNDCLASS  	;窗体风格
	hInstance 	dd			;程序实例句柄
	msg			MSG			;Windows的消息结构
	hBitmap		dd			;图片句柄
	hIcon		dd			;图标句柄
	
.code
Start:
	;取得程序的实例句柄
	invoke GetModuleHandle, NULL
	mov hInstance, eax
	
	;从资源文件中加载图标和位图
	invoke LoadImage, hInstance, "MainIcon", IMAGE_ICON, 72, 72, LR_DEFAULTCOLOR
	mov hIcon, eax
	invoke LoadBitmap, hInstance, "Logo"
	mov hBitmap, eax
	
	;注册一个窗口类
	mov wc.style, 0
	mov wc.lpfnWndProc, offset WindowProc
	mov wc.cbClsExtra, 0
	mov wc.cbWndExtra, 0
	mov eax, hInstance
	mov wc.hInstance, eax
	invoke LoadIcon, NULL, IDI_WARNING ;使用感叹号图标
	mov wc.hIcon, eax
	invoke LoadCursor, NULL, IDC_CROSS ;使用十字形光标
	mov wc.hCursor, eax
	invoke GetStockObject, WHITE_BRUSH ;使用白色背景
	mov wc.hbrBackground, eax
	mov wc.lpszMenuName, 0
	mov wc.lpszClassName, "FirstSampleClass"
	invoke RegisterClass, offset wc
	
	;创建一个窗体实例
	invoke CreateWindowEx, 0, "FirstSampleClass", "演示窗体", \
						WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, \
						CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, 0
	invoke ShowWindow, eax, SW_SHOW ;将刚才创建的窗体显示出来
	
	;进入消息循环
	invoke GetMessage, offset msg, NULL, 0, 0
	while eax
		invoke TranslateMessage, offset msg
		invoke DispatchMessage, offset msg
		invoke GetMessage, offset msg, NULL, 0, 0		
	endw
	
	;卸载图标和位图
	invoke DestroyIcon, hIcon
	invoke DeleteObject, hBitmap
	
	invoke ExitProcess,0 ;退出程序

;-----------------------------------------------------------------
;窗口函数
WindowProc proc stdcall hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	
	local ps:PAINTSTRUCT ;定义局部变量
	local rect:RECT, hdc:dword
	
	if uMsg = WM_PAINT ;当窗体刷新时在窗体中央显示文字,左右两个上角显示图片
		invoke BeginPaint, hWnd, addr ps
		;在左上角画出图标
		invoke DrawIconEx, ps.hdc, 10, 10, hIcon, 72, 72, 0, NULL, DI_NORMAL
		;创建一个内存设备环境,并将图片选入其中
		invoke CreateCompatibleDC, ps.hdc
		mov hdc, eax
		invoke SelectObject, hdc, hBitmap
		;在右上角显示图片
		invoke GetClientRect, hWnd, addr rect
		mov eax, rect.right
		sub eax, 50
		invoke BitBlt, ps.hdc, eax, 10, 40, 40, hdc, 0, 0, SRCCOPY
		;删除内存设备环境
		invoke DeleteDC, hdc
		;在窗体中央显示文字
		sar rect.right, 1
		sar rect.bottom, 1
		invoke SetTextAlign, ps.hdc, TA_CENTER
		invoke TextOut, ps.hdc, rect.right, rect.bottom, "欢迎使用辰灿汇编语言开发环境", 28
		invoke EndPaint, hWnd, addr ps
		return 0 ;返回函数一定要使用return语句,而不能使用ret指令,否则局部变量没有退栈,会出现堆栈混乱
	elseif uMsg == WM_CLOSE
		invoke PostQuitMessage, 0
		return 0
	elseif uMsg == WM_SIZE
		invoke RedrawWindow, hWnd, NULL, NULL, RDW_ERASENOW|RDW_INVALIDATE
	else
		invoke DefWindowProc, hWnd, uMsg, wParam, lParam
	endif
endp
;-----------------------------------------------------------------

end Start

⌨️ 快捷键说明

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