当前位置: 网学 > 编程文档 > 汇编语言 > 正文

MASM宏使用总结

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式

这篇文章是我花了一个晚上作的总结,从一个比较本质的角度解释了一些宏的行为,不是教科书设置是Programmer Guide达到的程度。看起来比较没有味道,但是如果你要用起宏来你会发现我几乎没有说废话。不是教你怎么去用宏,但是你看过之后也不用学了,自己试验一下就可以写了。虽然没有几个家伙还在用MASM,更少人用MACRO了,可能这个就是我另类的风格吧。

MASM宏使用总结

导语

MASM(Macro Assembler)是由微软公司提供的汇编工具,虽然有些年头了,但是仍然存在于 vc.net这样比较新的工具中。有很多汇编教科书以这个为对象,讲述了如何用汇编去设计一个程序,作为计算机科学系学生的基础课。但是,讲述的内容大体上还是停留在5.1版,而且停留在DOS的时代。虽然提到了win32下的汇编,但是并没有放在首要的位置。另一个被忽视的是作为MASM最大特色的宏,怎么去看待汇编工具中提供的强大的宏,以及怎么和在什么场合下使用宏,语焉不详。本文是作者在大量使用MASM宏,搭建了一个汇编环境下的OOP系统后,作的一个总结。

善用宏,能够减少重复编码,以及构建强大的功能,是重用代码,美化代码的一个有力的工具。宏在高级语言中是一个应该被极力避免的东西,在低级语言中确未必如此。

宏就是预处理

宏就是在代码被汇编成为obj文件之前进行的预处理。由于发生在汇编期(Assembly-Time, 和高级语言中的编译期是一个意思),所以不会给执行期带来负担,可以用作代码生成工具,设置和C++中的模板一样,用作meta-programming的工具。在MASM中宏可以分为两种:1、 Text Macro 2、Procedure (Function) Macro。第一种宏就是和#define pi 31415926这样的简单的文本替换的宏,第二种就是那种带参数,可以有局部变量,可以返回值这样的可以看作函数或者过程的宏。下面就先从Text Macro入手,看看如何使用简单的宏。

简单的文本宏

你可以给一个字符序列指定一个符号名,然后在源代码的其余部分用这个名字来代替这个字符序列。这个指定了名字的文本就是文本宏。说白了就是文本替换。用TEXTEQU来定义一个这样的宏。

  name TEXTEQU <text>
name TEXTEQU textvar
name TEXTEQU %numvar

我这里给出的使用说明和MASM Programmer Guide中给出的不大一样,但是这个更能说明问题。我在这儿只解释第一个用法,后面的用法将在讲了“汇编期变量”之后再讲。举一些使用的例子。

  pi TEXTEQU <3.1416>
DWPTR TEXTEQU <WORD PTR>
arg1 TEXTEQU <[bp+4]>

然后在代码中就可以用pi这些名字来代替3.1416这些。<>表示他们是字符串,如果把不加<> 则会把你给出的字符串当作一个汇编期的文本变量来进行求值,而这样的话会出错的。

汇编期的变量与常量

这个几个东西其实都有自己的名字,其实按照用法来说就是汇编期的常量与变量的意思。比如Text Macro(对,就是前面的文本宏)用作汇编期的文本常量,Name Assignment用作汇编期的数值变量。

  1. 定义汇编期常量

    什么是汇编期常量呢?其实也就是常量的意思,因为无论在编译期还是执行期它都是静态的,一旦定义之后其值不能改变。回忆在C中,你用#define来定义常量。但是#define可以改变一个宏所等于的值,也就是说常量与否需要你的维护(编译器会给出一个警告)。在MASM 中有一个关键字专门用来定义常量,尝试改变常量的值会得到一个错误提示。

      name EQU expression
    name EQU <text>

    第一个是用作定义个“数值”常量,第二个是用作定义“文本”常量。以后要特别区分开文本和数值。

  2. 定义汇编期文本变量

    汇编期文本变量是对“text macro”的另外一个看法。其实它们是同一个事情。当你定义了一个文

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号