宏汇编
为了减少编程的工作量,通常采用的两种方法
- 将程序段编为独立的子程序
- 将程序段定义为宏
格式:
- 由伪指令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
删除操作的目的是使该宏定义内容为空,程序汇编时不再展开。
注意:宏指令与指令助记符同名时,宏指令的优先级较高
思维导图

本文介绍了高级汇编语言技术,包括宏汇编的原理和使用,如MACRO和ENDM伪指令,以及宏调用、宏展开、局部变量和宏嵌套的概念。同时,讲解了重复汇编的IRP和IRPC伪操作,以及如何利用库管理宏指令,如INCLUDE和PURGE伪指令。此外,还提到了宏定义与子程序在处理时间和方式上的区别。
——高级汇编语言技术&spm=1001.2101.3001.5002&articleId=102891405&d=1&t=3&u=aa27445ed06c41f2a52ef0b00a4d4b86)
2095

被折叠的 条评论
为什么被折叠?



