【发布时间】:2018-03-08 07:39:20
【问题描述】:
假设您有一个带有 AND、OR、XOR、NOT 和 2 个寄存器 X 和 Y 的处理器。 交换两个寄存器的值最聪明的方法是什么?
【问题讨论】:
-
不是一个相关的问题,因为真正的 CPU 总是有 MOV 指令和布尔值。在极少数情况下 xor-swap 很有用,但您必须发明一个假设的 CPU 以使其成为正确答案这一事实有点说明它在实践中的相关性。
-
xor-swap 的修改版本,其中你和中间的掩码很有趣。您可以交换一些位,而将其他位保留在其原始寄存器中。
-
@peter - 原则上,即使在存在 MOV 的情况下,“技巧”在传统 CPU 上也很有用,因为您避免使用临时寄存器。一个例子是在循环体中,其中一对寄存器在每次迭代时交换位置。如果寄存器压力很大,则可能没有用于 MOV 交换的空闲寄存器。您不能只交换程序集中的角色而不展开循环,如果它很大,这可能会令人望而却步。一个概括是寄存器“轮换”,其中超过 2 个寄存器交换位置,xor 在这里也很有用。
-
@TedatORCL.Pro 虽然您的追求是崇高的,但没有人真正从重复发布现有问题中获利。回答您自己的问题的一个好方法是针对您最近解决的问题发布问答。
-
@TedatORCL.Pro 一个好的入门方法是找到一个您感兴趣的标签,打开页面
http://stackoverflow.com/questions/tagged/<tag>并开始回答问题。通过这种方式,您可以了解该网站的运作方式,同时帮助其他人解答您的问题。
标签: assembly