gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:41:53 24 4
gpt4 key购买 nike

这是我当前的代码:

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));

关于c - ARM 内联汇编 - 输入操作数约束包含 '=',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19737734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com