今天学习了ASM

下午的时候,实在没啥事做,就在网上下载了一个CHM的教程,学了一下ASM,现在把学习的经历分离给大家,一直以为ASM比较难,现在觉得,还行

今天学习是的ASM的开发环境 先上张图,呵呵

下面我教大家怎么一步步熟悉开发环境并做出自己的第一个ASM程序

第一步:文件->新建工程->工程向导

名字随便写,然后点下步,我们构建是带RES资源文件的工程,在模板那块,我们选择 "无"

然后下一步,再下一步,完成

之后,我们工程创建完了,来到这里

点击cnblogstest.Rc 右键 新建->对话框

最后做成这个样子

控件的一些属性如下:

IDD_DLG_MAIN  ID:1000 主窗体
IDC_EDIT_FIRST  ID:1003 第一个输入框
IDC_SECOND  ID:1004    第二个输入框
IDC_BTN1  ID:1005          显示为输出的按钮
IDC_BTN2  ID:1006         显示为退出的按钮
IDC_EDT3  ID:1007         最下面的那个输入框

最后再双击.ASM文件加上以下代码就OK了

.386
.model flat,stdcall
option casemap:none
include  WINDOWS.INC
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.const
;利用自己编写的DefToEqu程序转化的常数ID定义
IDD_DLG_MAIN equ 1000
IDC_EDIT_FIRST equ 1003
IDC_SECOND equ 1004
IDC_BTN1 equ 1005
IDC_BTN2 equ 1006
IDC_EDT3 equ 1007
.data
szExitApp db "你真的要退出吗?",0
szTitle db "好一朵木梨花",0
szFormat db "%s%s",0
hInstance dd ?
.code
DlgProc proc uses ebx esi edi hwnd,uMsg,wParam,lParam
	LOCAL @szBuffer1[256]:byte
	LOCAL @szBuffer2[256]:byte
	LOCAL @szOutputBuf[512]:byte
	mov eax,uMsg
	.if eax==WM_INITDIALOG
		invoke RtlZeroMemory,addr @szBuffer1,sizeof @szBuffer1
		invoke RtlZeroMemory,addr @szBuffer2,sizeof @szBuffer2
		invoke RtlZeroMemory,addr @szOutputBuf,sizeof @szOutputBuf		
		.elseif eax == WM_COMMAND
		mov eax,wParam
			.if ax==IDC_EDIT_FIRST
			.elseif ax==IDC_SECOND
			.elseif ax==IDC_BTN1
			invoke GetDlgItemText, hwnd, IDC_EDIT_FIRST, addr @szBuffer1, sizeof @szBuffer1
			invoke GetDlgItemText, hwnd, IDC_SECOND, addr @szBuffer2, sizeof @szBuffer2
			invoke wsprintf, addr @szOutputBuf, addr szFormat, addr @szBuffer1, addr @szBuffer2
			invoke SetDlgItemText, hwnd, IDC_EDT3, addr @szOutputBuf
			.elseif ax==IDC_BTN2
			invoke SendMessage,hwnd,WM_CLOSE,0,0				
	.endif
	.elseif eax==WM_CLOSE
	        invoke MessageBox,hwnd,addr szExitApp,addr szTitle,MB_ICONQUESTION or MB_YESNO
	        .if al==IDYES
	        	invoke EndDialog,hwnd,NULL
	        .endif
	        
	.elseif eax==WM_CLOSE
		invoke MessageBox,hwnd,addr szExitApp,addr szTitle,MB_ICONQUESTION or MB_YESNO
		.if al==IDYES
			invoke EndDialog,hwnd,NULL
		.endif
		.else
			mov eax,FALSE
			ret
			.endif	
			mov eax,FALSE		
	ret

DlgProc endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DLG_MAIN,NULL,offset DlgProc,NULL
invoke ExitProcess,NULL
end start

最后,构建->构建并运行

最后效果如下:

 

代码我就不解析了,借的别人的,

 

 

 

 

posted on 2010-05-20 17:50  陈天成  阅读(1192)  评论(3)    收藏  举报