3

这是我当前的代码:

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不会改变。

4

1 回答 1

4

该错误告诉您出了什么问题——=约束仅适用于输出,而不适用于输入,并且您的 asm 模式有两个输入(一个容易混淆地称为“dst”)并且没有输出。您可能打算将“dst”作为输出:

asm("rev %[dst], %[src]" : [dst]"=r"(val) : [src]"r"(val));
于 2013-11-02T00:55:01.470 回答