मान लें कि मैं दो 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 निर्देश है जो इस ऑपरेशन को करता है?
AFAIK कुछ भी छोटा नहीं है। यदि लक्ष्य रजिस्टर एक xmm regsiter है, तो आप दो 'पिनड' निर्देशों का उपयोग कर सकते हैं और समाशोधन निर्देश से बच सकते हैं। – hirschhornsalz
@drhirsch: मैंने लगभग सभी इंटेल दस्तावेज़ों की जांच की है और मुझे कुछ भी उपयोगी नहीं मिला। :) –
हाँ, आप इसे साफ़ करने के लिए "xor eax, eax" के साथ एक छोटी सी जगह को सहेजने में सक्षम हो सकते हैं, लेकिन ऐसा लगता है कि यह जितना छोटा हो सकता है। –