In general, it is very difficult to do better than your compiler with simple code like this.
The compiler, faced with the swap operation for integers, will usually output the code as follows:
mov eax, [x]
mov ebx, [y]
mov [x], ebx
mov [y], eax
, , . - , ; . , , , , /. ; , asm.
, push/push/pop/pop, , ; , , . mov , , .. .
, - ; . , . , ( ) , .