Передача строки в макро-ассемблер MASM

Итак, я получил это до некоторой степени, но когда я пытаюсь передать имя переменной в макрос, он говорит это:

ошибка 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, когда я вызываю макрос в разделе.code, он помещается в строку типа Some Thing, макрос работает и идет своим путем. Это почему? Я не передаю правильную строку, или я не заканчиваю строку прямо в моем .data раздел? Пример, который я использую, выглядит следующим образом

 .data
  myString   db   "abcefg",0
  .code
  mWriteString  myString

2 ответа

Адам,

Ошибки, как я понимаю, это...

в макросе... 'string db text' должен заканчиваться нулем... add ',0' в конце

в вызове макроса...

1) запись '.data myStr db "Test1",0' не требуется...

2) вызовите ваш макрос, таким образом, "mWriteString " Любой текст "", и он установит ".data" для вас.

Этот макрос позволяет напрямую писать строки в кавычках. Вы можете сохранить его в библиотеке макросов и использовать повторно.

Я знаю, что это старый пост, но надеюсь, что он поможет вам... или кому-то еще.

С уважением, Сэм К

Я думаю, что проблема в том, что строка:

string db text

Пытается сохранить смещение text параметр в байт.

Прошло много времени с тех пор, как я работал с макросами на ассемблере, но я уверен, что вам это не нужно .data директива в макросе. Следующее должно работать просто отлично:

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

ENDM
Другие вопросы по тегам