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
- Masm32 学习笔记
- masm32
- MASM32学习日志,常用宏
- PE学习(一)masm32开发环境和ollyICE使用
- win32 masm32 汇编学习 及 远程线程实例
- MASM32配置
- masm32入门
- [原创]MASM32新手指南
- MASM32新手指南
- MASM32环境设置
- ultraEit masm32环境搭建
- MASM32快速起步
- masm32 求字符串长度
- vs2010调试Masm32汇编程序
- MASM32的使用
- MASM32百科讲解
- MASM32的使用
- MASM32使用教程
- 利用锚点制作简单索引效果
- celery
- Java 带标号跳出多重循环
- Android Netty开发示例
- DirectFB学习之面向对象设计
- Masm32 学习笔记
- ubuntu16.04安装搜狗输入法
- SDUT 1298 活动选择
- ArcGIS,Plsql,Navicat连接Oracle的配置比较
- 十一、数据处理函数
- codeforces 305B. Continued Fractions(数学)
- 蓝桥杯省赛小结
- 1038. Recover the Smallest Number (30)
- python的数据爬取问题