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

时间:2013-11-02 00:49:23

标签: c gcc assembly arm inline-assembly

这是我目前的代码:

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

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

我的想法是使用val参数,使用rev指令翻转它(endianness),然后传递它。

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

如果我将标记更改为r,那么它将正常编译,但val的值不会更改。

1 个答案:

答案 0 :(得分:4)

错误告诉你出了什么问题 - =约束只适用于输出,而不适用于输入,而你的asm模式有两个输入(一个令人困惑地称为'dst')而没有输出。你可能意味着'dst'是一个输出:

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