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

时间:2011-11-15 16:44:15

标签: assembly macros x86 masm irvine32

好的,所以我的工作达到了一定程度,但是当我尝试将变量名称传递给宏时,它会说:

错误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

2 个答案:

答案 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