Assembly 将字符串传递给宏汇编程序MASM
好的,我已经在一定程度上实现了这一点,但是当我尝试将变量名传递给宏时,它会这样说: 错误A2071:初始值设定项幅值对于指定的大小太大 我看不出我做错了什么。我正在按照我的例子介绍如何传递参数,但这就是它给我的。这就是我到目前为止的情况Assembly 将字符串传递给宏汇编程序MASM,assembly,macros,x86,masm,irvine32,Assembly,Macros,X86,Masm,Irvine32,好的,我已经在一定程度上实现了这一点,但是当我尝试将变量名传递给宏时,它会这样说: 错误A2071:初始值设定项幅值对于指定的大小太大 我看不出我做错了什么。我正在按照我的例子介绍如何传递参数,但这就是它给我的。这就是我到目前为止的情况 TITLE MASM TestTExt (TestTExt.asm) ; Description: ; ; Revision date: INCLUDE Irvine32.inc ;
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部分调用宏时,如果把它放在这样的字符串“something”中,宏就会正常工作。为什么呢?我是不是传递了正确的字符串,还是在.data
部分中没有正确终止字符串?
我使用的例子是这样的
.data
myString db "abcefg",0
.code
mWriteString myString
我认为问题在于线路:
string db text
正在尝试将文本
参数的偏移量存储到字节中
我已经很久没有使用汇编语言宏了,但我很确定宏中不需要.data
指令。以下几点应该可以很好地发挥作用:
mWriteString MACRO text
push edx
mov edx,OFFSET text
call WriteString
pop edx
ENDM
亚当
在我看来,错误是
在宏中字符串db text'必须以零结尾。。。在末尾添加',0'
在宏调用中
1) “.data myStr db”Test1,“0”项不是必需的
2) 因此,调用宏“mWriteString”Any Text“,它将为您设置“.data”
这个宏的作用是使您能够直接写入带引号的字符串。您可以将其保存在宏库中并重新使用
我知道这是一个老帖子,但希望它能帮助你。。。或者其他任何人
问候,,
Sam K我已经很久没有在MASM工作了,但是如果您只编写字符串“abcdefg”,0会怎么样?