8086汇编mac_print宏传入带空格字符串字面量无法正常打印问题咨询
问题根因
该问题由x86汇编器的宏参数解析规则导致:
- 宏参数默认会以空格、逗号、制表符作为分隔符,当你传入带空格的字符串时,汇编器会将空格后的内容识别为第二个独立参数,你原有宏只接收第一个参数
string,因此只能拿到空格前的内容。 - 你直接写
irpc char, <hey you>时可以正常执行,是因为irpc指令本身会将<>包裹的所有内容(含空格)识别为单个待遍历的字符序列,没有经过宏参数的二次解析剥除外层<>的步骤。
修复方案
方案1:修改宏定义适配带<>包裹的传参
给宏内irpc的遍历参数主动加一层<>包裹,避免宏展开时剥除外层标记后空格被识别为分隔符:
mac_print macro string irpc char, <&string> push '&char' call print_char endm endm
调用方式:带空格的字符串统一用<>包裹即可正常打印
mac_print <hey you>
方案2:可变参数版本(调用无需加<>)
如果你使用的是MASM 6.x及以上版本,可以定义宏接收可变参数,自动拼接所有输入内容,调用时不需要手动加<>:
mac_print macro args:VARARG local temp_str temp_str CATSTR <&args> irpc char, temp_str push '&char' call print_char endm endm
调用方式:直接传入带空格的字符串即可
mac_print hey you
内容的提问来源于stack exchange,提问作者Algo
相关产品推荐
相关产品推荐

