Как работает команда xchg?

для обмена двух чисел используется команда xchg.

AssemblerВыделить код

1
2
3

mov     eax, 2
mov     ebx, 3
xchg    eax, ebx

в отладчике эта программа точно так же выглядит, как в листинге. ничего не прибавляется и ничего не убавляется.

меня интересует такой вопрос Как вообще такое возможно что с помощью только одной команды значения регистров меняются местами? если можно, то объясните на пальцах.

допустим, в eax будет 2, а в ebx 3. но ведь одной команды недостаточно для их обмена. должно же быть еще что-то.

может быть xchg как-то скрытно вызывает функцию для обмена и этого не видно при отладке?