程序集宏检查参数
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运算符比较的是无符号整数,所以把字符串转换成整数再进行比较。
嗯,汇编(尤其是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运算符比较的是无符号整数,所以把字符串转换成整数再进行比较。