3,宏指令的有效范围 宏指令的优先级最高。可以定义与指令助记符、伪操作同名的宏,此 时,同名机器指令或伪操作失效。只有用 PURGE伪操作取消宏定义, 能恢复同名机器指令或伪操作的原始含义。 PURGE伪操作可同时取消多 个宏定义,被取消的宏名之间用逗号分隔。格式为: PURGE MNAME1 MNAME2][, MNAMB31 中 MNAME1, MNAME2, MNAME3,,是宏定义名,多个将被取消 的宏定义名用逗号分开。 4,宏厍 如果希望某些宏定义能被多个程序调用,可以将这些宏定义放在一起 库文件的形式存放起来,这个库文件就是宏库。当一个源程序需要使 用这些宏定义时,可以在程序中使用 INCLUDE伪指令,其语句格式 为: INCLUDE HNAME HNAME是库文件名,其扩展名为LIB。 宏汇编程序在汇编源程序时,如遇到 INCLUDE伪指令,就将它指定的库 文件的内容扫描一遍,如同在源程序中进行库中的宏定义一样,因而其 后的程序可以直接调用库中的宏定义
3.宏指令的有效范围 宏指令的优先级最高。可以定义与指令助记符、伪操作同名的宏,此 时,同名机器指令或伪操作失效。只有用PURGE伪操作取消宏定义,才 能恢复同名机器指令或伪操作的原始含义。PURGE伪操作可同时取消多 个宏定义,被取消的宏名之间用逗号分隔。 格式为:PURGE MNAME1 [, MNAME2][,MNAME3]… 其中:MNAME1,MNAME2,MNAME3,…是宏定义名,多个将被取消 的宏定义名用逗号分开。 4.宏库 如果希望某些宏定义能被多个程序调用,可以将这些宏定义放在一起 以库文件的形式存放起来,这个库文件就是宏库。当一个源程序需要使 用这些宏定义时,可以在程序中使用INCLUDE伪指令,其语句格式 为:INCLUDE HNAME HNAME是库文件名,其扩展名为.LIB。 宏汇编程序在汇编源程序时,如遇到INCLUDE伪指令,就将它指定的库 文件的内容扫描一遍,如同在源程序中进行库中的宏定义一样,因而其 后的程序可以直接调用库中的宏定义
1312参数的使用 (1)在宏定义、宏调用的参数中,经常使用的宏操作符有4个: ①连接操作符& 8操作符在宏定义体中可以作为形参的前级,宏展开时将&前后两个符 号连接形成一个符号。这个连接后的符号可以是指令助记符、操作数或 符串 ②文本操作符<> 在宏调用时,有的实参含空格或逗号,这时就必须使用文本操作符< 把一个完整的实参括起来,作为一个单一的实参 表达式操作符% %操作符在宏调用时用在实参的前面,格式是:%表达式 编语言用%后表达式的值而不是表达式文本来取代对应的形参。 ④字符操作符! !操作符用在宏调用中,格式是∷!宏操作符 !操作符告诉宏汇编程序,其后的字符不作操作符使用,而是以字符本身 的意义进行处理。如“!9%”表示“%”不是表达式操作符,而是一个百分
13.1.2参数的使用 (1)在宏定义、宏调用的参数中,经常使用的宏操作符有4个: ①连接操作符& &操作符在宏定义体中可以作为形参的前缀,宏展开时将&前后两个符 号连接形成一个符号。这个连接后的符号可以是指令助记符、操作数或 是一个字符串。 ②文本操作符<> 在宏调用时,有的实参含空格或逗号,这时就必须使用文本操作符<> 把一个完整的实参括起来,作为一个单一的实参。 ③表达式操作符% %操作符在宏调用时用在实参的前面,格式是:%表达式 汇编语言用%后表达式的值而不是表达式文本来取代对应的形参。 ④字符操作符! !操作符用在宏调用中,格式是:!宏操作符 !操作符告诉宏汇编程序,其后的字符不作操作符使用,而是以字符本身 的意义进行处理。如“!%”表示“%”不是表达式操作符,而是一个百分 号
(2)-与宏中形参字符串对应的实参可以是数值、指令、寄存器名、存储 单元名以及用寻址方式能找到的地址或表达式等 如例131中的、V2可能是存储数值的内存单元地址,也可能是用等 价定义伪指令定义的数值;3可能是内存单元地址 例132加减法运算。参数OP代表指令 宏定义 MOP MACRO OP,Ⅹ,Y,Z PUSH AX MOV AX,Ⅹ OP AX, Y MOV Z AX POP AX ENDM
(2)与宏中形参字符串对应的实参可以是数值、指令、寄存器名、存储 单元名以及用寻址方式能找到的地址或表达式等。 如例13.1中的V1、V2可能是存储数值的内存单元地址,也可能是用等 价定义伪指令定义的数值;V3可能是内存单元地址。 例13.2加减法运算。参数OP代表指令。 宏定义: MOP MACRO OP,X,Y,Z PUSH AX MOV AX, X OP AX,Y MOV Z, AX POP AX ENDM
宏调用及宏展开: MOP ADD, DA1, DA2, <WORD PTR RES> PUSH AX MO∨AX,DA1 ADD AX, DA2 MO√ WORD PTR RES,AX ++++ POP AX MOP SUB, DA1+2, DA2 +2, <WORD PTR RES+2 PUSH AX MOV AX DA1+2 SUB AX, DA2+2 MOV WORD PTR RES+2, AX POP AX
宏调用及宏展开: MOP ADD,DA1,DA2,<WORD PTR RES> + PUSH AX + MOV AX,DA1 + ADD AX,DA2 + MOV WORD PTR RES,AX + POP AX MOP SUB,DA1+2,DA2+2,<WORD PTR RES+2> + PUSH AX + MOV AX,DA1+2 + SUB AX,DA2+2 + MOV WORD PTR RES+2,AX + POP AX
例13.3寄存器循环移位。参数DIR代表指令的一部分,参数 REG代表寄存器。 宏定义 REGROL MACRO DIR, REG, CNT MOV CL, CNT RO&dIR REG, Cl ENDM 宏调用及宏展开 REGROL L, AX, 8 MOV L, 8 ROL AX, CL REGROL R, BL MO∨CL,4 ROR BL, CL
例13.3寄存器循环移位。参数DIR代表指令的一部分,参数 REG代表寄存器。 宏定义: REGROL MACRO DIR,REG,CNT MOV CL,CNT RO&DIR REG,CL ENDM 宏调用及宏展开: REGROL L,AX,8 + MOV CL,8 + ROL AX,CL REGROL R,BL,4 + MOV CL,4 + ROR BL,CL