我試圖交換使用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語法,則與英特爾語法相比,操作數相反。 –