【发布时间】:2020-02-28 22:29:00
【问题描述】:
所以我在搞乱内联汇编并使用 GCC 9 编译它。 结果是两个变量 a 和 b 被交换而没有实际发出任何直接命令。
#include<cstdio>
int main(){
int a(1),b(2),c(3);
asm ("": "=r"(c):"r"(a));
asm ("": "=r"(a):"r"(b));
asm ("": "=r"(b):"r"(c));
printf("%d %d %d", a,b,c);
}
有人能解释一下这里发生了什么吗?
【问题讨论】:
-
反汇编你的代码,你会发现。
-
@goodvibration:在这种情况下,这不是一个有用的答案;它没有告诉你为什么 gcc 做出了这些选择。您需要查看编译器的 asm 输出以找出哪些寄存器选择了 asm 语句,而不是反汇编。
标签: c++ gcc assembly inline-assembly