Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 342
GJ. Avatar asked Dec 20 '11 19:12

GJ.


1 Answers

Perhaps this is a tad better:

shl     rax,32
shrd    rax,rdx,32

Does not assume that high dwords are zero.

like image 61
Jens Björnhager Avatar answered Nov 15 '22 22:11

Jens Björnhager