gpt4 book ai didi

gcc - GNU 程序集内联 : what do %1 and %0 mean?

转载 作者:行者123 更新时间:2023-12-05 01:46:59 25 4
gpt4 key购买 nike

我对 GNU 汇编内联非常陌生,我已经阅读了多篇文章,但仍然不完全理解发生了什么。据我了解:

movl %eax, %ebx\n\t 会将 %eax 中的内容移动到 ebx 中,但不会添加内容彼此

addl %eax, %ebx\n\t 会将%eax的内容与ebx相加,并保持在最右边注册

addl %1, %0\n\t 这是我感到困惑的地方,我们要加 1 和 0?为什么我们需要将 %0 放在那里?

最佳答案

整个 asm 内联 block 如下所示:

 asm [volatile] ( AssemblerTemplate
: OutputOperands
[ : InputOperands
[ : Clobbers ] ])

 asm [volatile] ( AssemblerTemplate
: OutputOperands)

在 AssemblerTemplate 中是您的汇编代码,在 Output/InputOperands 中,您可以在 C 和 ASM 之间传递变量。

然后在 Asm 中,%0 引用作为 OutputOperand 或 InputOperand 传递的第一个变量,%1 引用第二个,等等。

例子:

 int32_t a = 10;
int32_t b;
asm volatile ("movl %1, %0" : "=r"(b) : "r"(a) : );

这个汇编代码等同于“b = a;”

这里有更详细的解释:https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html

关于gcc - GNU 程序集内联 : what do %1 and %0 mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32855273/

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