汇编语言-第七章.docVIP

  • 4
  • 0
  • 约2.09千字
  • 约 8页
  • 2017-04-11 发布于贵州
  • 举报
汇编语言-第七章汇编语言-第七章

第7章 宏汇编 【课前思考】   1. 宏汇编技术与子程序技术相比有哪些优、缺点?它们的工作方式有何差别?   2. 虚参与实参是否应一一对应?   3. 哑元表中的变元可以取何种值?   4. 操作符及%操作符如何应用?   5. 宏定义体内的程序段有标号怎么办?   6. 宏定义允许嵌套、递归调用吗?      【学习目标】   了解并掌握宏汇编技术。   【学习指南】   学习宏汇编时注意与子程序技术做比较。通过多看举例,掌握哑元表变元取值、宏定义的嵌套、递归调用等难点技术。   【难重点】   宏调用的优点、宏调用和子程序调用工作方式的差别   虚参与实元   哑元表中的变元取值的多样性   操作符   %操作符   LOCAL伪操作解决宏定义体中的符号问题   宏定义的嵌套、递归      【知识点】   7.1 宏汇编     例7.12 宏定义:    INT21    MACRO   FUNCTN   ;调用DOS功能在屏幕上显示一个字符          MOV    AH,FUNCTN   ;功能号放在AH中          INT    21H      ;DOS调用指令          ENDM    DISP     MACRO   CHAR          MOV    DL,CHAR    ;要显示字符的ASCII码放在DL中          INT21   02H          ENDM    宏调用:          DISP ?    宏展开:        1  MOV    DL, ?    ;要显示字符?        2  MOV    AH,02H    ;功能号2表示要显示一个字符        2  INT    21H宏调用的优点:   由于宏指令可以带哑元,调用时可以用实元取代,这就避免了子程序因参数传送带来的麻烦,使宏汇编的使用更加灵活。实元可以是常数、寄存器、存储单元名以及用寻址方式能找到的地址或表达式等。从以后的例子中可看到,实元还可以是指令的操作码或操作码的一部分等,宏汇编的这一特性是子程序所不及的。   但是,宏调用的工作方式和子程序调用的工作方式是完全不同的。   子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间;而宏调用则是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间也就越大。前面已经提到,用宏汇编可以免去执行时间上的额外开销,但如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素。因此,可以根据具体情况来选择使用方案。一般说来,由于宏汇编可能占用较大的空间,所以代码较长的功能段往往使用子程序而不用宏汇编;而那些较短的且变元较多的功能段,则使用宏汇编就更为合理了。   应该注意的是:在程序中,宏定义必须出现在宏调用之前,也就是说必须先定义后调用。   往往把宏定义放在程序中所有段的代码之前,即在程序一开始先列出程序中所用的所有宏定义,以便在程序中调用。【本章小结】   宏是源程序中一段有独立功能的程序代码。它只需要在源程序中定义一次,就可以多次调用它。调用时只需要用一个宏指令语句。     宏展开时用宏定义体取代源程序中的宏指令名,而且用实元取代宏定义中的哑元。在取代时,实元和哑元一一对应。实元的个数应该和哑元的个数相等,但汇编程序并不要求它们必须相等(在MASM6中,可以用 :REQ指定某个变元必须有)。宏展开后所得到的语句应该是有效的,否则汇编程序将会指示出错。   由于宏指令可以带哑元,调用时可以用实元取代,使宏汇编的使用增加了灵活性。实元可以是常数、寄存器、存储单元名以及用寻址方式能找到的地址或表达式等。还可以是指令的操作码或操作码的一部分。甚至可以为空。   宏调用是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间也就越大。用宏汇编可以免去执行时间上的额外开销,但如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素。一般说来,那些较短的且变元较多的功能段,使用宏汇编更为合理。   宏定义必须先定义后调用。允许嵌套、递归。   操作符在宏定义体中可以作为哑元的前缀,展开时把前后两个符号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。   %操作符把跟在它之后的表达式的值转换成当前基数下的数,在宏展开期间,用这个数来取代哑元。   MASM6中可以用 := 操作符为宏变元提供缺省的参数值。     LOCAL伪操作可以解决宏展开后出现的标号多重定义问题。   MASM6用.LISTMACROALL、.LISTMACRO和 .N

文档评论(0)

1亿VIP精品文档

相关文档