宏定义 宏名 macro[形参表] 宏定义体 endm mainbegin MACR0;定义名为皿 ainbegin的宏,无参数 moⅴax,@data ;宏定义体 mov ds. ax 宏注释符 ENDM ;法定义结束 mainend MACRO retum ;带有形参1 retum moy al, retum;;宏定义中使用参数 mov ah. 4ch int 21h ENDM
宏定义 宏名 macro [形参表] 宏定义体 endm mainbegin MACRO ;;定义名为mainbegin的宏,无参数 mov ax,@data ;;宏定义体 mov ds,ax ENDM ;;宏定义结束 mainend MACRO retnum ;;带有形参retnum mov al,retnum ;;宏定义中使用参数 mov ah,4ch int 21h ENDM 宏注释符
宏调用 宏名[实参表] start: mainbegin ;宏调用,建立DS内容 dispmsg string;宏调用,显示字符串 mainend 0 ;宏调用,返回D0S end start >宏调用的实质是在汇编过程中进行宏展开 宏展开的具体过程是:当汇编程序扫描源程序遇 到已有定义的宏调用时,即用相应的宏定义体取代 源程序的宏指令,同时用位置匹配的实参对形参进 行取代
宏调用 宏名 [实参表] start: mainbegin ;宏调用,建立DS内容 dispmsg string ;宏调用,显示字符串 mainend 0 ;宏调用,返回DOS end start ➢ 宏调用的实质是在汇编过程中进行宏展开 ➢ 宏展开的具体过程是:当汇编程序扫描源程序遇 到已有定义的宏调用时,即用相应的宏定义体取代 源程序的宏指令,同时用位置匹配的实参对形参进 行取代
宏展开 宏展开—在汇编时,用宏定义 体的代码序列替代宏指令的过程。 start: mainbegin;宏指令 moⅴax,@data;宏展开 moy ds. ax mainend0;宏指令 moy alo 宏展开 moy ah. 4ch int 21h
宏展开 宏展开——在汇编时,用宏定义 体的代码序列替代宏指令的过程。 start: mainbegin ;宏指令 1 mov ax,@data ;宏展开 1 mov ds,ax mainend 0 ;宏指令 1 mov al,0 ;宏展开 1 mov ah,4ch 1 int 21h
宏的参数 宏的参数使用非常灵活 宏定义时, 可以无参数,例如54a的 mainbegin 可以带有一个参数,例如54a的 mainend 也可以具有多个参数;例如55a的 shlext 参数可以是常数、变量、存储单元、指令(操 作码)或它们的一部分,也可以是表达式;例如 55b的shft和 shot 宏定义体可以是任何合法的汇编语句,既可以 是硬指令序列,又可以是伪指令序列;例如56的 cstring
宏的参数 宏的参数使用非常灵活 宏定义时, 可以无参数,例如5.4a的mainbegin 可以带有一个参数,例如5.4a的mainend 也可以具有多个参数;例如5.5a的shlext 参数可以是常数、变量、存储单元、指令(操 作码)或它们的一部分,也可以是表达式;例如 5.5b的shift和shrot 宏定义体可以是任何合法的汇编语句,既可以 是硬指令序列,又可以是伪指令序列;例如5.6的 dstring
;宏定义 例5.5a shlext macro shloprand, shInum push cx moⅴcl, shiny shI shloprand, cl pop CX endm ;宏指令 shlext ax 6 ;宏展开 push cX mov cl.06 shl ax, cl popcⅹ
;宏定义 shlext macro shloprand,shlnum push cx mov cl,shlnum shl shloprand,cl pop cx endm ;宏指令 shlext ax,6 ;宏展开 1 push cx 1 mov cl,06 1 shl ax,cl 1 pop cx 例5.5a