作者:maxzhou88(周哥) 开发高性能的程序少不了用汇编编程,限于C语言中内嵌汇编语言的局限(如在C代码中混合汇编语言编程时,很难实现跳表),一些代码必须书写在独立的 汇编源文件中。遗憾的是,在调试时,只能看到裸的汇编码,而不能到懂标号,变量等,现在能这样C与ASM混合编程就方便多了。 编程环境:VC6.0,Masm32v8 优点: [1] 使用VC6.0集成开发环境可以利用其强大的Debug功能来实现源代码级调试(Source Code Debug),(看变量、设置断点、查看MASM32的高级命令展开......) [2] 使用VC6.0的资源编辑器,可视化编辑资源。 [3] 实现C/C++与ASM的混合编程。 [4] 在窗口下比在CMD下工作符合一般人的习惯,再也不需要写makefile文件或xxx.bat文件了。 方法: [1] 安装VC6.0,这个我就说了,大家都会的哦,一般我将它安装在 C:\Program Files\ Microsoft Visual Studio。 [2] 安装MASMv8.exe,一般我将它安装在 D:\MASM32 下。 [3] 将Win32ASM(masm32)中的ml.exe和ml.err拷贝到C:\Program Files\ Microsoft Visual Studio\VC98\Bin [4] 使用VC6.0新建一个空工程,如:hello(类型为:win32 console、win32 application、DLL等均可)。 [5] 把汇编和资源文件拷至新建工程目录下(hello.asm,hello.rc),并把这些文件加入工程中(将*.asm添加到Source Files, 将*.rc添加到Resource Files)。 [6] 配置IDE(这就配置一次就搞定):在VC的菜单tools/option…/paths(include files)中添加一个路径d:\MASM32\INCLUDE [7] 配置工程(每个工程都要这样配置):打开工程设置(project settings),点击*.asm文件选择(Custom Build), 命令中加上: ml /c /coff /Zi /Fo$(TargetDir)\$(InputName).obj $(InputPath) 输出中加上: $(TargetDir)\$(InputName).obj 注意选Settings for: Win32 Debug 和 Win32 release,将上面的两条都加上,而且每个*.ASM文件(如有多个ASM时)都这样设置。 [8] 点击VC的编译(build)就可以运行了哦。 至此就可以使用VC调试器源码级调试汇编程序了,可以设置断点,察看变量、内存、寄存器等,masm出现语法错误时可以双击output window中的错误行定位到程序中的指定行。 为了不在debug和release目录中产生超大的预编译头文件xxxx.pch,在工程设置(project settings)中的C/C++ -> Precompiled Headers的选项上选择"不使用预编译头",其实就现在的电脑而言,不使用预编译头也能快速地编译C代码的哦. 资源编译/编辑器蛮好用的.只是还有个问题我也没有搞懂:VC6.0的资源编译/编辑器不支持16进制的资源ID,非要用10进制的,我是用两种方法解决 的:一是将资源文件*.rc中的ID改成10进制,这样就可以编辑修改了;二是直接用老罗书中的rc文件导入,但在VC6.0中不要打开编辑它就可以了. 有人能告诉我VC6.0的资源编辑器用16进制ID的方法嘛,可能这很简单,我没有去深究罢了. 有空来踩踩我的空间哦:http://hi.baidu.com/maxzhou88 该文在我的百度空间:http://hi.baidu.com/maxzhou88/blog/item/7c7b4b09181ce186d1581b8f.html Win32 C++/ASM 混合编程的Demo下载: http://maxzhou88./pc 我在学老罗的MASM32程序时都是象这样在VC6.0的集成环境下工作的,他书中的例子我基本都试验过,比在DOS(CMD窗口)下方便多了,也不要什 么makefile文件,建个proj项目就搞定,最重要的是用VC的资源编辑器来编辑资源比原先手工编辑方便多了,如果有什么问题欢迎大家交流哦! 周哥(maxzhou88) 写于 2009-01-21 为了方便大家配置VC6.0 ,我在这里贴两张图: 这是配置项目中每个ASM文件的Custom Build 注意:Debug 和 Release 版本都要设置) 这是配置VC6.0的IDE,就设置一遍就搞定了。 不过这两张图是我百度空间的,但百度是不提供图片外链服务的哦!别急,先分别右击这两张图的图框,在弹出菜单的“属性”中COPY图片的URL地址,然后 将地址在IE中打开,这时图片就下载你机器的IE缓冲区中,再将这个看不到图的页面按F5刷新一下,哈哈!IE就直接从缓冲区中取图了,你也就看得见了。 没有办法啊,对不能外链的图就只能这样麻烦得做了哦。 另外,我在调试MASM32程序时还经常开CMD窗来实时查看变量,这也是种很好的Debug方法,其实在Win32下无所谓 windows窗口程序和console 控制台程序,也就是说在建立工程时可以选console 控制台程序类型来写windows窗口程序,反之亦然。我一般是这样做的,先将工程以windows窗口程序类型来建立新工程,当要用CMD窗口来调试输 出变量时,我就将工程的link选项卡中的Project options中的subsystem:windows 换成 subsystem:console就可以了,这时候编译连接后程序运行就会出CMD窗口,当调试完后再改回subsystem:windows即可。 CMD控制台输出的代码片段如下: .data? szBuffer db 'hello the world' ,0dh, 0ah ;要调试的输出内容 hStdOut dd ? ;控制台标准输出句柄,在CMD中是默认打开的 dwBytesWrite dd ? ;用下列语句就可以实现CMD的输出 invoke WriteConsole, hStdOut, addr szBuffer, sizeof szBuffer, addr dwBytesWrite, NULL |
|