我试图交换使用GNU扩展组件两个整型变量,这里就是我现在:使用内联汇编交换两个整型变量
int main()
{
int a = 2;
int b = 1;
printf("a is %d, b is %d\n", a, b);
// TODO (student): swap a and b using inline assembly
printf("a is %d, b is %d\n", a, b);
asm ("mov ebx, b;"
"mov ecx, b;"
"mov c, ecx;"
"mov d, ebx;"
);
我得到的错误信息:asmPractice.c:17 :错误:mov
的内存引用太多。
我该如何解决这个问题?
可能重复[asm in C“太多内存引用为'mov'”](https://stackoverflow.com/questions/15035379/asm-in-c-too-many -memory-references-for-mov) –
您可以在x86上使用'XCHG'指令进行交换。 –
似乎有人在这个SO问题上有相同的任务。 https://stackoverflow.com/q/45910530/3857942。你不能以你可靠(或者完全可以)的方式使用变量名。您必须使用扩展内联通过约束传递参数。对于其他SO问题的答案应该让你知道为什么你应该避免GNU内联汇编,除非你知道你在做什么。如果使用AT&T语法,则与英特尔语法相比,操作数相反。 –