让我们说我想将两个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指令执行此操作?
答案 0 :(得分:12)
也许这有点好看:
shl rax,32
shrd rax,rdx,32
不假设高dword为零。