gpt4 book ai didi

c - 在 GCC 中切换 Intel 和 ATT 模式

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:13 24 4
gpt4 key购买 nike

所以我有这个内联汇编代码和我的 C 代码,我想对这个特定的 asm() 调用使用 intel 语法,但是我需要切换回 ATT 语法,否则它会给出一长串错误。

asm(".intel_syntax prefix");
asm volatile (
"add %0, $1 \n\t"
: "=r" (dst)
: "r" (src));

asm(".att_syntax prefix");

现在报如下错误

/tmp/ccDNa2Wk.s: Assembler messages:
/tmp/ccDNa2Wk.s:180: Error: no such instruction: `movl -16(%ebp),%eax'
/tmp/ccDNa2Wk.s:187: Error: no such instruction: `movl %eax,-12(%ebp)'

我不明白如何修复错误,我的代码的任何部分都没有调用 movl。

最佳答案

既然你还没有接受答案( ),让我补充第三个想法:

1) 不要使用 3 个 asm 语句,而是在 1 个中执行:

asm(".intel_syntax prefix\n\t"
"add %0, 1 \n\t"
".att_syntax prefix"
: "=r" (dst)
: "r" (src));

2) 更改您的编译选项以包含 -masm=intel 并省略 2 个语法语句。

3) 可以同时支持intel 和att。这样,无论为 -masm 传递什么值,您的代码都可以工作:

asm("{addl $1, %0 | add %0, 1}"
: "=r" (dst)
: "r" (src));

我还应该提一下,您的 asm 可能无法按预期工作。由于您正在更新 dst 的内容(而不是覆盖它),您可能希望使用“+r”而不是“=r”。你确实意识到这段代码实际上并没有使用 src,对吧?

哦,你原来的 asm 不是英特尔格式(1 美元是赠品)。

关于c - 在 GCC 中切换 Intel 和 ATT 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135523/

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