在传递带空格的字符串字面值给宏时,需要使用间接寻址操作符([])来引用该字面值的地址。例如:
.data
str db 'hello world$'
.code
mysub macro arg
mov dx, offset arg
mov ah, 09h
int 21h
endm
main proc
mov ax, @data
mov ds, ax
mysub str ; 直接传递 str 会出错
mysub offset str ; 传递 str 的地址可以正常工作
mov ah, 4ch
int 21h
main endp
在这个示例中,如果直接将 str
传递给宏 mysub
,则会出现编译错误。相反,我们使用 offset str
传递 str
的地址来解决这个问题。这样,宏就可以从地址中读取字符串字面值,而不是直接尝试解释字符串本身。