当前位置: 代码迷 >> 汇编语言 >> 哪位高手能告诉小弟我汇编中宏在哪里定义
  详细解决方案

哪位高手能告诉小弟我汇编中宏在哪里定义

热度:8392   发布时间:2013-02-26 00:00:00.0
谁能告诉我汇编中宏在哪里定义?
编译器好像找不到我定义的宏,谁能给出个简单的例子告诉我在哪里定义宏以及如何调用宏。谢谢。

------解决方案--------------------------------------------------------
Assembly code
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
  相关解决方案