1,过程定义伪指令PROC、ENDP 1.1 过程就是子程序。一个过程可以被其它程序所调用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。 过程定义伪指令的格式为 <过程名> PROC [类型] … … RET <过程名> ENDP 注意:PROC和ENDP必须成对出现。 1.2 过程的类型有两种: NEAR——(默认类型)表示段内调用 FAR——表示段间调用 调用一个过程的格式为: CALL <过程名> 2,宏定义伪指令 如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏指令名来代替这个程序段。 指令的格式为: <宏指令名> MACRO [形参表] <宏定义体> ENDM 例:两个数之和的宏定义和宏调用。 宏定义为: DADD MACRO X,Y,Z MOV AX,X ADD AX,Y MOV Z,AX ENDM X、Y、Z是形式参数。调用宏DADD时可写为: DADD DATA1,DATA2,SUM DATA1,DATA2,SUM是实际参数,由它们替换定义中的X、Y、Z。 3,宏调用与过程(子程序)调用都是一次定义,多次调用。它们之间的差别是: ① 执行形式:宏命令伪指令由宏汇编程序在汇编过理中进行处理,而CALL、RET则是由CPU执行的指令。 ② 汇编结果:宏命令伪指令汇编后被展开。 ③ 执行速度:宏命令执行速度较快(因无调用转移) ④ 占用内存:宏指令简化了源程序,但不能简化目标程序,并不节省内存单元。使用过程可以节省代码占用的内存空间。 宏展开:汇编程序会把宏调用按宏定义展开。 例如:宏定义为: Display MACRO string LEA DX,string MOV AH,9 INT 21H ENDM 程序中宏调用: …… DISPLAY ERROR_MESSAGE DISPLAY EXIT_MESSAGE …… 汇编后的结果:(带有+号的指令为宏展开后的结果) …… + LEA DX,ERROR_MESSAGE + MOV AH,9 + INT 21H + LEA DX,EXIT_MESSAGE + MOV AH,9 + INT 21H …… |
|