《汇编教程》由会员分享,可在线阅读,更多相关《汇编教程(25页珍藏版)》请在金锄头文库上搜索。
1、单击菜单 文件 新建文件 或按快捷键 CtrlN,在代码编辑窗口中键入如下的代码: (注意大小写敏感) 完成后我把代码保存为 F:backupDoctest.asm,然后再单击菜单 构建。 如果大家还记得的话,就知道这是编译、连接、运行一次搞定的选项,当编译路径没有配置错误,程序即会进行编译、连接和运行。 至于汇编代码我就不解析了,也不是本教程的范围。如果编译期间发生了错误,则可以在 输出窗口中查看错误提示,一般第一次的错误都是没有设置好 Masm32 的路径。如果没错 的话 RadAsm 会显示整个编译和连接的过程,如上面的程序就输出如下信息: F:Asmmasm32BinML.EXE /c
2、 /coff /Cp /nologo /I“F:Asmmasm32Include“ “F:backupDoctest.asm“Assembling: F:backupDoctest.asm F:Asmmasm32BinLINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:“F:Asmmasm32Lib“ “F:backupDoctest.obj“ Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. Al
3、l rights reserved. Executing:“F:backupDoctest.exe“ Make finished. Total compile time 1693 ms 好了,我们现在打开 RadAsm,单击菜单 文件新建工程,在弹出的对话框中设置好工 程名和工程的类型,如下图所示:由于工程类型的选择影响到整个程序的编译和连接,所以大家在选择时不可以随便选一个 类型就完事了。下面列出几个常用的工程类型: 1:如果要开发一个带有资源的标准窗口程序,则选择 Win32App 类型,假如程序要用到对话框、图标、菜单、快捷键等的话就应该选择这个类型。 2:如果要开发一个没有资源的标准窗
4、口程序,则选择 Win32App(No Resource) 类型,一 般不用资源的情况很少,但本节用来测试的例子就是一个没有资源的标准窗口程序。 3:如果要开发一个 Windows 下的控制台程序,则应选择 Console APP 。 4:如果只开发一个 Dll,则应选择 Dll project 类型。设置好后单击“下一步”按钮;现在程序问你是否使用模板,这要看具体做什么程序了, 如建立标准窗口程序可以使用“WIN32EXE.tpl”模板,对话框程序可以使用“DialogApp.tpl”模板。当然可以不使用模板,我们现在就这么做,在模板选项中单击 “None”选项,然后单击“下一步”按钮。来到
5、这里我们可以设置需要那些类型的文件和文件夹,当然, “ASM”文件是必选的,其 它有用的选项我们在讲解对话框程序时再述。再次单击“下一步”按钮,设置如上图所示。好了,大家都可以看到工程向导到这里就完成了,单击“完成”按钮吧。现在工程就建立完成了,是不是很容易?嗯!现在看看开发窗口右边的工程管理器窗口, 我们刚才建立的工程生成了一个“Test.Asm”文件,该文件就是主代码文件了,我们可以 双击它来打开代码编辑窗口: 现在把代码粘贴过来,如果格式不好自己再整理一下;考虑到有些朋友手头上暂时没有该 例子的代码,没有的朋友可以直接复制下面的文本到 RadAsm 的代码编辑窗口中:.constIDD_
6、DLG_MAIN equ 1000 IDC_EDT_OUTPUT equ 1003 IDC_EDT_FIRST equ 1001 IDC_EDT_SECOND equ 1002 IDC_BTN_OUTPUT equ 1007 IDC_BTN_EXITAPP equ 1008.dataszExitApp db “你真的要退出程序吗?“,0szTitle db “对话框程序“,0;将两个字符串合并为一个的格式化字符串。szFormat db “%s%s“, 0hInstance dd ? ;程序实例句柄.codeDlgProc proc uses ebx esi edi hwnd, uMsg, w
7、Param, lParam;定义了三个局部数组,类型均为字节型LOCAL szBuffer1256:byteLOCAL szBuffer2256:byteLOCAL szOutputBuf512:bytemov eax, uMsg.if eax = WM_INITDIALOG ;这里编写窗口初始化的代码,下面是将三个局部数组清零invoke RtlZeroMemory, addr szBuffer1, sizeof szBuffer1invoke RtlZeroMemory, addr szBuffer2, sizeof szBuffer2invoke RtlZeroMemory, addr
8、szOutputBuf, sizeof szOutputBuf.elseif eax = WM_COMMANDmov eax, wParam.if ax = IDC_EDT_FIRST;这里编写处理第一个文本框的代码.elseif ax = IDC_EDT_SECOND;这里编写处理第二个文本框的代码.elseif ax = IDC_BTN_OUTPUT;先获取两个文本框的文本,分别保存在szBuffer1 和szBuffer2 中;然后通过格式化函数 wsprintf 将两个文本合并,最后输出到第三 个文本框中。invoke GetDlgItemText, hwnd, IDC_EDT_FIR
9、ST, addr szBuffer1, sizeof szBuffer1invoke GetDlgItemText, hwnd, IDC_EDT_SECOND, addr szBuffer2, sizeof szBuffer2invoke wsprintf, addr szOutputBuf, addr szFormat, addr szBuffer1, addr szBuffer2invoke SetDlgItemText, hwnd, IDC_EDT_OUTPUT, addr szOutputBuf.elseif ax = IDC_BTN_EXITAPPinvoke SendMessage
10、, hwnd, WM_CLOSE, 0, 0.endif.elseif eax = WM_CLOSE;这里处理程序退出代码invoke MessageBox, hwnd, addr szExitApp, addr szTitle, MB_ICONQUESTION or MB_YESNO.if al = IDYESinvoke EndDialog, hwnd, NULL.endif.elsemov eax, FALSEret.endifmov eax, TRUEretDlgProc endp;程序入口点start:;获取实例句柄; invoke GetModuleHandle, NULLmov
11、hInstance, eax;调用对话框函数来显示对话框。invoke DialogBoxParam, hInstance, IDD_DLG_MAIN, NULL, offset DlgProc, NULLinvoke ExitProcess, NULLend start现在右键单击“Test.Rc” ,在弹出的菜单中选择“新建”“对话框”菜单,如下图所 示:紧跟着会弹出一个要求保存对话框资源文件的对话框,双击“Res”文件夹,我们把对话框 资源文件保存在里,在文件名中填上“Test”作为资源文件名。之后程序会自动切换到资 源编辑界面,这里就是 RadAsm 自带的资源编辑界面了,好了,相信大
12、家对这个环境还是 比较熟眼的,下面就是添加和修改各控件的属性了,先修改对话框本身吧,设置如下的属 性:对话框属性名 设置值Name IDD_DLG_MAINCaption 对话框程序MaxButton FalseFont TahomaStartupPos CenterScreen其它的属性默认即可。接着我们添加三个文本框、三个标签、两个按钮,分别设置如下属性:文本框 1 属性名 设置值Name IDC_EDT_FIRSTAutoScroll Horizontal - 文本框 2 属性名 设置值Name IDC_EDT_SECONDAutoScroll Horizontal - 文本框 3 属性
13、名 设置值 Name IDC_EDT_OUTPUTAutoScroll BothMultiLine True - 标签 1 属性名 设置值ID 1Caption 第一个字符串: - 标签 2 属性名 设置值ID1Caption 第二个字符串: - 标签 3 属性名 设置值ID 1Caption 输出字符串: - 按钮 1 属性名 设置值Name IDC_BTN_OUTPUTCaption 输出(/这相当于环境变量,RadASM 会到 path 后面指定的路径查找相关程序。CharTab2=0251222522222236;20-2F3=1111111111222221;30-3F/字符表定义,
14、0 到 127 的默认字符表,与我们没多少关系,随便在 RadASM 中找一个配置好的编译器支持文件复制过来就行了。Open0=“C+ 文件 (*.c;*.cpp;*.h),*.c;*.cpp;*.h“1=“资源文件 (*.rc),*.rc“2=“文本文件 (*.txt),*.txt“3=“宏文件 (*.dsm),*.dsm“4=“所有文件 (*.*),*.*“src=“C+ 文件 (*.cpp),*.cpp,cpp“hdr=“头文件 (*.h),*.h,h“mod=“模块 (*.cpp),*.cpp,cpp“/工程中默认打开的文件类型列表,根据你的编译器源文件类型进行修改。CodeMacro
15、;关键字,活动行前插入,活动行后插入;I=从关键字行复制缩进;C=回车符;S=空格符;T=制表符;$=复制 Proc/Struct 名称;宏的设置默认已开启自动缩进1=if(),CT,CI2=else,T,3=elseif,T,4=while,T,CI;5=6=$ ),CIT,CI7=struct $,T,CI8=for(),CT,CI9=,T,CI;10=/这个段称之为代码宏,就是当你在 RadASM 的编辑器中输入代码时根据你的输入自动完成的内容。“;”后为注释,我翻译了一下。我们选 1=if(),CT,CI这条来讲解一下其含义:1 是序号,不用多说,if(),CT,CI是指当我在编辑器中输入 if()回车后,首先在第二行开始输出一个“”再自动回车到下一行开始输出一个制表符,再回车到第四行把第一行的 if()开始位置复制过来,后面跟一个“”,光标的位置定位在第二行的制表符后。实际