安徽理工太骨计算机科学与技术系李兆 《汇编语言》第7章 3参数可以是操作码或操作数的一部分,但在宏定义体中必须 使用分隔符&即&是操作符,在宏定义中可作为形参的前缀 展开时把&前后的两个符号连接起来,形成操作码、操作数或 字符串。&只能出现在宏定义中。 例宏定义: SHIFT MArco X, Y, Z CL, X s&Z Y, CL ENDM 形参z是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的 分隔符,就不被当作形参,调用时也不会被实参代替。 上例被调用时:SHFT4,CL,AL SHIT6 BX AR 则宏展开时的目标代码:1Movc,4 1 SAL AL, CL 1 MOVcCL,6 1 SAR BX CL
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》第7章 ch7 11 3 参数可以是操作码或操作数的一部分,但在宏定义体中必须 使用分隔符&,即&是操作符,在宏定义中可作为形参的前缀, 展开时把&前后的两个符号连接起来,形成操作码、操作数或 字符串。&只能出现在宏定义中。 例 宏定义: SHIFT MARCO X,Y,Z MOV CL,X S&Z Y,CL ENDM 形参Z是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的 分隔符,就不被当作形参,调用时也不会被实参代替。 上例被调用时:SHIFT 4,CL,AL SHIFT 6,BX, AR 则宏展开时的目标代码: 1 MOV CL,4 1 SAL AL,CL 1 MOV CL,6 1 SAR BX,CL
安徽理工太骨计算机科学与技术系李兆 《汇编语言》第7章 例 如果这样: fo macro pl fo macro p1 p ta&p jmp tapl endm endm 宏调用: 宏调用 fo word var fo word var 宏展开: 宏展开 Jmp taword var Jmp ch7 12
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》第7章 ch7 12 例 fo macro p1 jmp ta&p1 endm 宏调用: fo word_var 宏展开: 1 Jmp taword_var 如果这样: fo macro p1 jmp tap1 endm 宏调用: fo word_var 宏展开: 1 Jmp ?
安徽理工太骨计算机科学与技术系李兆 《汇编语言》第7章 4伪操作%不能出现在形参的前面,通常用在宏调 用中,将跟在它后面的表达式的值转换成以当前基 数下的数,在宏展开时,用转换后的值代替形参。 例宏定义: MAKER MAcro COUNT, STR MAKER&COUNT DB STR ENDM ERRMA MACRO TEXT CNTR=CNTR+1 MAKER oCNTR, TEXT ENDM 经宏调用: ch7
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》第7章 ch7 13 4 伪操作%不能出现在形参的前面,通常用在宏调 用中,将跟在它后面的表达式的值转换成以当前基 数下的数,在宏展开时,用转换后的值代替形参。 例 宏定义: MAKER MACRO COUNT,STR MAKER&COUNT DB STR ENDM ERRMA MACRO TEXT CNTR=CNTR+1 MAKER %CNTR,TEXT ENDM 经宏调用:
安徽理工太骨计算机科学与技术系李兆 《汇编语言》第7章 CNTR=O ERRMA“ SYNTAX ERROR ERRMA‘INVA工 D OPERAND 宏展开: 2 MAKER1 DB 'SYNTAX ERROR MAKER2 DB INVALID OPERAND ch7
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》第7章 ch7 14 CNTR=0 ERRMA ‘SYNTAX ERROR’ ┇ ERRMA ‘INVALID OPERAND’ ┇ 宏展开: ┇ 2 MAKER1 DB ‘SYNTAX ERROR’ ┇ 2 MAKER2 DB ‘INVALID OPERAND’ ┇
安徽理工太骨计算机科学与技术系李兆 《汇编语言》第7章 713伪指令 LOCAL 宏定义体内可以使用标号。对于使用了标号的宏 定义,若多次调用,势必产生标号的多重定义,汇编 时出错。解决这一问题可使用伪指令 LOCAL,其一般 格式为: L0CAL局部标号1,局部标号2,… 宏汇编程序将为标号分别生成格式为“?? X0X的唯一的符号以代替各局部标号。XXXX代表 四位十六进制数0000~FFF这样,在汇编源程序中 避免了多次宏调用时生成的标号重复。 注意: LOCAL伪操作只能用在宏定义体内,而且必 须是 MACRO伪操作后的第一个语句,在 MACRO与 LOCAL不能出现注释和分号标志。 15
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》第7章 ch7 15 7.1.3 伪指令 LOCAL 宏定义体内可以使用标号。对于使用了标号的宏 定义,若多次调用,势必产生标号的多重定义,汇编 时出错。解决这一问题可使用伪指令LOCAL,其一般 格式为: LOCAL 局部标号1,局部标号2,… 宏 汇 编 程 序 将 为标 号 分 别 生 成 格 式 为“? ? XXXX”的唯一的符号以代替各局部标号。XXXX代表 四位十六进制数0000~FFFF。这样,在汇编源程序中, 避免了多次宏调用时生成的标号重复。 •注意:LOCAL伪操作只能用在宏定义体内,而且必 须是MACRO伪操作后的第一个语句,在MACRO与 LOCAL不能出现注释和分号标志