我在汇编代码中包含以下行:

 XOR EAX, EBX


因此,我进行了一些搜索,发现XOR表示“交换算法”。您可以在这里阅读:http://en.wikipedia.org/wiki/XOR_swap_algorithm

但是当我在ollydbg的注册窗口中查看时,我有以下

 EAX = 00000068
 EBX = 0000003B


现在,在该行之后,注册窗口会显示

EAX = 000000053
EBX = 0000003B


但是从我在维基百科文章中所读的内容来看,我期望以下内容

EAX = 0000003B
EBX = 00000053


最后,我可以说执行了正常的XOR操作是因为:

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


所以我的问题是为什么不执行交换算法。换句话说:什么时候可以使用交换算法?

评论

交换数据的指令是xchg,而不是xor

#1 楼

如第一个答案所述,XOR是按位XOR,而不是XOR交换。

要做从Wikipedia引用的Xor交换,需要3条指令:

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


由于您询问了XOR的目的,我认为我将提供一些其他概念供您阅读,因此您可能对XOR有什么想法。

可以使用XOR清除寄存器:

xor eax,eax


计算绝对值:

cdq
xor eax,edx
sub eax,edx


XOR可以用于加密:
http://en.wikipedia.org / wiki / XOR_swap_algorithm

XOR用于CRC校验和算法:
http://en.wikipedia.org/wiki/Cyclic_redundancy_check

可以使用XOR计算格雷码:
http://www.morkalork.com/mork/article/74/How_to_understand_and_use_Gray_code.htm#.U6RhN_ldXvI

这只是冰山一角。该指令可用于多种情况。

#2 楼

XOR助记符不代表XOR交换;它表示按位XOR。