2013-02-23 106 views
7

अधिकांश विधानसभा कार्यक्रमों 4 सामान्य प्रयोजन के उपयोग eax ebx ecx edx पंजीकृत करता है, लेकिन मुझे लगता है कि अक्सर मैं push और pop बिना मेरी काम आसानी से पूरा करने के लिए 4 से अधिक रजिस्टरों उपयोग करने की आवश्यकता के रूप में दर्ज ढेर से ज्यादा तक। चूंकि मेरे प्रोग्राम में फ्लोटिंग पॉइंट गणना या उनके "इच्छित उपयोग" के लिए एफपीयू या एमएमएक्स रजिस्टरों का उपयोग करने का कोई इरादा नहीं है, क्या यह आपके प्रोग्राम में इन अतिरिक्त रजिस्टरों का उपयोग करने के लिए स्वीकार्य माना जाता है?का उपयोग एफपीयू और MMX "सामान्य रजिस्टर"

ईजी। का उपयोग करके लूप वृद्धि काउंटर के लिए ecx को अन्य चीजों को करने के लिए पंजीकरण करें।

+0

आप जो कुछ भी चाहते हैं वह कर सकते हैं। यदि आपको लगता है कि xmm रजिस्टरों का उपयोग करना स्टैक करने के लिए फैलाने से तेज़ है, तो इसके लिए जाएं। – Mysticial

+2

@ मिस्टिकिक शायद ही कोई मुझे प्रोग्रामिंग से संबंधित "मैं जो कुछ भी चाहता हूं" कर सकता हूं। मैं इसे खोदता हूं :) – user99545

+1

x86_64 में सामान्य उपयोग के लिए 8 अतिरिक्त रजिस्ट्रार हैं। –

उत्तर

3

क्यों चार? आप इन सभी का उपयोग कर सकते हैं: eax, ebx, ecx, edx, esi, edi और ebp। वह सात है। या वह पर्याप्त नहीं है?

एफपीयू और एमएमएक्स रजिस्ट्रार काम करने के लिए कुछ हद तक अजीब हैं क्योंकि उन्हें केवल खुद से और स्मृति से लोड किया जा सकता है और केवल स्वयं और स्मृति में संग्रहीत किया जा सकता है। आप उनके और सामान्य प्रयोजन रजिस्टरों के बीच डेटा को स्वतंत्र रूप से स्थानांतरित नहीं कर सकते हैं, न ही एक ही समय में दोनों प्रकार के रजिस्टरों पर काम करने में सक्षम निर्देश हैं।

यदि सात सामान्य प्रयोजन रजिस्टर पर्याप्त नहीं हैं, तो स्थानीय/ऑन-स्टैक चर का उपयोग करें। उदाहरण के लिए, आप सीधे मेमोरी में काउंटर वैरिएबल कम कर सकते हैं और आप सीधे इसे स्थिर या किसी अन्य रजिस्टर से तुलना भी कर सकते हैं। संभावना है कि यह अजीब तरीकों से एफपीयू या एमएमएक्स रजिस्टरों का उपयोग करने की तुलना में धीमा (संभावित, तेज) नहीं होगा।

+0

नहीं, सात रजिस्ट्रार उन सभी का उपयोग करने जितना तेज़ नहीं हैं। एमएमएक्स रजिस्टर काफी उपयोगी हो सकता है। –

+0

@BenVoigt विस्तृत? –

-2

वील निश्चित रूप से एसआई और डीआई है, और x64 पर आपके पास अतिरिक्त रजिस्ट्रार हैं, लेकिन आप जो कुछ भी चाहते हैं उसके लिए आप एफपी रजिस्टरों का उपयोग कर सकते हैं।

0

आपको पंजीकरण के 32 बिट्स की कितनी बार आवश्यकता है? छोटे काउंटर जैसी चीजों के लिए, सामान्य प्रयोजन रजिस्टर के बाइट आकार के क्वार्टर का उपयोग करने में संकोच न करें: एएच/एएल, बीएच/बीएल, सीएच/सीएल, डीएच/डीएल। कुछ bitwise चालबाजी के साथ, आप शब्द के आकार के चर के लिए एक मध्यवर्ती भंडारण के रूप में सामान्य प्रयोजन रजिस्टर के ऊपरी 16 बिट्स का भी उपयोग कर सकते हैं।

वास्तविक मोड में (पढ़ें: डॉस के तहत), आप मध्यवर्ती मूल्य भंडारण के लिए सेगमेंट रजिस्टर्स ES, FS, और GS का भी उपयोग कर सकते हैं। संरक्षित-मोड ओएस (विंडोज़, लिनक्स, * निक्स) के तहत कोड क्रैश हो जाएगा, हालांकि।