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

如何移除ARM GCC内联汇编.set指令中VALUE前的#号?

解决ARM平台GCC生成.set指令时VALUE前的#号问题

问题根源是GCC的ARM后端处理"i"约束的立即数时,会自动添加ARM汇编的立即数前缀#,但.set作为伪指令不需要这个前缀。可以通过以下两种方法解决:

  • 方法一:利用C宏字符串化直接拼接数值
    借助C语言的字符串化特性,直接将VALUE的数值嵌入汇编指令中,避免GCC自动添加前缀:

    #define VALUE 0x1234
    __asm__ (".globl SYMBOL");
    __asm__ (".set SYMBOL, " #VALUE);
    

    预编译后生成的汇编代码会直接是:

    .globl SYMBOL
    .set SYMBOL, 0x1234
    
  • 方法二:使用"n"约束替代"i"约束
    部分版本的GCC ARM后端支持"n"约束,代表“裸数值”,不会为其添加#前缀:

    #define VALUE 0x1234
    __asm__ (".globl SYMBOL");
    __asm__ (".set SYMBOL, %0" :: "n" (VALUE));
    

    注意需确认你的GCC版本对ARM目标支持该约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:16:11