2017-09-26 70 views
-5

考虑你有一个带有AND,OR,XOR,NOT和2个寄存器的处理器X & Y. 什么是交换2个寄存器值的最聪明的方法?仅使用AND,OR,NOT,XOR交换两个寄存器?

+1

不是一个相关的问题,因为真正的CPU始终有MOV指令以及布尔值。在xor-swap很有用的情况下,你可能会遇到这样的情况,但是你必须发明一个假想的CPU才能使它成为正确的答案,这有点说明了它在实践中的相关性。 –

+1

xor-swap的修改版本,您在中途穿戴面具时很有趣。您可以交换一些位,而将其他位保留在其原始寄存器中。 –

+1

@peter - 原则上,即使存在MOV,“技巧”也可能对常规CPU有用,因为您避免使用临时寄存器。一个例子是在一个循环体中,一对寄存器在每次迭代中交换位置。如果存在很多寄存器压力,则可能没有用于MOV交换的免费寄存器。你不能只交换组件中的角色而不展开循环,如果它很大,这可能会令人望而却步。泛化是寄存器“旋转”,其中超过2个寄存器交换位置,并且xor在这里也很有用。 – BeeOnRope

回答

0
X := X XOR Y 
Y := Y XOR X 
X := X XOR Y