0

好的,所以我已经在一定程度上完成了这项工作,但是当我尝试将变量名传递给宏时,它会说:

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

2 回答 2

0

我认为问题在于这条线:

string db text

正在尝试将text参数的偏移量存储到一个字节中。

自从我使用汇编语言宏已经有一段时间了,但我很确定你不需要.data宏中的那个指令。以下应该可以正常工作:

mWriteString MACRO text
push edx
mov  edx,OFFSET text
call WriteString
pop edx

ENDM
于 2011-11-16T00:14:30.233 回答
0

亚当,

在我看来,错误是......

在宏中...'string db text'必须以零结尾...在末尾添加',0'

在宏调用中...

1) '.data myStr db "Test1",0' 条目不是必需的...

2)因此调用您的宏'mWriteString“Any Text”',它将为您设置'.data'。

这个宏的作用是使您能够直接编写带引号的字符串。您可以将其保存在宏库中并重复使用。

我知道这是一个旧帖子,但希望它可以帮助你......或其他任何人。

问候, 山姆 K

于 2013-07-11T14:19:41.523 回答