首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-02-05 
谁能告诉我汇编中宏在哪里定义?编译器好像找不到我定义的宏,谁能给出个简单的例子告诉我在哪里定义宏以及

谁能告诉我汇编中宏在哪里定义?
编译器好像找不到我定义的宏,谁能给出个简单的例子告诉我在哪里定义宏以及如何调用宏。谢谢。

[解决办法]

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

热点排行