2011-12-20 11 views
6

Diyelim ki, 3233 kelimelik iki 32 bit kayıt EAX düşük 32 bit kelime ve EDX RAX'e yüksek 32 bit kelime olarak koymak istiyorum. Bir yol bulmak zorunda:İki 32 bit yazmaç bir 64 bit'e nasıl taşınır?

shl rdx, 32 
    or rax, rdx 

Bu yöntem biz ilk yüksek 32 bit kelime temizlemelisiniz daha biz bu shure değilseniz 32'den RAX arasında 61'e bitleri 0'a olduğundan eminseniz çalışır gibi:

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

Bu en kısa yol mu?

Bu işlemi yapan tek bir asm x86-64 yönergesi var mı?

+1

AFAIK daha kısa bir şey yok. Hedef kayıt bir xmm regsiter ise, iki 'pin' talimatlarını kullanabilir ve takas talimatından kaçabilirsiniz. – hirschhornsalz

+0

@drhirsch: Neredeyse tüm Intel belgelerini kontrol ettim ve yararlı bir şey bulamadım. :) –

+0

Evet, temizlemek için "xor eax, eax" ile küçük bir yer kaydedebilirsiniz, ancak olabildiğince kısa gibi görünüyor. –

cevap

12

Belki de bu biraz daha iyidir:

shl  rax,32 
shrd rax,rdx,32 

yüksek dword sıfır olduğu varsayılmaktadır değil.

+1

Aradığım kombinasyon buydu. Bir "shrd" ya da "shld" olmak zorunda olduğunu biliyordum. – hirschhornsalz

İlgili konular