好的,所以我的工作达到了一定程度,但是当我尝试将变量名称传递给宏时,它会说:
错误A2071:初始化程序幅度对于指定大小而言太大
我不知道我在这里做错了什么。我正在关注如何传递参数的例子,但这就是它给我的。所以这就是我到目前为止所做的。
TITLE MASM TestTExt (TestTExt.asm)
; Description:
;
; Revision date:
INCLUDE Irvine32.inc
;macro stuff
mWriteString MACRO text
LOCAL string
.data
string db text
.code
push edx
mov edx,OFFSET string
call WriteString
pop edx
ENDM
.data
myStr db "Test1",0
.code
main PROC
call Clrscr
mWriteString myStr
call Crlf
exit
main ENDP
END main
现在这不起作用,但是当我在.code部分中调用宏时,如果将它放在像“Some Thing”这样的字符串中,那么宏工作并继续它的快乐方式。这是为什么?我没有传递正确的字符串,或者我没有在我的.data
部分中终止字符串?
我正在使用的例子是这样的
.data
myString db "abcefg",0
.code
mWriteString myString
答案 0 :(得分:0)
我认为问题在于:
string db text
尝试将text
参数的偏移量存储到一个字节中。
自从我使用汇编语言宏以来已经有一段时间了,但我很确定你在宏中不需要那个.data
指令。以下应该可以正常工作:
mWriteString MACRO text
push edx
mov edx,OFFSET text
call WriteString
pop edx
ENDM
答案 1 :(得分:0)
亚当,
我认为错误是......
在宏...'字符串db text'必须零终止...添加',0'最后
宏调用中的......
1)' .data myStr db" Test1",0'不需要输入......
2)因此调用你的宏' mWriteString"任何文字"'它将设置' .data'对你而言。
这个宏的作用是它可以让你直接写出引用的字符串。您可以将其保存在宏库中并重新使用它。
我知道这是一篇旧帖子,但希望它可以帮助你......或其他任何人。
此致 Sam K