(1)宏定义 率中科技大? 他们之间的差别仅在于输出缓冲区的首址不一样.如果讲该首址定义成 形参,就可将其写成宏定义: WRITE MACRO A LEA DX,A MOV AH,9 INT 21H ENDM 说明: ()宏名字可以与其他变量,标号,保留字同名,汇编程 序在处理时宏名字优先级最高.利用这一特点,程序员可以 设计新的指令系统
⑴ 宏定义 他们之间的差别仅在于输出缓冲区的首址不一样.如果讲该首址定义成 形参,就可将其写成宏定义: WRITE MACRO A LEA DX,A MOV AH,9 INT 21H ENDM 说明: (1)宏名字可以与其他变量,标号,保留字同名,汇编程 序在处理时宏名字优先级最高.利用这一特点,程序员可以 设计新的指令系统
(1)宏定义 華中科技大? (2)形参可有可无个数不限,但总字符长度不超过132个,个参 数之间用逗号隔开; (3) ENDM和MACRO必须成对出现; (4)宏指令必须先定义后调用,因为它是在汇编期间处理的
⑴ 宏定义 (2) 形参可有可无个数不限,但总字符长度不超过132个,个参 数之间用逗号隔开; (3) ENDM和MACRO必须成对出现; (4) 宏指令必须先定义后调用,因为它是在汇编期间处理的
(2)宏调用与宏扩展 華中科技大浮 ●调用格式:宏指令名[实在参数[,实在参数].…] 对于例1中所作的宏定义,所应做的宏调用为: wrIte BUF1 ;宏调用 wrITE IN_BUF ;宏调用 汇编程序的处理方式: ()第一次扫描时,先扫描宏定义,将宏名字、形参、宏体均填入宏定 义表中再遇到宏调用时,则嵌入宏体,用实参按位置顺序替换形参, 这一过程称为宏扩展。 (2)第二次扫描时,再将其转换成目标代码
⑵ 宏调用与宏扩展 ●调用格式: 宏指令名 [实在参数 [,实在参数]…… ] 对于例1中所作的宏定义,所应做的宏调用为: WRITE BUF1 ;宏调用 ┇ WRITE IN_BUF ;宏调用 汇编程序的处理方式: (1) 第一次扫描时,先扫描宏定义,将宏名字、形参、宏体均填入宏定 义表中再遇到宏调用时,则嵌入宏体,用实参按位置顺序替换形参, 这一过程称为宏扩展。 (2) 第二次扫描时,再将其转换成目标代码
(2)宏调用与宏扩展 華中科技大? 在汇编列表文件(.1st)中,宏拓展后的宏体语句均在前面冠 以”+”以示与其他语言的区别,即拓展后的形式为: + LEA DX,BUF1 + MOV AH,9 int 21H : + LEA DX, IN_FUT + MOV AH,9 + int 21H
⑵ 宏调用与宏扩展 在汇编列表文件(.lst)中,宏拓展后的宏体语句均在前面冠 以 ” + ”以示与其他语言的区别,即拓展后的形式为: + LEA DX,BUF1 + MOV AH,9 + INT 21H ┇ + LEA DX,IN_FUT + MOV AH,9 + INT 21H
(2)宏调用与宏扩展 華中科技大学 说明: (1)宏指令名要与原宏定义的名字一致, (2)实参与形参应按位置关系一一对应: i.实参个数多形参,多余实参被忽略; ii.实参个数小于形参,缺少的实参被处理成空白(没有字符). 还可以讲D0S9号和10号调用写成一个宏定义: IO MACRO A,B LEA DX, A ;形参A代表输入/输出缓冲区首址 MOV AH, B ;形参B代表D0S调用号 INT 21H ENDM
⑵ 宏调用与宏扩展 说明: (1) 宏指令名要与原宏定义的名字一致; (2) 实参与形参应按位置关系一一对应: i.实参个数多形参,多余实参被忽略; ii.实参个数小于形参,缺少的实参被处理成空白(没有字符). 还可以讲DOS9号和10号调用写成一个宏定义: IO MACRO A, B LEA DX, A ;形参A代表输入/输出缓冲区首址 MOV AH, B ;形参B代表DOS调用号 INT 21H ENDM