例如:CRLF MACRO MOV AH,2 MOV DL,OAH ;OAH是回车ASCII.码 Int 21h MOV DL,ODH ;ODH是换行ASCII码 INT 21H ENDM 该宏功能是实现回车换行。 888
例如:CRLF MACRO CRLF MACRO MOV AH,2 MOV DL,0AH ;0AH是回车ASCII码 INT 21H INT 21H MOV DL,0DH ;0DH是换行ASCII码 INT 21H INT 21H ENDM 该宏功能是实现回车换行。 6
6.1.2宏调用与宏展开 宏调用的格式为: <宏名>[K实参表>] 说明: ①宏名为已定义过的宏,即必须先定义、后调用。 ②实参表中的参数将一一对应替换宏定义中形参表中的参 数。两处的参数个数可以不同。若实参个数多于形式参数 个数,则多余的实参忽略;若实参个数少于形式参数个数, 则多余的形式参数用零或空格代替。 ③汇编程序在汇编源程序时,若遇到宏调用,则用调用所 提供的实参数替代相应的形参数,并把宏体中的指令嵌入●● 到源程序中。这种嵌入操作称为宏展开
6.1.2 宏调用与宏展开 宏调用的格式为: <宏名> [<实参表>] 说明: ①宏名为已定义过的宏 宏名为已定义过的宏,即必须先定义 、后调用 。 ②实参表中的参数将一一对应替换宏定义中形参表中的参 数 。两处的参数个数可以不同 。若实参个数多于形式参数 个数,则多余的实参忽略;若实参个数少于形式参数个数, 则多余的形式参数用零或空格代替。 ③汇编程序在汇编源程序时,若遇到宏调用,则用调用所 提供的实参数替代相应的形参数,并把宏体中的指令嵌入 到源程序中 。这种嵌入操作称为宏展开 。 7
。 例题6.1应用宏功能,实现字符串的屏幕输出。● 1.宏定义 PROMPT MACRO MESSAGE MOV AH,09H LEA DX,MESSAGE INT 21H ENDM 00 。888
例题6.1 应用宏功能,实现字符串的屏幕输出 实现字符串的屏幕输出。 1.宏定义 PROMPT MACRO MESSAGE MOV AH,09H LEA DX,MESSAGE INT 21H ENDM 8
2.宏调用 DATA SEGMENT STRING1 DB“STRING 0 JTPUT!$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX PROMPT STRING1;宏调用 MOV AH,4CH INT 21H CODE ENDS END START .888 9
2.宏调用 DATA SEGMENT DATA SEGMENT STRING1 DB “STRING OUTPUT !$” DATA ENDS DATA ENDS CODE SEGMENT ASSUME CS ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS DS,AX PROMPT STRING1 ;宏调用 MOV AH, 4CH MOV AH, 4CH INT 21H CODE ENDS CODE ENDS END START 9
3.宏展开 经汇编宏展开后, 代码段指令如下(+表示为宏展开后的语句): CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX + mov ah,09h; 宏调用Prompt String1的宏展开 + lea dx,Stringl + int 21h MOV AH,4CH INT 21H CODE ENDS END START 10
3.宏展开 经汇编宏展开后, 代码段指令如下(+表示为宏展开后的语句 表示为宏展开后的语句): CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX ,DATA MOV DS,AX + mov ah, 09h ah, 09h;宏调用Prompt String1 Prompt String1的宏展开 + lea dx, String1 + int 21h MOV AH, 4CH INT 21H CODE ENDS CODE ENDS END START 10