Assembly 将字符串传递给宏汇编程序MASM

Assembly 将字符串传递给宏汇编程序MASM,assembly,macros,x86,masm,irvine32,Assembly,Macros,X86,Masm,Irvine32,好的,我已经在一定程度上实现了这一点,但是当我尝试将变量名传递给宏时,它会这样说: 错误A2071:初始值设定项幅值对于指定的大小太大 我看不出我做错了什么。我正在按照我的例子介绍如何传递参数,但这就是它给我的。这就是我到目前为止的情况 TITLE MASM TestTExt (TestTExt.asm) ; Description: ; ; Revision date: INCLUDE Irvine32.inc ;

好的,我已经在一定程度上实现了这一点,但是当我尝试将变量名传递给宏时,它会这样说:

错误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部分调用宏时,如果把它放在这样的字符串“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会怎么样?