Передача строки в макро-ассемблер 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