Assembly 仅使用AND或NOT XOR交换两个寄存器?

Assembly 仅使用AND或NOT XOR交换两个寄存器?,assembly,Assembly,假设您有一个带有AND、OR、XOR、NOT和2个寄存器X&Y的处理器。 交换两个寄存器的值的最聪明的方法是什么?这不是一个相关的问题,因为真正的CPU总是有MOV指令和布尔指令。xor交换可能很少有用,但事实上,你必须发明一个假想的CPU,使其成为正确的答案,这说明了它在实践中的相关性。修改后的xor交换版本中,你和你中间的掩码是有趣的。您可以交换一些位,而将其他位保留在其原始寄存器中。@peter-原则上,即使在存在MOV的情况下,该技巧在传统CPU上也很有用,因为您可以避免使用临时寄存器。

假设您有一个带有AND、OR、XOR、NOT和2个寄存器X&Y的处理器。
交换两个寄存器的值的最聪明的方法是什么?

这不是一个相关的问题,因为真正的CPU总是有MOV指令和布尔指令。xor交换可能很少有用,但事实上,你必须发明一个假想的CPU,使其成为正确的答案,这说明了它在实践中的相关性。修改后的xor交换版本中,你和你中间的掩码是有趣的。您可以交换一些位,而将其他位保留在其原始寄存器中。@peter-原则上,即使在存在MOV的情况下,该技巧在传统CPU上也很有用,因为您可以避免使用临时寄存器。例如,在循环体中,一对寄存器交换每次迭代的位置。如果存在大量寄存器压力,则MOV交换可能没有可用的寄存器。您不能在不展开循环的情况下交换程序集中的角色,如果循环太大,这可能是禁止的。一个推广是寄存器轮换,其中有两个以上的寄存器交换位置,xor在这里也很有用。@TedatORCL.Pro虽然您的追求很高尚,但没有人真正从发布的现有问题的副本中获益。回答您自己问题的一个好方法是为您最近解决的问题发布问答。@TedatORCL.Pro开始的一个好方法是找到您感兴趣的标签,打开页面http://stackoverflow.com/questions/tagged/ 然后开始回答问题。通过这种方式,您可以了解该网站的工作原理,同时帮助其他人了解您的答案。
X := X XOR Y
Y := Y XOR X
X := X XOR Y