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