AT&T 인라인 어셈블리에서 입력 변수와 출력 변수가 같을 때..

0xDEADBEEF의 이미지

int a = 10, b = 20;
 
__asm__ __volatile__ (
"xor %0, %1\n"
"xor %1, %0\n"
"xor %0, %1\n"
: "=r"(a), "=r" (b)
:
);

인텔 문법에서는 어떻게 해야할지 알겠는데..

AT&T에서 인라인어셈블리는 Input 변수와 Output변수를 따로 지정하고 연산하니 뭐가 뭔지 모르겠습니다..

인풋 변수가 곧 아웃풋이 되는 경우는 어떻게 인라인 어셈블리를 해야하나요??

kukyakya의 이미지

인텔이든 AT&T든 상관없습니다.

https://gcc.gnu.org/onlinedocs/gcc/Modifiers.html

Quote:
‘+’
Means that this operand is both read and written by the instruction.

__asm__ __volatile__ (
...
: "+r"(a), "+r"(b)
:
);