【发布时间】:2020-01-09 01:01:49
【问题描述】:
从以下链接, https://www.ibm.com/developerworks/library/l-ia/index.html
一个变量可以同时作为输入和输出操作数。
我写了以下代码:
#include <stdio.h>
int main()
{
int num = 1;
asm volatile ("incl %0"
:"=a"(num)
:"0"(num));
printf("num:%d\n", num);
return 0;
}
上面的代码增加了num的值。
匹配约束有什么用,如果我不使用匹配约束,代码就不能按预期工作。
asm volatile ("incl %0"
:"=a"(num));
【问题讨论】:
-
基于标题,我认为问题将是“当您可以将
"+r"(var)用于读/写操作数而不是更复杂的匹配约束时,为什么存在匹配约束句法?”。那会很有趣。 IDK 为什么您会期望仅输出的操作数对inc有用。 -
除了迈克尔在他的回答中所说的之外,还有 c = a + b aka
asm ("add %2,%0" :"=a"(numC) :"0"(numA), "r" (numB));的想法。这会将输入的 numA 放入 eax,但指定输出的 eax 将是 numC。 -
@PeterCordes,这就是问题所在,我们为什么以及何时应该使用匹配约束
标签: c gcc assembly inline-assembly