2011-12-20 108 views
6

假設我想將兩個32位寄存器EAX作爲低32位字,將EDX作爲高32位字放入RAX。 我已經找到一種方法:如何將兩個32位寄存器移動到一個64位?

shl rdx, 32 
    or rax, rdx 

這種方法僅適用,如果我們相信,從32到61 RAX位爲0。如果我們不舒爾說,比我們首先要明確的高32位字,如:

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

這是最短路嗎?

是否有一個asm x86-64指令可以執行此操作?

+1

AFAIK沒有什麼短。如果目標寄存器是xmm寄存器,則可以使用兩個'pinsd'指令並避免清除指令。 – hirschhornsalz 2011-12-20 20:04:22

+0

@drhirsch:我檢查了幾乎所有的英特爾文檔,但沒有發現任何有用的東西。 :) – 2011-12-20 20:09:46

+0

是的,你可以用一個「xor eax,eax」來節省一點空間來清除它,但看起來儘可能短。 – 2011-12-20 20:20:23

回答

12

這也許是一點點好:

shl  rax,32 
shrd rax,rdx,32 

不認爲高雙字均爲零。

+1

這是我正在尋找的組合。我知道它必須是'shrd'或'shld' – hirschhornsalz 2011-12-21 12:57:12

相關問題