程序集宏检查参数

Assembly macro check argument

嗯,汇编(尤其是tasm)中出现了一个新的奇怪问题

CheckInfo MACRO arr:REQ, length:REQ, arr_type := <l>
    mov bx, arr
    mov cl, length
    mov si, 1
    IF arr_type eq <x>
        inc si
    ENDIF
    mov a&arr_type, [bx]
ENDM

只是想检查 arr_type 是否等于 x。如果是,则将值 1 添加到 si。没有别的。但是当我尝试 tasm 它时,它会抛出一个错误

Illegal forward reference: L
Undefind symbol: L

但是为什么呢?我只想检查两个值是否等于 char by char

IF arr_type eq <x> 最终被扩展为 IF l req <x>,在此上下文中 l 是一个符号。如果你想将它们作为字符进行比较,你需要使用字符串并将 arr_type 替换为字符串:

IF "&arr_type" EQ "x"

请注意,这实际上不是一个字符一个字符的比较。 EQ运算符比较的是无符号整数,所以把字符串转换成整数再进行比较。