2011-12-20 6 views
6

मान लें कि मैं दो 32 बिट रजिस्ट्रार EAX को 32 बिट शब्द और EDX के रूप में आरएक्स में उच्च 32 बिट शब्द के रूप में रखना चाहता हूं। मैं एक रास्ता खोजने के लिए है:दो 32 बिट रजिस्टरों को एक 64 बिट में कैसे स्थानांतरित करें?

shl rdx, 32 
    or rax, rdx 

इस विधि से काम करता है केवल अगर हम यह सुनिश्चित करें कि 32 से RAX 61 बिट 0. हैं हम कि shure नहीं कर रहे हैं, की तुलना में हम पहले उच्च 32 बिट शब्द स्पष्ट करना होगा , जैसे:

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

क्या यह सबसे छोटा तरीका है?

क्या कोई एकल एएसएम x86-64 निर्देश है जो इस ऑपरेशन को करता है?

+1

AFAIK कुछ भी छोटा नहीं है। यदि लक्ष्य रजिस्टर एक xmm regsiter है, तो आप दो 'पिनड' निर्देशों का उपयोग कर सकते हैं और समाशोधन निर्देश से बच सकते हैं। – hirschhornsalz

+0

@drhirsch: मैंने लगभग सभी इंटेल दस्तावेज़ों की जांच की है और मुझे कुछ भी उपयोगी नहीं मिला। :) –

+0

हाँ, आप इसे साफ़ करने के लिए "xor eax, eax" के साथ एक छोटी सी जगह को सहेजने में सक्षम हो सकते हैं, लेकिन ऐसा लगता है कि यह जितना छोटा हो सकता है। –

उत्तर

12

शायद यह एक बालक बेहतर है:

shl  rax,32 
shrd rax,rdx,32 

स्वीकार नही करता है कि उच्च dwords शून्य कर रहे हैं।

+1

वह संयोजन था जिसे मैं खोज रहा था। मुझे पता था कि इसे 'shrd' या' shld' होना था – hirschhornsalz

संबंधित मुद्दे