2012-06-28 27 views
5

में इंटेल-स्टाइल इनलाइन असेंबली मैं जीसीसी कंपाइलर का उपयोग कर कोड :: ब्लॉक में पुराने सी ++ सॉफ़्टवेयर प्रोजेक्ट को संकलित करने की कोशिश कर रहा हूं, और कुछ अन्य मुद्दों को ठीक करने के बाद, मैंने एक दीवार मारा है: प्रोजेक्ट में एक फ़ाइल है इंटेल शैली इनलाइन एएसएम साथजीसीसी

_asm { 
    code here 
} 

के रूप में लिखा और संकलक के साथ संकलित करने के लिए मना कर दिया "त्रुटि: '_asm' इस दायरे में घोषित नहीं किया गया था"।

मैंने थोड़ी देर बिताए हैं समाधान के लिए चारों ओर गुगलिंग, लेकिन केवल मुझे जो मिल सकता है वह बिल्ड विकल्प (0 मैंने कोशिश की है और काम नहीं कर सकता) में -masm=intel जोड़ना है, या परिवर्तित करने के लिए कोड asm ("code here"); (जो कि एएसएम की भारी राशि के कारण व्यवहार्य नहीं है)। क्या किसी को पता है कि मैं इस कोड को संकलित करने के लिए जीसीसी कैसे प्राप्त कर सकता हूं, या क्या मुझे छोड़ देना चाहिए और एक अलग कंपाइलर का उपयोग करना चाहिए?

+0

मैक्रो उत्पन्न करने के बारे में, और फिर मैक्रो के साथ _asm लाइनों को प्रतिस्थापित करने के लिए एक स्क्रिप्ट का उपयोग कैसे करें। फिर आप बेहतर संकलक स्वतंत्रता प्राप्त करते हैं। – daramarak

+0

एक मैक्रो एक विचार होगा, हालांकि मैंने कभी पहले कभी नहीं उपयोग किया है, इसलिए मुझे इसे भी समझना होगा (मेरे प्रश्न को यह ध्वनि के बावजूद, मैं वास्तव में इस सामान के साथ एक पूर्ण नोब हूं//) । इसके अलावा, एएसएम रूटीन लेबल या कुछ ('_asm {\ n कोड यहाँ \ n} L01: __asm ​​... ') के साथ मिलकर जुड़े हुए हैं, और मुझे यकीन नहीं है कि इसे कैसे संभालें। – Dinoguy1000

+0

कोड संकलित नहीं होगा, आपको इसे gcc के साथ संकलित करने के लिए बदलने की आवश्यकता होगी (या इसके बजाय एमएसवीसी का उपयोग करें)। –

उत्तर

2

जीसीसी इनलाइन असेंबलर के लिए very different syntax का उपयोग करता है, इसलिए आप इसे छोटे बदलावों से संभालने में सक्षम नहीं होंगे। मैं निम्नलिखित विकल्पों देखें:

    जीसीसी वाक्य रचना में या सी कोड
  1. के रूप में जीसीसी वाक्य रचना (गैर तुच्छ काम) करने के लिए अनुवाद करने के लिए कुछ स्क्रिप्ट बनाने
  2. जो कुछ संकलक यह लिखा गया था के साथ कोड संकलित करें
  3. पुनर्लेखन सब कुछ के लिए (एमएसवीसी?)
+0

विकल्प 2 बेहद आशावादी है। रहने भी दो! – TonyK

+0

विकल्प 1 एक विकल्प नहीं है; प्रश्न में फ़ाइल पूरी तरह से एएसएम होती है और कई सौ कार्यों के साथ 83 केबी वजन में होती है। ऐसा लगता है कि मुझे बस कंपाइलर स्विच करना होगा, फिर। – Dinoguy1000

+1

किसी ने वास्तव में विकल्प 2 किया, इसे 'intel2gas' कहा जाता है, मैंने इसे समान पोर्टिंग प्रयासों में उपयोग किया है। –

0

आप कोड को 'जैसा है' संकलित करने के लिए जीसीसी नहीं प्राप्त कर सकते हैं। यदि आपको जीसीसी का उपयोग करके इस बात को संकलित करने की आवश्यकता है, तो आपको कोड को फिर से लिखना होगा, सी ++ या जीसीसी-संगत एएसएम में। यदि वास्तव में बहुत सारे असेंबली कोड हैं - कहें, 200 निर्देश या अधिक - यह जीसीसी असेंबलर वाक्यविन्यास सीखने योग्य हो सकता है; यदि नहीं, तो इसे C++ में कोड करें।

+0

इगोर के उत्तर पर मेरी टिप्पणी देखें; पुनर्लेखन इस मामले में एक विकल्प नहीं है क्योंकि हजारों निर्देश हैं (200 एक बहुत अच्छा कदम होगा!)। – Dinoguy1000