2017-09-26 69 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