-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 code main msg main code |
.ASM MACRO mov mov int ENDM segment assume org proc 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 |