x86-64 Tour of Intel Manuals से, मैंने पढ़ा32-बिट रजिस्टरों पर x86-64 निर्देश पूर्ण 64-बिट रजिस्टर के ऊपरी भाग को शून्य क्यों करते हैं?
शायद सबसे आश्चर्य की बात यह है कि एक अनुदेश जैसे
MOV EAX, EBX
स्वचालित रूप सेRAX
रजिस्टर के ऊपरी 32 बिट शून्य है।
इंटेल प्रलेखन एक ही स्रोत में उद्धृत (3.4.1.1 मैनुअल मूल वास्तुकला में 64-बिट मोड में सामान्य-प्रयोजन रजिस्टरों) हमें बताता है:
- 64-बिट ऑपरेंड उत्पन्न एक 64 गंतव्य सामान्य उद्देश्य के लिए गंतव्य परिणाम।
- 32-बिट ऑपरेंड 32-बिट परिणाम उत्पन्न करते हैं, गंतव्य सामान्य उद्देश्य के रजिस्टर में 64-बिट परिणाम के लिए शून्य-विस्तारित।
- 8-बिट और 16-बिट ऑपरेंड 8-बिट या 16-बिट परिणाम उत्पन्न करते हैं। गंतव्य सामान्य प्रयोजन रजिस्टर के ऊपरी 56 बिट्स या 48 बिट्स (क्रमशः) को ऑपरेशन द्वारा संशोधित नहीं किया जाता है। यदि 8-बिट या 16-बिट ऑपरेशन का परिणाम 64-बिट पता गणना के लिए है, तो रजिस्टर को 64-बिट्स पर स्पष्ट रूप से साइन-इन करें। इस तरह के
mov ax, bx
रूप
x86-32 और x86-64 विधानसभा में, 16 बिट निर्देश "अजीब" व्यवहार है कि eax के ऊपरी शब्द ध्यान केंद्रित किया गया है इस तरह का नहीं दिखाते।
इस प्रकार: इस व्यवहार को पेश करने का कारण क्या है? पहली नज़र में यह अजीब लगता है (लेकिन कारण यह हो सकता है कि मैं x86-32 असेंबली के quirks के लिए उपयोग किया जाता है)।
यदि आप "आंशिक रजिस्टर स्टॉल" के लिए Google हैं, तो आपको उन समस्याओं के बारे में बहुत कुछ जानकारी मिलेगी जो वे (लगभग निश्चित रूप से) से बचने की कोशिश कर रहे हैं। –
http://stackoverflow.com/questions/25455447/x86-64-registers-rax-eax-ax-al-overwriting-full-register-contents –
न केवल "सबसे अधिक"।AFAIK, * सभी * निर्देश 'r32' गंतव्य ऑपरेशन के साथ विलय करने के बजाए उच्च 32, शून्य 32। उदाहरण के लिए, कुछ एंबलर 'pmovmskb r64, xmm' को' pmovmskb r32, xmm' के साथ बदल देंगे, एक आरईएक्स को सहेजेंगे, क्योंकि 64 बिट गंतव्य संस्करण समान रूप से व्यवहार करता है। भले ही [मैनुअल के ऑपरेशन सेक्शन] (http://www.felixcloutier.com/x86/PMOVMSKB.html) 32/64 बिट dest और 64/128/256b स्रोत के सभी 6 संयोजनों को सूचीबद्ध करता है, निहित शून्य-विस्तार आर 32 फॉर्म के आर 64 फॉर्म के स्पष्ट शून्य-विस्तार को डुप्लिकेट करता है। मैं एचडब्ल्यू कार्यान्वयन के बारे में उत्सुक हूं ... –