Передача строки в макро-ассемблер MASM - PullRequest
0 голосов
/ 15 ноября 2011

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

ошибка 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

Теперь это не работает, но если поместить в строку, подобную этой, "Some Thing", когда я вызываю макрос в секции .code, макросработает и идет своим веселым путем.Это почему?Я не передаю правильную строку или не завершил строку прямо в моем разделе .data?Пример, который я использую, выглядит следующим образом

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

Ответы [ 2 ]

0 голосов
/ 11 июля 2013

Адам

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

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

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

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

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

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

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

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

0 голосов
/ 16 ноября 2011

Мне кажется, проблема в том, что строка:

string db text

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

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

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

ENDM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...