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 で終了する必要があります ... 最後に ',0' を追加します

マクロ呼び出しで ...

1) '.data myStr db "Test1",0' エントリは不要です ...

2) 「mWriteString "Any Text"」のようにマクロを呼び出すと、「.data」がセットアップされます。

このマクロが行うことは、引用符で囲まれた文字列を直接記述できるようにすることです。マクロ ライブラリに保存して再利用できます。

これが古い投稿であることは知っていますが、あなたや他の誰かの役に立てば幸いです。

よろしく、サムK

于 2013-07-11T14:19:41.523 に答える