《汇编语言入门教程-第七章宏定义.ppt》由会员分享,可在线阅读,更多相关《汇编语言入门教程-第七章宏定义.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、宏结构程序设计宏汇编重复汇编条件汇编统称宏结构宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术宏具有宏名的一段汇编语句序列宏定义时书写宏指令这段汇编语句序列的缩写宏调用时书写宏展开宏指令处用这段宏代替的过程宏汇编时实现宏的参数功能强大,颇具特色配合宏,还有宏操作符和有关伪指令宏汇编第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术其中哑元表给出了宏定义中所用到的形式参数其中哑元表给出了宏定义中所用到的形式参数(或称虚参或称虚参),每个哑元之间用逗号隔开,
2、每个哑元之间用逗号隔开 第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术变元是操作码的一部分,必须用变元是操作码的一部分,必须用&符号作为分隔符符号作为分隔符第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术&是一个操作符,它在宏定义体中可以
3、作为哑元的前缀,展开时可以把是一个操作符,它在宏定义体中可以作为哑元的前缀,展开时可以把&前后两个符前后两个符号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。下面两个例号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。下面两个例子进一步具体说明这个问题。子进一步具体说明这个问题。第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术注意:注意:如果程序中多次调用该宏定义如果程序中多次调用该
4、宏定义时,展开后台出现标号的多重定义,这时,展开后台出现标号的多重定义,这是不能允许的。汇编程序对是不能允许的。汇编程序对LOCALLOCAL伪操作伪操作的局部标号表中的每一个局部标号建立的局部标号表中的每一个局部标号建立唯一的符号唯一的符号(用?用?00000000一?一?FFFF)FFFF)以以代替在展开中存在的每个局部标号。必代替在展开中存在的每个局部标号。必需注意,需注意,LOCALLOCAL伪操作只能用在宏定义体伪操作只能用在宏定义体内,而且必须是内,而且必须是MACROMACRO伪操作后的第一语伪操作后的第一语句,在句,在MACROMACRO和和LOCALLOCAL之间不允许有注释
5、之间不允许有注释和分号标志。和分号标志。第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术汇编程序把跟在之后的表达汇编程序把跟在之后的表达式的值转换成当前基数下的数,式的值转换成当前基数下的数,在展开期间,用这个数来取代在展开期间,用这个数来取代哑元。哑元。宏操作符总结宏操作符总结;宏注释符,用于表示在宏定义中的注释。采用这个符号的注释,在宏展
6、开时不出现&替换操作符,用于将参数与其他字符分开。如果参数紧接在其他字符之前或之后,或者参数出现在带引号的字符串中,就必须使用该伪操作符;宏定义dstringmacro stringdb&string&,0dh,0ah,$endm;宏调用dstringdstring 0!Number!;宏展开 1db This is a example.,0dh,0ah,$1db 0 Number 10,0dh,0ah,$转义注释符转义注释符传递注释符传递注释符与宏有关 的伪指令局部标号伪指令LOCAL 标号列表宏定义体采用了标号,应使用LOCAL加以说明它必须是宏定义MACRO语句之后的第一条语句宏定义删除
7、伪指令PURGE 宏名表不需要某个宏定义时,可以把它删除宏定义退出伪指令EXITM伪指令EXITM表示结束当前宏调用的展开第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术例例 要要求求建建立立一一个个100D字字的的数数组组,其其中中每每个个字字的的内内容容是是下下一一个个字的地址,而最后一个字的内容是第一个字的地址。字的地址,而最后一个字的
8、内容是第一个字的地址。ARRAY LABEL WORD REPT 99 DW$+2 ENDM DW ARRAY 第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术重复次数由自变量表中的自变量个数重复次数由自变量表中的自变量个数来确定。自变量表必须用尖括号括起,来确定。自变量表必须用尖括号括起,它可以是常数、符号、字符串等它可以是常数、符号、字符串等 第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语
9、言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术例例 宏宏指指令令GOTO L,X,REL,Y(其其中中REL可可以以是是Z,NZ,L,NL等等)可可以以根据不同情况产生无条件转移指令或比较和条件转移指令。根据不同情况产生无条件转移指令或比较和条件转移指令。宏定义宏定义:第一章第一章 基础知识基础知识第七章第七章 高级汇编语言技术高级汇编语言技术例例 宏定义可允许递归调用,此时条件伪操作可用来结束宏递归。宏定义可允许递归调用,此时条件伪操作可用来结束宏递归。宏宏指指令令POWER可可以
10、以用用来来实实现现X和和2N相相乘乘。这这只只需需对对X左左移移N次次即即可可实实现现,可可以设以设COUNT为递归次数的计数值,当该数与为递归次数的计数值,当该数与N相等时就可结束遇归调用。相等时就可结束遇归调用。宏定义:宏定义:宏结构的作用宏汇编、重复汇编和条件汇编为源程序的编写提供了很多方便,灵活运用它们可以编写出非常良好的源程序来汇编系统中有些以圆点起始的 伪指令(如.startup、.exit等)实际上是一种宏结构dstringMACRO string;定义字符串db&string&,0dh,0ah,$ENDMmainbeginMACRO dsseg;设置数据段地址mov ax,ds
11、segmov ds,axENDMdispmsgMACRO messagemov dx,offset messagemov ah,09hint 21hENDM例题例题mainendMACRO retnum;返回DOS,可不带参数ifb mov ah,4ch;没有参数else mov ax,4c00h+(retnum AND 0ffh);有参数endifint 21hENDM例题例题.model small.stack 256.datamsg1equ this bytedstringmsg2equ this bytedstring.codestart:mainbegin data;建立DS内容dispmsg msg1;显示msg1字符串dispmsg msg2;显示msg2字符串mainend;返回DOSend start例题例题