如何将两个32位寄存器移入一个64位?

GJ.*_*GJ. 8 x86 assembly x86-64 move

假设我想将两个32位寄存器EAX作为低32位字和EDX高32位字放入RAX.我找到了一种方法:

shl   rdx, 32
or    rax, rdx
Run Code Online (Sandbox Code Playgroud)

只有当我们确定从32到61的位RAX为0时,此方法才有效.如果我们不确定,那么我们必须首先清除高32位字,如:

mov   eax, eax      //This instruction should clear the high 32 bit word of RAX
Run Code Online (Sandbox Code Playgroud)

这是最短路吗?

是否有一个asm x86-64指令执行此操作?

Jen*_*ger 12

也许这有点好一点:

shl     rax,32
shrd    rax,rdx,32
Run Code Online (Sandbox Code Playgroud)

不假设高双字为零.