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

在Yasm宏中定义值等于宏参数文本值的字符串

在Yasm宏中将参数转为字符串的正确写法

这个问题在Yasm宏开发里挺典型的——你想要把宏参数的字面文本直接转换成带空终止符的字符串,而原来的写法里,双引号内的%1不会被宏处理器解析,因为引号包裹的内容会被当作纯字符串字面量处理。

正确的实现方式

Yasm提供了%str()操作符,专门用来将宏参数(或任意表达式)转换为字符串字面量。修改你的宏如下:

%macro foo 1
;; 这里可以正常使用%1做其他操作,比如 mov eax, %1(如果%1是合法符号的话)
db %str(%1), 0
%endmacro

foo bar

展开效果

当你调用foo bar时,宏会被正确展开为:

db "bar", 0

完全符合你想要的结果——汇编后就是带末尾空字符的字符串"bar"。

额外细节

如果你的宏参数包含特殊字符(比如空格、双引号),%str()也会自动处理转义:
比如调用foo "hello world",展开后会生成:

db "\"hello world\"", 0

内部的双引号被自动转义,避免汇编报错。

内容的提问来源于stack exchange,提问作者BeeOnRope

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:30:13