2011-08-13 24 views
13

के तहत 64-बिट रजिस्ट्रार मैंने जीसीसी इनलाइन असेंबली के साथ प्रयोग करने के लिए अपने 32-बिट Vista बॉक्स पर mingw32 इंस्टॉल किया है। दुर्भाग्यवश 32-बिट जीसीसी कंपाइलर 64-बिट रजिस्टरों को पहचानता नहीं है, जैसे %% रैक्स।32-बिट विंडोज़

इससे पहले कि मैं एक नए toolchain इकट्ठा करने के लिए कोशिश कर रहा में समय की बहुत सिंक, मैं कुछ प्रश्न हैं:

  1. वहाँ 86 (इंटेल कोर की जोड़ी, T5800) है कि यह कर पाएगा पर कुछ प्रोसेसर मोड है Vista32 चलाते समय 64-बिट रजिस्टरों का उपयोग करने से (यानी यह एक खो गया कारण है)?

  2. मान लीजिए कि # 1 का जवाब "निश्चित रूप से आप 32-बिट विंडोज़ के तहत% रैक्स आदि का उपयोग कर सकते हैं", जीसीसी को 64-बिट रजिस्टरों को पहचानने के लिए कॉन्फ़िगर किया जा सकता है और एक निष्पादन योग्य बनाया जा सकता है जो नीचे चलाएगा 32-बिट खिड़कियां? मुझे पता है कि gcc में -m64 विकल्प है, लेकिन मेरा संस्करण जो mingw32 के साथ आया है, में 64-बिट समर्थन संकलित नहीं है। मैं निश्चित रूप से जीसीसी का पुनर्निर्माण करने के लिए तैयार हूं यदि यह 32-बिट अनुप्रयोगों का निर्माण कर सकता है जिनके पास 64-बिट तक पहुंच है रजिस्ट्रार, लेकिन अगर मैं वैसे भी काम नहीं कर रहा हूं तो मैं उस दर्द से गुजरना नहीं चाहता हूं।

एक तरफ: यह वास्तव में SSE2 निर्देश (हाँ, मुझे पता है, संकलक intrinsics मौजूद हैं, लेकिन मैं एक मशीन स्तर ऊपर से यह समझना चाहते हैं) सीखने की दिशा में पहला कदम है।

किसी भी उत्तर के लिए अग्रिम धन्यवाद!

-जिम

उत्तर

6
  1. हाँ, एक 64-बिट प्रोसेसर 3 आकार मोड, 16-बिट, 32-बिट और 64-बिट है। एक ऑपरेटिंग सिस्टम ऑपरेटिंग सिस्टम से बड़े मोड में कोड नहीं चला सकता है। इस प्रकार Vista 32-bit केवल 16-बिट्स और 32-बिट्स के लिए बनाया गया कोड चला सकता है। आपका प्रोसेसर does indeed support 64-bits, इसलिए आपको 64-बिट ओएस इंस्टॉल करने का प्रयास करना चाहिए। यदि आपका कंप्यूटर वास्तविक विंडोज़ विस्टा सीडी के साथ आया है, तो Vista 64 के लिए एक अलग सीडी हो सकती है। यदि आप x86-64 समर्थन के साथ एक नया टूलचैन बनाते हैं तो आप 64-बिट निर्देशों और रजिस्टरों का उपयोग करने वाले कोड को संकलित करने में सक्षम होंगे, लेकिन आप करेंगे परिणामी निष्पादन योग्य चलाने में सक्षम नहीं होने तक आप 64-बिट ओएस इंस्टॉल नहीं करते हैं।

  2. rax एक 64-बिट रजिस्टर है (32-बिट समकक्ष eax है) इसे 64-बिट प्रोग्राम को छोड़कर एक्सेस नहीं किया जा सकता है। इसका कारण यह है कि प्रोसेसर आपके प्रोग्राम द्वारा भेजे गए आदेशों को कैसे समझता है, इसका एक संक्षिप्त रूप से स्पष्टीकरण है।

लेकिन, आपको एमएमएक्स, एसएसई, एसएसई 2 और एसएसई 3 का उपयोग करने के लिए वास्तव में 64-बिट कोड तक पहुंच की आवश्यकता नहीं है। उन सभी निर्देश 32-बिट मोड में उपलब्ध हैं और आपके प्रोसेसर द्वारा समर्थित हैं।

आप भी वर्चुअल मशीन चलाने और इसके अंदर उबंटू डालने पर विचार करना चाहेंगे। यह आपको अपने विंडोज डेस्कटॉप पर एक विंडो के अंदर लिनक्स चलाने की अनुमति देगा। मुझे लगता है कि आप mingw32 का उपयोग करने से जीएनयू टूल चेन (जीसीसी, इत्यादि) का उपयोग करके चीजों का आसान समय लेंगे। वीएम को स्थापित करना और इस दिन और उम्र में उपयोग करना आसान है, अब mingw32 का उपयोग करने का कोई कारण नहीं है। आप एमएस विजुअल सी ++ एक्सप्रेस में भी देख सकते हैं, जो एक विंडोज-आधारित कंपाइलर है जो माइक्रोसॉफ्ट से मुक्त है, लेकिन यह 64-बिट का समर्थन नहीं करता है (आपको एक संस्करण के लिए भुगतान करना होगा)।

+0

एक उत्कृष्ट उत्तर के लिए धन्यवाद। पुन: 64 बिट विस्टा ... मैं एक इंटरफ़ेस के माध्यम से माइक्रोकंट्रोलर से कनेक्ट करता हूं (मुझे लगता है) हस्ताक्षरित ड्राइवरों का उपयोग करता है, इसलिए वहां कोई खुशी नहीं है। क्या मैं 32-बिट विंडोज़ के तहत 64-बिट वीएम चला सकता हूं? मेरे पास वर्तमान में 32-बिट आरएच 9 और फेडोरा 11 दोनों वीएमवेयर के तहत हैं। मैं 64-बिट वीएम में देखूंगा।मैं शायद 64 छोड़ दूंगा हालांकि अगर मैं 32-बिट से एसएसई 2 तक पहुंच सकता हूं (मैं गलत धारणा के तहत था कि एसएसई 2 केवल 64 बिट से उपलब्ध था)। फिर से धन्यवाद! – Jim

+1

मैं यह नहीं कहूंगा कि यह संकलित है। इसका मुख्य कारण यह समर्थित नहीं है कि एक 32 बिट ओएस कार्य स्विच पर सभी रजिस्टरों को सहेज/पुनर्स्थापित नहीं करेगा। ओएस को हमेशा यह जानना होगा कि किसी प्रक्रिया द्वारा देखे गए सभी वास्तुशिल्प राज्य को कैसे सहेजना/पुनर्स्थापित करना है। (यही कारण है कि उपयोगकर्ता-अंतरिक्ष प्रक्रियाएं एसएसई का उपयोग कर सकती हैं, इससे पहले ओएस समर्थन की आवश्यकता है, लेकिन एमएमएक्स के लिए कोई अतिरिक्त समर्थन की आवश्यकता नहीं है)। –