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
所以我的问题是为什么不执行交换算法。换句话说:什么时候可以使用交换算法?
#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。
评论
交换数据的指令是xchg,而不是xor