मुझे लगता है कि मैं एक सामान्य प्रश्न के उत्तर की तलाश में हूं। मैं यह समझने की कोशिश कर रहा हूं कि एमआइपी आर्किटेक्चर एक रजिस्टर में एक स्पष्ट "शून्य" मूल्य का उपयोग क्यों करता है जब आप केवल अपने खिलाफ किसी भी रजिस्टर को XOR'ing करके उसी चीज को प्राप्त कर सकते हैं। कोई कह सकता है कि ऑपरेशन पहले से ही आपके लिए किया गया है; हालाँकि, मैं वास्तव में ऐसी स्थिति की कल्पना नहीं कर सकता जहाँ आप बहुत सारे "शून्य" मूल्यों का उपयोग कर रहे हों। मैंने हेनेसी के मूल पत्रों को पढ़ा, और यह बिना किसी वास्तविक औचित्य के केवल एक शून्य को तथ्य के रूप में निर्दिष्ट करता है।
क्या शून्य के एक हार्ड-कोडेड बाइनरी असाइनमेंट का तार्किक कारण मौजूद है?
अद्यतन: PIC32MZ में MIPS कोर के लिए xc32-gcc से एक निष्पादन योग्य के 8k में, मेरे पास "शून्य" का एक भी उदाहरण है।
add t3,t1,zero
वास्तविक उत्तर: मैंने उस व्यक्ति को इनाम दिया है जिसके पास MIPS और कंडीशन कोड्स के बारे में जानकारी थी। उत्तर वास्तव में परिस्थितियों के लिए MIPS वास्तुकला में निहित है। हालाँकि मैं शुरू में इसके लिए समय नहीं देना चाहता था, मैंने ओपनस्पार्क , एमआइपीएस -वी और ओपनपावर (यह दस्तावेज़ आंतरिक था) के लिए वास्तुकला की समीक्षा की और यहां सारांश निष्कर्ष हैं। R0 पाइपलाइन की वास्तुकला के कारण शाखाओं पर तुलना के लिए आवश्यक रजिस्टर करता है।
- पूर्णांक शून्य और शाखा के खिलाफ तुलना (bgez, bgtz, blez, bltz)
- पूर्णांक दो रजिस्टरों और शाखा की तुलना करें (beq, bne)
- पूर्णांक दो रजिस्टरों और जाल की तुलना करता है (teq, tge, tlt, tne)
- पूर्णांक तुलना रजिस्टर और तत्काल और जाल (टेकी, tgei, tlti, tnei)
यह बस कैसे हार्डवेयर कार्यान्वयन में दिखता है नीचे आता है। MIPS-V मैनुअल से, पृष्ठ 68 पर एक अप्रतिबंधित उद्धरण है:
सशर्त शाखाओं को दो रजिस्टरों के बीच अंकगणितीय तुलना संचालन शामिल करने के लिए डिज़ाइन किया गया था (जैसा कि PA-RISC और Xtensa ISA में भी किया गया है), बजाय कंडिशन कोड (x86, ARM, SPARC, पावरपीसी) का उपयोग करने के लिए, या केवल शून्य के खिलाफ एक रजिस्टर की तुलना करने के लिए ( अल्फा, MIPS), या केवल समानता के लिए दो रजिस्टर (MIPS)। यह डिज़ाइन अवलोकन से प्रेरित था कि एक संयुक्त तुलना-और-शाखा निर्देश एक नियमित पाइपलाइन में स्थित है, अतिरिक्त स्थिति कोड स्थिति या एक अस्थायी रजिस्टर के उपयोग से बचा जाता है, और स्थिर कोड आकार और गतिशील अनुदेश भ्रूण टीआरसी को कम करता है। एक और बिंदु यह है कि शून्य के मुकाबले तुलना के लिए गैर-तुच्छ सर्किट विलंब की आवश्यकता होती है (विशेष रूप से उन्नत प्रक्रियाओं में स्थिर तर्क की चाल के बाद) और इसलिए अंकगणितीय परिमाण की तुलना में लगभग उतना ही महंगा है। फ़्यूस्ड तुलना-और-शाखा निर्देश का एक और लाभ यह है कि शाखाएँ पहले-अंत अनुदेश स्ट्रीम में देखी जाती हैं, और इसलिए पहले से भविष्यवाणी की जा सकती है। इस मामले में हालत कोड के साथ एक डिजाइन के लिए शायद एक फायदा है जहां एक ही स्थिति कोड के आधार पर कई शाखाएं ली जा सकती हैं, लेकिन हमारा मानना है कि यह मामला अपेक्षाकृत दुर्लभ है।
MIPS-V दस्तावेज़ उद्धृत अनुभाग के लेखक पर हिट नहीं करता है। मैं सभी को उनके समय और विचार के लिए धन्यवाद देता हूं।