You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:09:01