下午的时候,实在没啥事做,就在网上下载了一个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
最后,构建->构建并运行
最后效果如下:
代码我就不解析了,借的别人的,