Я пытаюсь перенести макрос из MASM6 в TASM5 (в режиме IDEAL), и я сталкиваюсь с ошибками. Сам макрос монтирует отлично, но когда я пытаюсь вызвать его, я получаю следующее сообщение об ошибке во время сборки:Включает ли TASM макрос в качестве операнда?
Error xxx.asm (##) Невозможно использовать имя макроса в выражении: M_SWAP16
Макрос принимает числовое значение из текстового макроса и выполняет байтовую свопировку. Макрос обычно вызывается с помощью ops, которые принимают непосредственные значения или во время инициализации переменных.
MACRO M_swap16 operand
LOCAL result
result = (((operand and 0FFh) shl 8) or ((operand and 0FF00h) shr 8))
exitm %result
ENDM
IPPROTO_TCP EQU 6
.
.
.
mov [protocol], M_swap16(IPPROTO_TCP) ; fails
.
.
.
protocol DW ?
protocol_default DW M_swap16(IPPROTO_TCP) ; fails
Он отлично работает в MASM 6.11. Переключение режима TASM из режима IDEAL в MASM не помогает. Не перемещает макрос в инструкцию EQU. Идеи?
Я согласен, что это уродливо. Ограничение также не позволяет вам перемещать макрос в инструкцию EQU. Это очень плохо. Знаете ли вы о любых совместимых с TASM ассемблерах, которые поддерживают этот уровень макросов? Lazy Assembler кажется неполным и оставленным. – toejam
Вы можете использовать макрос выше для генерации линии EQU один раз: «M_swap16_EXPRESSION, 88h», а затем использовать это в другом месте без макроса, такого как «protocol_default DW IPPROTO_TCP». Протестировано на TASM 5.3 и TASM 5.4 (CodeGear) –
byteptr