3

I have the following line in an assembler code:

 XOR EAX, EBX

So, then I've searched a little bit and found out that XOR represents a "swap algorithm". You can read it here: http://en.wikipedia.org/wiki/XOR_swap_algorithm

But when I look in register window of ollydbg, then I have the following

 EAX = 00000068
 EBX = 0000003B

Now, after the line the register window says

EAX = 000000053
EBX = 0000003B

But from that what I have read in wikipedia article I would expect the following

EAX = 0000003B
EBX = 00000053

At the end, i can say that a normal XOR operation is performed because:

0111011   =>EAX=0000003B 
1101000   =>EBX=00000068
-------
1010011   =>EAX=00000053

So my question would be why the swap algorithm is not performed. Or in other words: When can I expect the swap algorithm?

1
  • the instruction for swapping data is xchg, not xor
    – phuclv
    Apr 29, 2017 at 5:00

2 Answers 2

13

As the first answer states, XOR is a bitewise XOR, not an XOR swap.

To do the Xor swap that you referenced from wikipedia it takes 3 instructions :

xor eax, ebx
xor ebx, eax
xor eax, ebx

Since you asked about the purpose of XOR I thought I would include some other concepts for you to read up on, so you might have an idea of what to expect from XORs

You can use XOR to clear a register:

xor eax,eax

Calculate absolute value:

cdq
xor eax,edx
sub eax,edx

XORs can be used for Crypto: http://en.wikipedia.org/wiki/XOR_swap_algorithm

XORs are used in the CRC checksum algorithm: http://en.wikipedia.org/wiki/Cyclic_redundancy_check

XORs can be used to calculate Gray codes: http://www.morkalork.com/mork/article/74/How_to_understand_and_use_Gray_code.htm#.U6RhN_ldXvI

This is just the tip of the iceberg. The instruction can be used in a large number of situations.

11

The XOR mnemonic does not represent an XOR swap; it represents a bitwise XOR.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.