2009-05-25 8 views
5

यहां एक प्रश्न रहा है जिसने स्टैक विकास दिशा के बारे में बात की है। जिस पर माइकल बुर ने एआरएम प्रोसेसर स्टैक में कहा था, विकास की दिशा को कॉन्फ़िगर किया जा सकता है - यानी या तो अवरोही (सामान्य व्यवहार) ढेर स्मृति या आरोही में शून्य पते (निचले पते) की ओर बढ़ता है, यानी स्मृति में उच्च पते की ओर बढ़ता है।क्या मैं आरोही स्टैक विकास दिशा के लिए एआरएम प्रोसेसर को कॉन्फ़िगर कर सकता हूं?

What is the direction of stack growth in most modern systems?

मेरा प्रश्न है: एआरएम प्रोसेसर में, मैं कैसे ढेर आरोही दिशा में बढ़ने कर सकते हैं?

मैं ढेर के रूप में आरोही के रूप में आरोही के रूप में कैसे कॉन्फ़िगर कर सकता हूं यह अवरोही है? कोई भी रजिस्टर बिट सेट/रीसेट, आदि

उत्तर

6

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

तो ऐसा कुछ नहीं है जिसे आप बस रनटाइम पर फिर से कॉन्फ़िगर कर सकते हैं: हालांकि यदि आप लिख रहे थे अपने स्वयं के ऑपरेटिंग सिस्टम के अपने स्वयं के कॉल सम्मेलन के साथ, आप आरोही स्टैक का उपयोग करना चुन सकते हैं। इसी तरह, आप R13 को स्टैक पॉइंटर के रूप में उपयोग न करने का भी चयन कर सकते हैं- यह भी कॉलिंग सम्मेलन का हिस्सा है। यह विकल्प प्रभावी रूप से स्टैक का उपयोग करने वाले प्रत्येक फ़ंक्शन के कार्यान्वयन में एम्बेड हो जाता है।

+0

अच्छा जवाब है, सिवाय इसके कि अंगूठे R13 ढेर सूचक किया जा रहा है पर निर्भर करता है। –

+0

आह, मैंने थोड़ा सा एआरएम 7TDMI का उपयोग किया लेकिन कभी भी थंब मोड का उपयोग नहीं किया। – araqnid

0

हम्म थंब/थंब 2 आपको धक्का/पॉप करने के लिए सीमित कर सकता है, और थंब 2 के साथ केवल एआरएम के साथ मुझे नहीं पता कि हम सामान्य रूप से कह सकते हैं कि आप दोनों तरीकों से जा सकते हैं। पारंपरिक हाथ निर्देश, हाँ आप ldmia या ldmdb (पहले वृद्धि या कमी) और stmdb और stmia कर सकते हैं। आप सी संकलक कैसे बनाते हैं उदाहरण के लिए स्वचालित रूप से नीचे की बजाय पते में चढ़ते हैं? पता नहीं।

यह एआरएम पर बड़े एंडियन की तरह है, सिर्फ इसलिए कि आप शायद इसके साथ सिरदर्द के कारण नहीं लेना चाहते हैं।

1

आप __user_initial_stackheap() समारोह जो आप ढेर-प्रारंभ, ढेर के अंत & ढेर स्थानांतरण ढेर-प्रारंभ, ढेर के अंत का उपयोग कर का उपयोग करते हुए सपा को बदलने में मदद करता है है। प्रारंभिक समय के दौरान इस फ़ंक्शन का उपयोग किया जा सकता है क्योंकि एआरएम इसका उपयोग स्टैक और हीप को पुनर्निर्देशित करने के लिए करेगा।

इसके अलावा, आपके पास एकल-क्षेत्र या दो-स्मृति मॉडल का उपयोग करने का विकल्प है [आपकी आवश्यकता के आधार पर]। मैंने इस एपीआई का उपयोग किया है जब मैं UseCases लिख रहा था जो ARM926EJ-S का उपयोग कर रहे थे।

This दस्तावेज़ मेरे विकास के दौरान मदद की थी और आपके लिए सहायक भी हो सकता है।

उम्मीद है कि इससे मदद मिलती है।

-hjsblogger

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

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