2015-07-04 9 views
5

क्या कोई मुझे बता सकता है कृपया मैं टीआई कोड संगीतकार स्टूडियो (एआरएम के लिए) का उपयोग कर सी कोड में इनलाइन असेंबली कोड कैसे निष्पादित कर सकता हूं?टीआई कोड संगीतकार स्टूडियो (एआरएम के लिए) का उपयोग कर सी कोड में इनलाइन असेंबली

मैंने खोज की और कोशिश की लेकिन कुछ भी काम नहीं किया।

उदाहरण के लिए, जब मैं इस बहुत ही सरल कोड का प्रयास करें:

asm("push r0\n"); 

या इस

__asm("push r0\n"); 

मैं हमेशा मिलती है:

[E0002] अवैध स्मरक निर्दिष्ट धक्का r0

1 विधानसभा त्रुटि, कोई विधानसभा युद्ध नहीं nings

मैंने कुछ पढ़ा है कि मेरा पिछला कोड जीसीसी शैली है, और टीआई कंपाइलर इसे स्वीकार नहीं करता है! तो मैं अपने इनलाइन असेंबली कोड कैसे निष्पादित कर सकता हूं?

+0

इनलाइन विधानसभा बहुत संकलक विशिष्ट है, इसलिए वहाँ कोई उम्मीद है कि इनलाइन विधानसभा होगा एक संकलक संस्करण या किसी अन्य के ब्रांड से बंदरगाह। –

उत्तर

4

अंततः मुझे समाधान मिला !!

मुख्य समस्या इस तरह विधानसभा अनुदेश पहले एक रिक्ति या टैब जोड़कर हल हो जाएगा:

asm(" MOVS R0, #5\n"); 

यह काम नहीं करेगा:

asm("MOVS R0, #5\n"); 

और धक्का में हम डाल करने के लिए है ब्रेसिज़ में पंजीकरण {R0}

asm(" PUSH {R0}\n"); 

आशा है कि मदद करता है।

+1

हाथ नहीं (स्थान) अजीब बात है कि है, लेकिन ठीक है, सबक सीखा है। हमें अपने समाधान बताने के लिए धन्यवाद। यूवी –

+2

अंतरिक्ष की आवश्यकता है ताकि कोडांतरक व्याख्या नहीं करता है एक लेबल के रूप में निर्देश। सामान्य असेंबली फ़ाइलों के लिए समान है। – PeterM

0

मुझे एआरएम कोड संगीतकार स्टूडियो नहीं पता है। लेकिन मुझे एक टीआई कोड संगीतकार स्टूडियो पता था और यदि इसका मतलब है, तो मैं आपको कुछ संकेत दे सकता हूं। asm volatile ("...") का उपयोग करें मदद कर सकते हैं। लेकिन उस विधि के साथ आप उदाहरण के लिए सी चर के लिए उपयोग नहीं कर सकते हैं। तथाकथित आंतरिक कार्यों/विधियों का उपयोग करना बेहतर होता है जो कि ऐसे कार्य होते हैं जो सी को असेंबलर से जोड़ते हैं। यहां एक टीआई दस्तावेज़ का एक लिंक है: http://www.ti.com/lit/ug/spru187o/spru187o.pdf सेक्शन 7.5.4। यहां वह लिंक है जिस से मुझे विचार मिला: https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/3660

+0

मैं वास्तव में टीआई सीसीएस (मैंने नाम संपादित किया) का मतलब था। दुर्भाग्यवश, अस्थिर विधि काम नहीं कर सका, मुझे अभी भी वही त्रुटि मिलती है। मैं जो पढ़ता हूं उसे पढ़ता हूं और आपको बताता हूं कि मुझे क्या मिलता है। धन्यवाद। –

+0

शायद यह अपरकेस पुश लिखने के रूप में सरल है और रजिस्टर सूचियों के लिए {} का उपयोग करें। लेकिन यह केवल एक अनुमान है। 'asm (" पुश {r0} \ n ")' –

+0

और मुझे वास्तव में आपकी अंतिम वाक्य पढ़नी चाहिए थी। ;-) टीआई कंपाइलर को एआरएम मोनोमोनिक्स पता होना चाहिए, लेकिन यदि नहीं, तो पुश 'एसटीएमडीबी एसपी !, रेग्लिस्ट' के लिए एक उपनाम है जैसा कि आप यहां पढ़ सकते हैं http://infocenter.arm.com/help/index.jsp?topic= /com.arm.doc.dui0489e/Babefbce.html –

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