目录 上一页 下一页 附录A

-316- PC机汇编语言实战精解

  C:\ASM\>DEBUG BESTWISH.COM[Enter]
  -U100 107[Enter]
  0F8C:0100 BA0801    MOV DX,0108
  0F8C:0103 B409     MOV AH,09
  0F8C:0105 CD21     INT 21
  0F8C:0107 C3      RET
  通过这个示例程序,我们可以对"宏"汇编有个初步的认识:
  ① "宏"的定义与段、过程定义一样,具有特定的伪指令"MACRO"与"ENDM",格式上也类似于段定义与过程定义,只是"ENDM"的用法有些例外,它前面不能加上宏名;
  ② 宏的调用比较简单,只需要在源程序中直接引用宏名即可,不象子程序调用那样需要"CALL"指令;
  ③ 每个被调用的宏在编译的时候都要展开,如果源程序中多次调用了一个宏,那么编译生成的可执行文件里就会出现很多块结构相同的代码;
  宏汇编的第三个特点可以说是宏与子程序最根本的区别,利用宏汇编虽然可以使源程序简化,但是却使编译之后的可执行文件变得冗长了。看来事物总是有利有弊的,宏虽然有优点,但是也不能滥用。
  宏调用也可以象子过程调用那样传递参数,但是参数传递的方法与调用子过程完全不同。既不用寄存器,也不用存储器和堆栈。事实上宏调用更象高级语言中的函数调用。请看下面这个示例程序:
BESTWISH
print





code


main


msg
main
code

.ASM
MACRO
mov
mov
int
ENDM

segment
assume
org
proc
print
ret
db 'Best
endp
ends
end

p1
dx,offset p1
ah,09
21h



cs:code,ds:code
100h
near
msg

wish to you',0dh,0ah,24h


main

;定义一个带参数P1的宏
;将参数P1的偏移地址送入DX寄存器
;利用DOS的09H功能输出一个字符串

;宏结束





;输出字符串MSG





  宏定义伪指令的完整用法是:
  宏名  MACRO  [参数1,参数2,......]

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 附录A