procedure f(var a:integer; var b:integer); begin a:=a xor b; b:=a xor b; a:=a xor b; end;
Это обычная «хитрость» для обмена значениями двух переменных (в данном случае: a, b) без использования третьей.
См. Эту тему (для C ++, но для любого языка кодирования) для лучшего и полного обзора проблемы: Замена двух переменных без использования третьей переменной