Masm32 学习笔记

来源:互联网 发布:飞机水上迫降 知乎 编辑:程序博客网 时间:2024/06/02 00:56

偶然机会接触到了 Masm32 语言(win32 下的 M-“宏” asm-“汇编语言”),并拜读了罗云彬那本书,收获颇大。

以前在学c语言的时候,看反汇编或者看汇编类的书籍,都会觉得很难啃,无法领会这两者之间的奥秘。在看了Masm32后,好像在汇编(16位 or dos时代)和c语言(或VC++)之中找到了两者之间的桥梁,但是这桥甚长,仍然无法看到对面的桥头。


第一篇,写点自己摸索时候的感触吧。

Masm 利用Macros和一些经过封装的“指令操作符”(不知道这称呼是否准确)来是整个程序代码的结构达到类似C语言的结构,这应该就是懂C语言和稍微有点asm基础的人能大致

看懂masm的原因吧。然而,在一些细节方面仍然需要对计算机的组成和asm有一定的了解。

例如:

最近在写一个小程序的时候想用 CRC32 来验证2个文件是否一样:

call CRC32 ...

mov dwCRC,eax

call CRC32...

mov dwCRC1,eax

.if dwCRC != dwCRC1

...

.endif


熟悉汇编的人应该马上可以看出 .if 后面的比较条件是有问题的。


回归正题

LastError$() 这个Macro对于熟悉win32的人来说很容易就惨到是干什么的。

他结合了 GetLastError() 与 FormatMessage(), 并返回错误信息字符串的地址。

eg:

.data

szCap db 'Error',0

.if eax == 0

invoke MessageBox, NULL, GetLastError$(),offset szCap,MB_OK or MB_ICONERROR

;这里的invoke 就是对于 call 的封装,省了手动push参数的一步

;用上fn这个宏的话,这一句就可以简化成:

fn MessageBox,NULL,GetLastError$(),"Error",MB_OK or MB_ICONERROR

.endif


这样就可以很方便的在写程序的时候进行debug了。


关于Macro的用法和介绍在Masm32 sdk中有专门分类的文档进行列举。 把这些文档都吃透的时候Masm写win32程序便能便捷了。

那么问题来了,能比在vs下用win32, mfc, c#更简单? 这个答案不说大家心里也明白。

这个对我来说是一种知其所以然的学习,哈哈,至于相比之下masm32的优点,自行来体会吧!

--- Great Masm32




0 0
原创粉丝点击