1、汇编教程单击菜单 文件新建文件 或按快捷键 CtrlN,在代码编辑窗口中键入如下的代码:(注意大小写敏感)完成后我把代码保存为F:backupDoctest.asm,然后再单击菜单 构建。如果大家还记得的话,就知道这是编译、连接、运行一次搞定的选项,当编译路径没有配置错误,程序即会进行编译、连接和运行。至于汇编代码我就不解析了,也不是本教程的范围。如果编译期间发生了错误,则可以在输出窗口中查看错误提示,一般第一次的错误都是没有设置好Masm32的路径。如果没错的话RadAsm会显示整个编译和连接的过程,如上面的程序就输出如下信息:F:Asmmasm32BinML.EXE /c /coff /C
2、p /nologo /IF:Asmmasm32Include F:backupDoctest.asm Assembling: F:backupDoctest.asmF:Asmmasm32BinLINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:F:Asmmasm32Lib F:backupDoctest.obj Microsoft (R) Incremental Linker Version 5.12.8078Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
3、Executing: F:backupDoctest.exeMake finished.Total compile time 1693 ms好了,我们现在打开RadAsm,单击菜单 文件新建工程,在弹出的对话框中设置好工程名和工程的类型,如下图所示:由于工程类型的选择影响到整个程序的编译和连接,所以大家在选择时不可以随便选一个类型就完事了。下面列出几个常用的工程类型:1:如果要开发一个带有资源的标准窗口程序,则选择Win32App类型, 假如程序要用到对话框、图标、菜单、快捷键等的话就应该选择这个类型。2:如果要开发一个没有资源的标准窗口程序,则选择Win32App(No Resource)
4、类型,一般不用资源的情况很少,但本节用来测试的例子就是一个没有资源的标准窗口程序。3:如果要开发一个Windows下的控制台程序,则应选择Console APP 。4:如果只开发一个Dll,则应选择Dll project类型。设置好后单击“下一步”按钮;现在程序问你是否使用模板,这要看具体做什么程序了,如建立标准窗口程序可以使用“WIN32EXE.tpl”模板,对话框程序可以使用“DialogApp.tpl”模板。当然可以不使用模板,我们现在就这么做,在模板选项中单击“None”选项,然后单击“下一步”按钮。来到这里我们可以设置需要那些类型的文件和文件夹,当然,“ASM”文件是必选的,其它有用
5、的选项我们在讲解对话框程序时再述。再次单击“下一步”按钮,设置如上图所示。好了,大家都可以看到工程向导到这里就完成了,单击“完成”按钮吧。现在工程就建立完成了,是不是很容易?嗯!现在看看开发窗口右边的工程管理器窗口,我们刚才建立的工程生成了一个“Test.Asm”文件,该文件就是主代码文件了,我们可以双击它来打开代码编辑窗口:现在把代码粘贴过来,如果格式不好自己再整理一下;考虑到有些朋友手头上暂时没有该例子的代码,没有的朋友可以直接复制下面的文本到RadAsm的代码编辑窗口中:.constIDD_DLG_MAIN equ 1000IDC_EDT_OUTPUT equ 1003IDC_EDT_F
6、IRST equ 1001IDC_EDT_SECOND equ 1002IDC_BTN_OUTPUT equ 1007IDC_BTN_EXITAPP equ 1008.data szExitApp db 你真的要退出程序吗?,0 szTitle db 对话框程序,0 ;将两个字符串合并为一个的格式化字符串。 szFormat db %s%s, 0 hInstance dd ? ;程序实例句柄 .codeDlgProc proc uses ebx esi edi hwnd, uMsg, wParam, lParam ;定义了三个局部数组,类型均为字节型 LOCAL szBuffer1256:by
7、te LOCAL szBuffer2256:byte LOCAL szOutputBuf512: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 =
8、 WM_COMMAND mov 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_FIRST, addr szBuffer1, sizeof szBuffer1 inv
9、oke GetDlgItemText, hwnd, IDC_EDT_SECOND, addr szBuffer2, sizeof szBuffer2 invoke wsprintf, addr szOutputBuf, addr szFormat, addr szBuffer1, addr szBuffer2 invoke SetDlgItemText, hwnd, IDC_EDT_OUTPUT, addr szOutputBuf .elseif ax = IDC_BTN_EXITAPP invoke SendMessage, hwnd, WM_CLOSE, 0, 0 .endif .else
10、if 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, TRUE retDlgProc endp;程序入口点start: ;获取实例句柄; invoke GetModuleHandle, NULL mov hInstance, eax ;调用对话
11、框函数来显示对话框。 invoke DialogBoxParam, hInstance, IDD_DLG_MAIN, NULL, offset DlgProc, NULL invoke ExitProcess, NULLend start现在右键单击“Test.Rc”,在弹出的菜单中选择“新建”“对话框”菜单,如下图所示:紧跟着会弹出一个要求保存对话框资源文件的对话框,双击“Res”文件夹,我们把对话框资源文件保存在里,在文件名中填上“Test”作为资源文件名。之后程序会自动切换到资源编辑界面,这里就是RadAsm自带的资源编辑界面了,好了,相信大家对这个环境还是比较熟眼的,下面就是添加和修改
12、各控件的属性了,先修改对话框本身吧,设置如下的属性:对话框属性名设置值NameIDD_DLG_MAINCaption对话框程序MaxButtonFalseFontTahomaStartupPosCenterScreen其它的属性默认即可。接着我们添加三个文本框、三个标签、两个按钮,分别设置如下属性:文本框1属性名设置值NameIDC_EDT_FIRSTAutoScrollHorizontal-文本框2属性名设置值NameIDC_EDT_SECONDAutoScrollHorizontal-文本框3属性名设置值NameIDC_EDT_OUTPUTAutoScrollBothMultiLineTr
13、ue-标签1属性名设置值ID1Caption第一个字符串:-标签2属性名设置值ID1Caption第二个字符串:-标签3属性名设置值ID1Caption输出字符串:-按钮1属性名设置值NameIDC_BTN_OUTPUTCaption输出(&O)-按钮2属性名设置值NameIDC_BTN_EXITAPPCaption退出(&E)整个对话框最后设计成下图所示:如果想预览一下对话框的运行效果可以单击工具栏上的按钮来进行。整个界面设计好后别忘了保存,直接按“CtrlS”就可以。好了,现在就等着你按下“AltF5”了,如果一切顺利的话立即可以看到程序运行,如下图所示:程序的功能是先获取两个文本框的文本
14、,然后通过单击“输出”按钮来一并输出到第三个文本框中RadASM使用说明 原创 RadASM使用说明 原创 操作方面: 一、书签: SHIFT+F8为所在行下书签或删除书签,可通过编辑书签开关书签。(CRTL+F8为下一书签,F8为上一书签)二、列选择: 拉框时用到,CRTL+B为切换行&列 拉框。 三、展开 & 关闭模块 & 显示行号: CRTL+E为展开和关闭模块,在左下脚2 & 3小按钮是展开全部和关闭全部的方式,1是显示行号。四、显示API的函数原型 当光标碰到一个函数名称时,可显示一个函数的原型,用视图信息工具打开即可。五、输出窗口 可通过视图输出窗口或点击标题栏上的图标即可。六、全
15、屏显示: 通过CRTL+W切换。七、锁定文件: 在文件树中,可鼠标右键锁定&解锁文件。 八、新建项目: 当创建一个项目时,可通过向导的倒数第2步会出现“导入”按钮,来导入已有的文件(如图标等),然后在文件组中,右键导入文件即可,可通过工程组(右键文件树)对文件进行分类。九:设置工程的保存位置 & 文件关联 设置工程的保存位置:通过选项设置路径Projects ,文件关联:在文件夹选项文件类型选项卡里设置(关联.asm和.rap)十:断点设置:(程序运行时才会起作用CRTL+SHIFT+F5) A:在工程选项中把“发行”改成“调试” B:在文件定义的最后加上 include E:RadASMMa
16、smIncRADbg.inc C:ALT+F8为设置&清除断点,通过编辑断点可全部清除断点 D:当断点没有反映时可能是LINK时依赖的资源文件不存在造成的(通过工程选项中可设置LINK)工程工程选项:(只推荐几个常用的)Compile(编译资源文件):4,O,$B/RC.EXE /v /I $I,1 (4代表最终输出的RES文件名)Assembly(汇编asm为机器码):3,O,$BML.EXE /c /coff /Cp /Zi /nologo /I$I,2 (3代表最终输出的OBJ文件名)Link(连接文件并生成PE文件):5,O,$BLINK.EXE /SUBSYSTEM:WINDOWS
17、/DEBUG /VERSION:4.0 /LIBPATH:$L /OUT:$5,3,4 (/OUT:$5PE文件名)Run(运行文件):0,0,5(5代表运行的文件名)Run w/debug(调试运行):0,0,$EOllyDbg,5(5代表调试运行的文件名)生成PE文件的顺序:1:Compile(编译资源文件) SHIFT+F52:Assembly(汇编asm为机器码) F53:Link(连接文件并生成PE文件) SHIFT+ALT+F54:Run(运行文件) SHIFT+CRTL+F55:Run w/debug(调试运行) CRTL+DOTHER:1。选项设置路径:可设置相应的路径。2。O
18、llyDbg中可设置OD相关路径:选项界面选项目录选项卡。如何配置RadASM来支持你的编译器cao_cong 这两天打算配置一下RadASM来支持一下 LCC-Win32 和 Turbo C+ 3.0,虽然以前给 RadASM 配置过支持VC6的Cpp文件,但当时做完就没管了,我这人又比较懒,不愿写东西,导致现在再配置时很多东西都忘了。这次只好又重新研究了一番,费时费力。配置完LCC后真有点筋疲力尽,不管别的了,先把配置的过程写下来,一是以后要用时可以看看,二也希望写出来让大家看了也能对配置编译器的过程清楚一点,可以自己动手来配置RadASM支持自己喜欢的编译器。Turbo C+ 3.0 的
19、配置我已经不太想继续干了,谁有兴趣配置好了的话别忘了给我发一份。 在配置一个编译器之前,首先你要了解你所用的编译器编译、连接、资源编译程序的命令行选项,这样你配置时才能有的放矢。要知道相关程序的命令行选项的话你只需在命令提示符中输入相关程序就可得到。我一般喜欢在后面加一个 /? 参数。如这样:lcc.exe /? 。在控制台窗口中右击鼠标,把显示的命令行选项全选后复制到新建的一个文本文件,以便参考。我这次就以我配置的LCC编译器支持文件来作为模板,对各个部分进行讲解,可能比较罗嗦,主要还是想说清楚一点,让大家少走弯路。有什么说得不对的地方还请大家指正。另外我在配置时RadASM中提到的菜单及选
20、项等都是基于我自己汉化的RadASM来谈的,如果给你造成了什么歧义的话,还请多多原谅。不浪费大家时间了,下面进入正题:在开始之前,我把LCC-Win32 的命令行选项列出来(我都翻译过了),以便大家对照:-lcc.exe(编译程序) 命令行: 选项 含义-A 激活所有警告. -ansic 禁用lcc-win32的语言扩展. -D D后面跟随定义的符号. 例如:-DNODEBUG 定义NODEBUG 符号. 注意: 在D和符号间没有空格-check 检查给定源文件的错误. 不生成目标文件. -E 生成一个中间文件及预处理程序输出.输出文件名将根据输入文件名来生成, 如,编辑 foo.c 你将得到
21、foo.i. -E+ 类似于 -E 选项, 还会生成一个#行号 xxx 指令,预处理程序生成一个 # xxx 指令. -EP 类似 -E 选项,但不生成 #行号 指令. -errout= 附加警告/错误信息到指定的文件.如 -errout=Myexe.err.将把所有警告和错误信息附加到 Myexe.err 中。 -eN 设置最大错误数N. 例如:-e25. -fno-inline 忽略内联指令. -Fo 强制输出文件名. -g2 生成调试信息. -g3 支持函数堆栈跟踪. 如果遇到一个中断,将显示函数堆栈. -g4 支持函数堆栈及行号跟踪.-g5 支持函数堆栈,行号及返回调用堆栈崩溃跟踪.
22、-I 把一个路径添加到包含的路径,如编译器查找头文件的路径.例:-Ic:projectheaders. 注意在I和后面跟随的路径之间没有空格.-libcdll 使用用于 lcclibc.dll 的声明.用此选项编译的文件要在连接器 lcclnk 中使用 -dynamic 选项.-M 在标准输出中显示当处理给定的输入文件时预处理程序打开的所有文件.不生成目标文件.-M1 在标准输出中递归显示每个 include 文件,指出其调用自何处,何时关闭. -nw 不显示警告.错误仍将显示. -O 优化输出. 这将启动 peephole 优化器. -o 用于给定输出文件的名称.与上面的 Fo 参数相同.
23、-overflowcheck 生成代码测试所有加,减,乘的溢出.-p6 启用 Pentium III 指令-profile 注入代码到已生成的程序中来测试执行时间.此选项不兼容调试级别高于 2 的程序. -S 生成一个汇编文件. 输出文件名依赖于输入文件.如:编辑 foo.c 你将得到 foo.asm. -s n 设置转换密度为 n ,值必须在 0.0 和 1.0 之间. 如: -s 0.1 -shadows 当一个本地变量覆盖了一个全局变量时警告. -stackinit n 函数入口值为 n 时初始化未初始化的堆栈.-U 未定义符号跟随在U后面. -unused 警告未使用的分配并禁止垃圾代
24、码.-v 显示编译器版本和编辑日期-z 生成一个 LCC 中间语言的文件.生成的文件以 .lil 为扩展名. -Zp1,2,4,8,16 设置结构的默认队列为一, 二, 四,等. 如果你设为一,实际上等于无队列.- 命令行选择区分大小写.使用 - 或 / 在命令行中引入选项. - lcclnk.exe(连接程序) 命令行: Lcclnk 命令行选项.使用 - 或 / 在命令行中引入选项. -o 设置输出文件名称.请在 o 和文件名间插入一个空格.-errout 把所有警告/错误信息写入到指定名称的文件. -subsystem 指出输出文件类型. Console 或 windows 程序-sta
25、ck-commit 选择此选项,你可以提交多于一个的页面(4096 字节). -stack-reserve 默认堆栈大小为 1MB. 用此选项改变限制. -dynamic使用 lcclibc.dll 作为默认库并动态链接到程序,用以代替连接到 libc.lib. -dll 此选项告诉连接程序这是一个 .dll 文件而不是一个 .exe 文件. -map 指定 map 文件名.此选项不兼容 -s 选项. -nolibc 不包括标准 C 程序库. -s 从程序中去除所有符号和调试信息.-version nn.nn为程序添加版本号.-errout= 写入所有警告或错误到给定名称的文件.注意在文件名和
26、等号间没有空格.-nounderscores 例如创建一个用于 Visual Basic 的 DLL 时,最好 DLL 的输出函数名没有下划线.-entry 设置 DLL 的入口点函数-version输出版本名称-lcclib.exe(编译库(Lib)的工具) 命令行: 格式: lcclib 选项: /out:输出文件/extract:目标/remove:目标/verbose: 显示输出过程默认同名的目标文件将被替换-lrc.exe(编译资源脚本的程序) 命令行: 用法: lrc 选项 .RC 输入文件选项: /r: 生成 .RES 文件.这是预设好的. /v: 显示细节(Verbose)/z
27、: 生成一个 .map 文件.名称依赖于输入文件/d: 定义符号/o: 输出到指定文件. o 和文件名间没有空格/fo: 输出到指定文件. o 和文件名间没有空格/l: 默认语言号后面应立即跟随十进制的语言号.l和语言号之间没有空格/i: 添加一个 include 路径. i和路径间没有空格/a: 写打包文件(图标,位图, 等等) 选项不区分大小写- 配置一个让RadASM支持的编译器只需写一个INI文件,把各个段配置好。配置好后放在RadASM目录,直接在RadASM的菜单选项-编程语言中把你的配置文件添加进去就可以了。我这里把配置的文件命名为Lcc.ini,我把每个段都列出来(列主要我们要
28、配置的部分),各个段的含义我在每个列出的段后用“/”开头的注释说明。Description1=Lcc Win32/这个段是对你配置的编译器描述,你可以随便写。Enviroment1=path,C:LccBin;/这相当于环境变量,RadASM会到path后面指定的路径查找相关程序。CharTab2=0251222522222236;20-2F3=1111111111222221;30-3F/字符表定义,0到127的默认字符表,与我们没多少关系,随便在RadASM中找一个配置好的编译器支持文件复制过来就行了。Open0=C+ 文件 (*.c;*.cpp;*.h),*.c;*.cpp;*.h1=资源文件 (*.rc),*.rc2=文本文件 (*.txt),*.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1