汇编语言(七)——高级汇编语言技术

宏汇编

为了减少编程的工作量,通常采用的两种方法

  • 将程序段编为独立的子程序
  • 将程序段定义为宏

格式:

  • 由伪指令MACRO和ENDM实现
宏指令名 MACRO [形式参数表]
	......;
	ENDM(这里ENDM之前不用写宏名) 

宏调用和宏展开

  • 宏调用格式:
	宏指令名 [实参表]

注意:1.宏定义必须放在宏调用之前。2.需要多个实参时,需用逗号分隔。3.实参可以为空。

  • 宏展开:当汇编程序扫描源程序遇到已有定义的宏调用,就会用相应的宏定义进行展开。
    注意:这时候就类似于把宏体的代码复制到了宏调用处,会使得代码量增加。

与宏有关的操作符

  • 连接操作符(&):作用使得‘&’的前后两个符号连在一起,构成一个新的符号。
  • 表达式操作符(%):格式(%表达式),对表达式立即求值,将结果作为实参。
  • 转义操作符(!):格式(!字符),将后面的字符作为普通字符对待,而不是表达式本身所有的特殊含义。

LOCAL伪指令——解决多次宏调用出现的多个相同标号问题

  • 格式:LOCAL 标号及变量表(各标号、变量之间均用逗号分隔)
  • LOCAL伪操作只用在宏定义体内,且必须紧接MACRO伪指令之后,中间不可有注释和分号标志。
  • 在处理宏调用时,汇编程序将自动以??0000~??FFFF替代LOCAL伪指令列出的各个标号或变量

宏嵌套

  • 即宏体中包含宏体
  • 注意:1.宏体中调用的宏指令需被先定义。2.不可以直接调用内层定义和宏指令,需调用外层,才可再调用内层。

宏嵌套的两种形式

  • 宏定义中嵌套宏定义:这种情况下必须先调用外层的宏定义,然后才能调用内层的宏定义
  • 宏定义中嵌套宏调用:即被宏调用的宏是在该宏定义之前就定义好了,这里的宏可以单独调用

宏定义和子程序的区别

  • 处理的时间不同:宏调用是在源程序被汇编时由汇编程序处理的;而子程序调用是在程序执行期间由CPU直接执行的
  • 处理的方式不同:宏调用是替换代码;子程序是将控制权由调用者转给子程序并执行。
  • 参数处理不同
  • 执行速度不同:子程序会更慢
  • 占用的存储器空间大小不同:多次调用同一宏指令会使得程序出现多次重复代码;子程序则是不管调用几次,目标代码只出现一次。

重复汇编

但汇编语言需要重复地完成相同的一组代码,可用重复汇编

  • 格式:
REPT  整数表达式
	重复体
	ENDM
  • 功能:使汇编程序对重复体作重复汇编,以整数表达式的值作为重复次数。

IRP伪操作:

  • 格式:
IRP  形参,<实参表>
	 重复体
ENDM
  • 功能:使汇编程序对重复体作重复汇编,每作一次汇编就依次将实参表中的一个实参取代重复体中的形参。

IRPC伪操作

  • 格式:
IRPC  形参,字符串
	  重复体
ENDM
  • 功能:重复汇编,但会依次使用字符中的一个字符串,与IRP相似,但实参必须是字符串。

注意:1.重复汇编并不简化代码

库的使用

  • 建立宏库:1.为了在宏指令库中存放一个或多个宏指令定义,可以用EDIT或其他文本编辑器建立宏库。2.扩展名是*.mac
  • 调用插入伪指令INCLUDE
    格式:
INCLUDE  MYFILE.MAX
  • 删除宏库中部分宏伪指令PURGE
    格式:
PURGE  INOUTM,LRCF

删除操作的目的是使该宏定义内容为空,程序汇编时不再展开。

注意:宏指令与指令助记符同名时,宏指令的优先级较高

思维导图

汇编语言(七)——高级汇编语言技术_第1张图片

你可能感兴趣的:(汇编语言)