谁能告诉我汇编中宏在哪里定义?
编译器好像找不到我定义的宏,谁能给出个简单的例子告诉我在哪里定义宏以及如何调用宏。谢谢。
[解决办法]
assume cs:code,ds:datashowmsg macro msg lea dx,msg mov ah,09h int 21hendmdata segment msg db 'a macro test$'data endscode segmentstart: mov ax,data mov ds,ax showmsg msg mov ax,4c00h int 21hcode endsend start
[解决办法]
定义在调用之前就可,也可以定义在单独的文件中,然后在开头include 进来
[解决办法]
宏可以定义在单独的inc文件中,使用时可以include之。
masm32中自带了很多有用的宏,可以在安装目录下的macro目录中查找。
[解决办法]
源程序开始通常要初始化DS,可以定义成一个宏:
mainbegin MACRO ;;定义一个名为mainbegin的宏,无参数
mov ax,@data ;;宏定义体
mov ds,ax
ENDM ;;宏定义结束
宏定义中的注释如果用双分号分隔,则在后面的宏展开中将不出现该注释。
为返回DOS,源程序最后要用4ch号调用,我们可以把它也定义成宏,并设置返回代码这个参数:
mainend MACRO retnum ;;带有形参retnum
mov al,retnum ;;宏定义中使用参数
mov ah,4ch
int 21h
ENDM
源程序中经常需要输出信息,现在我们也将它定义成宏:
dispmsg MACRO message
lea dx,message ;;也可以用mov dx,offset message
mov ah,09h
int 21h
ENDM
用宏汇编实现信息显示
.model small
.stack
.data
string db ’Hello,Everybody !’,0dh,0ah,’$’
.code
start: mainbegin ;宏调用,建立DS内容
dispmsg string ;宏调用,显示string字符串
mainend 0 ;宏调用,返回DOS
end start
其生成的列表文件:
start: mainbegin ;宏指令
1 mov ax,@data ;宏展开
1 mov ds,ax
dispmsg string ;宏指令
1 lea dx,string ;宏展开
1 mov ah,09h
1 int 21h
mainend 0 ;宏指令
1 mov al,0 ;宏展开
1 mov ah,4ch
1 int 21h
end start