How to move two 32 bit registers in to one 64 bit?

assembly, move, x86, x86-64

Solution

Perhaps this is a tad better:

shl     rax,32
shrd    rax,rdx,32

Does not assume that high dwords are zero.

Problem

Let's say that I want to put two 32 bit registers `EAX` as low 32 bit word and `EDX` as high 32 bit word into `RAX`. I have found one way: ``` shl rdx, 32 or rax, rdx ``` This method works only if we are sure that bits from 32 to 61 of `RAX` are 0. If we are not sure about that, then we must first clear the high 32 bit word, like: ``` mov eax, eax //This instruction should clear the high 32 bit word of RAX ``` Is this the shortest way? Is there a single asm x86-64 instruction that does this operation?

Original source