- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
原书笔记
《80X86汇编语言程序设计教程》
宏:
前言:
宏是宏汇编语言的主要特征之一!
若某程序片段需要多次使用,为了避免重复,可以将其定义为一条宏指令,利用宏指令代表该程序片段,汇编过程中,汇编器自动将宏指令替换为原程序片段。
(2015-9-16 20:43:44更新)关于宏的问题的探讨,远不止于这些内容,对于很多的细节问题,待到以后仔细查阅,此时,就不花太多时间在这些细节上了。
宏指令的定义和使用
宏指令在使用之前一定要先定义!
宏指令定义的一般格式如下:
宏指令名 MACRO [形式参数表]
……
程序片段
……
ENDM
;以下为示例:
GETCHAR MACRO ;该宏指令无参数
mov ah, 1
int 21H
ENDM
MACRO和ENDM是一对伪指令,成对出现,表示宏定义的开始和结束。
宏定义体:MACRO与ENDM之间的部分是宏定义体,可以是由指令、伪指令、宏指令构成的程序片段
宏指令名由用户指定,适用一般标号命名规则
形式参数是可选的,并可以有一个或多个,多个形参之间用逗号间隔
宏调用:定义宏指令后,就可使用宏指令来表示对应的程序片段,这称为宏调用。一般格式如下
宏指令名 [实参列表]
;以下为示例:
GETCHAR
mov ah, al
;通过调用宏指令后,将获得的字符,传送至ah中
宏展开(宏扩展):在对源程序进行汇编时,汇编程序把源程序中的宏指令替换成对应的宏定义体,这称为宏展开或宏扩展。
宏指令的用途
缩短源代码
将源程序中多次用到的某个程序片段(可以实现一定的功能,如换行、获得一个输入、打印一个输出等)定义成一条宏指令,在源程序中需要的地方,直接使用宏指令即可,有效的缩短了代码的长度,使得源代码可读性增强。
扩充指令集
CPU的指令集是确定的。
利用宏能够在汇编语言的形式上对指令集进行扩充,扩充后的指令集是 机器指令集 与 宏指令集 的并集。
方便了源程序的编写,也增强了源程序的可读性。
改变某些指令助记符的意义
宏指令名可以与指令助记符或伪操作名相同,同名的情况下,宏指令的优先级最高,而同名的指令或伪操作就失效了。
利用以上原理,就可以实现改变指令助记符的意义了。
宏指令中参数的使用
宏指令可以不带参数,但是,带参数的宏指令往往更加灵活。
宏指令的参数很灵活
宏指令的参数可以是常数、寄存器和存储单元,还可以是表达式
宏指令的参数可以是操作码
宏调用参数个数可以与定义时不一致
红调用时使用的实参个数应该与宏定义时的形参个数一致,但是汇编程序并不要求严格相等。
处理办法:
若实参个数多于形参个数,那么多余的实参将被忽略
若实参个数少于形参个数,那么多余的形参将用空代替,即什么也没有
另外,必须保护最能展开后的程序片段是正确的,有效的。
特殊的宏运算符
特殊的宏运算符
运算符
使用格式
定义 用处
参数
强迫替换运算符 宏定义
字符串
字符串原样传递运算符 宏调用、重复块、重复汇编、条件汇编
!
!字符
文字字符运算符 宏调用
%
%表达式
表达式运算符 宏调用
;;
;;注释
宏注释 宏定义
以上宏运算符可用于宏定义、宏调用、重复块
强迫替换运算符
(用于)宏定义中,如果形参出现在其他字符的紧前或紧后,或者出现在带引号的字符串中,为了使汇编器识别这是一个形参符号,就必须使用该运算符,以区分参数。
以上标注黑粗体的两句话说明了使用强迫替换运算符的两种用法!!!
注意:
当在宏定义中,形参前或者形参后紧邻形参的一个(注意!!!只有一个不会)符号都不会被识别为其他字符(包括在字符串中的情形),而仅用作区分形参的作用。(重要)
不同的是,在字符串中,多余的会被认为是一个普通字符,而在字符串之外,会被认为是多余的字符而出错
强迫替换运算符不能用于变量或标号名!!!注意!!!
字符串原样传递运算符
在(用于)宏调用、重复块和条件汇编中,将它括起来的内容作为一个字符串,也就是作为一个整体;
宏调用中,若实参包含逗号或空格等间隔符,则必须使用该运算符,以保证,实参的完整性;
若实参是某个有特殊意义的字符,为了使它只表示字符本身,也可使用该运算符,把它括起来。
注意!!!使用字符串作为实参可以有两种情况
如果字符串之间没有逗号或者空格等分隔符,可以将没有双引号扩着的字符串直接作为实参,但是,由于在宏展开过程中,是文本替换,所以,要保证,替换处的两边有两个双引号或者单引号!!!
如果字符串之间有逗号或者空格等分隔符,则必须使用字符串原样传递运算符。
总结:
实参
实参可以有三种形式:
没有双引号或者单引号扩着的,并且其间
文档评论(0)