2011-12-20 9 views
6

のは、私は2つの32ビットがEAXなどの低32ビット・ワードとRAXにEDXとして高い32ビット・ワードを登録置きたいとしましょう。 私は1つの方法を見つける必要があり:2つの32ビットレジスタを1つの64ビットに移動するには?

shl rdx, 32 
    or rax, rdx 

この方法では、我々は我々が最初に高い32ビット・ワードをクリアする必要がありますよりも、我々はそれをSHUREされていない場合は32からRAXの61ビットが0であることが確実な場合にのみ機能しますたとえば:

mov eax, eax  //This instruction should clear the high 32 bit word of RAX 

これは最短の方法ですか?

この操作を実行する単一のasm x86-64命令はありますか?

+1

は、私の知る限り短い何もありません。ターゲットレジスタがxmm regsiterの場合、2つの 'pinsd'命令を使用し、クリア命令を避けることができます。 – hirschhornsalz

+0

@drhirsch:私はほとんどすべてのインテルのドキュメントをチェックしましたが、役に立たないものは何も見つかりませんでした。 :) –

+0

うん、あなたはそれをクリアする「のXOR EAX、EAX」に少しスペースを節約することができるかもしれないが、それはそれができると同じくらい短いようです。 –

答えて

12

おそらくこれは少し良いです:

shl  rax,32 
shrd rax,rdx,32 

が高いダブルワードがゼロであることを前提としていません。

+1

これは私が探していた組み合わせです。私はそれが 'shrd'または' shld'でなければならないことを知っていた – hirschhornsalz

関連する問題