gpt4 book ai didi

带有内联汇编代码的 %hi() 和 %lo() 编译错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:49 28 4
gpt4 key购买 nike

我有下面的内联汇编代码。我在存在 %hi、%lo 的每一行收到编译错误“错误:无效的‘asm’:%-字母后缺少操作数”。

void func()
{

__asm__ (
"lis %%r4, %hi(%0);"
"ori %%r4,%%r4,%lo(%0);"
"stw r3, 0(%%r4);"
"lis %%r4, %hi(%0);"
"ori %%r4,%%r4,%lo(%0);"
"lis %%r3, %hi(%1);"
"ori %%r3,%%r3,%lo(%1);"
"stw %%r3, 0(%%r4);"
::"r"(var1), "r"(var2));
}

在进一步分析中,我发现内联汇编在发现 % 符号时需要一个数字(%0、%1...)。所以将所有 % 更改为 %%(这只是一个盲目射击),然后最终得到许多如下所示的结果。

{standard input}: Assembler messages:
{standard input}:3394: Error: bad expression
{standard input}:3394: Error: syntax error; found `h', expected `,'
{standard input}:3394: Error: junk at end of line: `hi(%r9)'
{standard input}:3394: Error: bad expression
{standard input}:3394: Error: syntax error; found `l', expected `,'
{standard input}:3394: Error: junk at end of line: `lo(%r9)'
{standard input}:3394: Error: bad expression

经过大量努力,我发现如果在内联汇编代码中使用 %hi() 或 %lo 会出现一些问题。如果我从我的代码中删除 %hi 和 %lo,它就会被编译。谁能建议我如何在内联汇编代码中使用 %hi() 和 %lo?

最佳答案

GNU AS 不支持 %hi()%lo()。相反,它在符号上使用 @h@l 后缀来表示高低部分。另请注意,您不能将其与寄存器操作数一起使用,并且您使用了 r 约束。

关于带有内联汇编代码的 %hi() 和 %lo() 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238118/

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