2017-09-26 4 views
-5

AND、OR、XOR、NOTと2つのレジスタX & Yを持つプロセッサがあるとします。 2つのレジスタの値を入れ替える最もスマートな方法は何ですか?AND、OR、NOT、XORのみを使用して2つのレジスタを入れ替えますか?

+1

実際のCPUは常にブール値と同様にMOV命令を持っているため、関連する質問はありません。まれに、xor-swapが有用なケースがあるかもしれませんが、仮想CPUを考案して正しい答えになるようにしなければならないという事実は、それが実際にどのように適切であるかについて何かを述べています。 –

+1

xor-swapの修正されたバージョンで、マスクの途中でANDをとることは面白いです。いくつかのビットを元のレジスタに残しながら交換することができます。 –

+1

@peter - 原則として、 "トリック"は一時的なレジスタの使用を避けるため、従来のCPUではMOVが存在する場合でも有効です。一例は、反復ごとに一対のレジスタが場所を入れ替えるループ本体にあります。多くのレジスタ圧がある場合は、MOVスワップ用の空きレジスタがない可能性があります。ループを展開せずにアセンブリ内のロールを交換することはできません。一般化は2つ以上のレジスタが場所を入れ替えるレジスタ "rotation"であり、ここでもxorは便利です。 – BeeOnRope

答えて

0
X := X XOR Y 
Y := Y XOR X 
X := X XOR Y 
関連する問題