繁体   English   中英

ARM内联汇编-输入操作数约束包含'='

[英]ARM inline assembly - input operand constraint contains '='

这是我当前的代码:

void int32hex(u32 val, char *out) {
    asm("rev %[dst], %[src]" :: [dst]"=r"(val), [src]"r"(val));

    binhex((u8*)&val, 4, out);
}

我的想法是采用参数val ,使用rev指令翻转它(字节序),然后将其传递。

根据我的阅读,以上代码似乎是正确的,目标寄存器具有=r标志,这意味着可以写入该寄存器。 但是,当通过GCC运行时,出现错误:输入操作数约束包含'='

如果我将标志更改为简单的r则它将正常编译,但val的值不会更改。

错误告诉您出了什么问题- =约束仅适用于输出,不适用于输入,并且您的asm模式具有两个输入(一个令人困惑地称为“ dst”),而没有任何输出。 您可能打算将“ dst”作为输出:

asm("rev %[dst], %[src]" : [dst]"=r"(val) : [src]"r"(val));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM