这是我目前的代码:
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
的值不会更改。
答案 0 :(得分:4)
错误告诉你出了什么问题 - =
约束只适用于输出,而不适用于输入,而你的asm模式有两个输入(一个令人困惑地称为'dst')而没有输出。你可能意味着'dst'是一个输出:
asm("rev %[dst], %[src]" : [dst]"=r"(val) : [src]"r"(val));