0
我正试图从MASM6端口宏到TASM5(在IDEAL模式),我遇到错误。宏本身装配精细,但当我尝试调用它,我在组装过程中收到以下错误:TASM是否允许将宏用作操作数?
错误 xxx.asm(##)在表达不能使用宏名称:M_SWAP16
该宏从文本宏中获取数字值并执行字节交换。一般通过ops来调用宏,该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兼容的汇编程序都支持这种级别的宏功能?懒惰的汇编程序看起来不完整并被放弃。 – toejam
您可以使用上面的宏来生成一次EQU线:“M_swap16_EXPRESSION,88h”,然后在没有宏的地方使用它,例如“protocol_default DW IPPROTO_TCP”。在TASM 5.3和TASM 5.4(CodeGear)上进行测试 –
byteptr