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

时间:2011-12-20 19:26:55

标签: assembly x86 move x86-64

让我们说我想将两个32位寄存器EAX作为低32位字,将EDX作为高32位字放入RAX。 我找到了一种方法:

shl   rdx, 32
or    rax, rdx

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

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

这是最短路吗?

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

1 个答案:

答案 0 :(得分:12)

也许这有点好看:

shl     rax,32
shrd    rax,rdx,32

不假设高dword为零。