इस समस्या यह है कि डेटा स्मृति को बदलने के लिए बिना एक भी चक्र datapath में एक लोड बाइट लागू करने के बारे कहा गया है था, और समाधान नीचे कुछ था।लोड आधा शब्द और लोड बाइट एक एकल चक्र datapath में
alt text http://img214.imageshack.us/img214/7107/99897101.jpg
यह वास्तव में काफी एक यथार्थवादी सवाल है, सबसे मेमोरी सिस्टम का हैं पूरी तरह से शब्द के आधार पर, और व्यक्तिगत बाइट्स आम तौर पर केवल प्रोसेसर के अंदर के साथ पेश कर रहे हैं। जब आप कई कंप्यूटरों पर एक "बस त्रुटि" देखो, यह अक्सर मतलब है कि प्रोसेसर एक स्मृति पता था कि नहीं ठीक से शब्द गठबंधन पहुँचने का प्रयास किया , और स्मृति प्रणाली में एक अपवाद उठाया। वैसे भी, क्योंकि बाइट पतों 4 की एक बहु नहीं हो सकता है, हम उन्हें स्मृति को सीधे पारित नहीं कर सकते हैं। हालांकि, हम अभी भी, किसी भी बाइट पर प्राप्त कर सकते हैं क्योंकि हर बाइट कुछ शब्द भीतर पाया जा सकता है, और सभी शब्द पतों 4. की गुणकों तो पहली बात हम करते हैं यकीन है कि हम सही शब्द मिल बनाने के लिए कर रहे हैं । अगर हम उच्च 0 बिट्स पते (यानी, ALUresult [31-2]) लेते हैं और उन्हें पर कम 0 अंत में दो 0 बिट्स के साथ संयोजित करें (यह है कि "बाएं शिफ्ट 2" इकाई वास्तव में कर रही है) , हम शब्द के बाइट पते है कि वांछित बाइट शामिल है। यह सिर्फ बाइट की अपनी पता है, 4. की एक बहु के लिए नीचे गोल यह परिवर्तन इसका मतलब है कि ठीक है अब भी दौर 4 के गुणकों के लिए नीचे पतों होगा, लेकिन LW गैर गठबंधन पतों के बाद से कार्य नहीं करेगा वैसे भी इस स्मृति इकाई के साथ। ठीक है, अब हमें डेटा शब्द स्मृति से वापस मिलता है। हम बाइट कैसे प्राप्त कर सकते हैं हम इसे से बाहर करना चाहते हैं? खैर, ध्यान दें कि बाइट की बाइट ऑफसेट शब्द के भीतर सिर्फ बाइट के पते के कम आदेश 2 बिट्स द्वारा दिया जाता है। इसलिए, हम बस उन 2 बिट्स का उपयोग एक मक्स का उपयोग कर शब्द से बाहर उपयुक्त बाइट का चयन करने के लिए करते हैं। बड़े-एंडियन बाइट नंबरिंग का उपयोग करें, एमआईपीएस के लिए उपयुक्त है। इसके बाद, हम को बाइट को 32 बिट्स को शून्य-विस्तारित करना होगा (यानी, इसे 24 शून्य के साथ अपने उच्च अंत में जोड़ दें), क्योंकि समस्या ऐसा करने के लिए निर्दिष्ट करती है। वास्तव में, यह प्रश्न में मामूली गलती थी: वास्तव में, LBU अनुदेश बाइट शून्य फैली हुई है, लेकिन यह पौंड साइन-फैली हुई है। ओह अच्छा। पौंड मामले के लिए शून्य विस्तारित बाइट: अंत में, हम MemtoReg नियंत्रित mux एक नए इनपुट स्वीकार करने के लिए विस्तार करने के लिए किया है। MemtoReg नियंत्रण संकेत 2 बिट्स तक बढ़ाया जाना चाहिए। मूल 0 और 1 मामलों 00 और 01 क्रमशः बदलने के लिए, और हम एक नए मामले 10 जो केवल मामले में प्रयोग किया जाता है lb. की
मैं काफी वास्तव में पर कैसे समझ में नहीं आता जोड़ने यह स्पष्टीकरण पढ़ने के बाद भी काम करता है, खासतौर पर बाएं शिफ्ट के बारे में एएलयू परिणाम 2 बाइट पता देगा ... यह कैसे संभव है ??तो अगर मैं आधा शब्द लोड करना चाहता हूं तो मैं एक बाएं शिफ्ट करूँगा और मुझे आधे शब्द का पता मिलेगा ?? लोड बाइट करने का बेहतर तरीका क्या होगा, डेटा मेमोरी को संशोधित करके आधा शब्द लोड करें? (ऊपर दिया गया सवाल बाधा डालता है कि हम डेटा मेमोरी को संशोधित नहीं कर सकते हैं)
तो बिंदु यह है कि। 1. क्या यह काम 2 से बाएं स्थानांतरित किए बिना होगा? 2. यदि मैं आधा शब्द करना चाहता हूं तो मुझे 2x1 मक्स होना चाहिए और नियंत्रण सिग्नल के रूप में कम से कम महत्वपूर्ण बिट का उपयोग करना चाहिए? – aherlambang
1) वास्तव में दो द्वारा कोई बाएं शिफ्ट नहीं है। दो में एक सही बदलाव है (दो एलएसबी छोड़ने के कारण: ALUResult [31-2]) और बाईं ओर बायीं तरफ बिट्स को उसी स्थान पर वापस रखता है (दो एलएसबी में शून्य के साथ)। निचले दो बिट्स को मास्क करने के लिए यह और अधिक स्पष्ट होगा। 2) एक गठबंधन आधा शब्द पढ़ने के लिए, आप 16-बिट 2 से 1 मल्टीप्लेक्सर को नियंत्रित करने के लिए ALUresult [1] का उपयोग करेंगे। आप इस स्मृति के साथ मनमाने ढंग से एकल चक्र आधे शब्द को पढ़ नहीं सकते हैं, क्योंकि असाइन किए गए मामलों में से एक (पता एलएसबी = 11) को दो अलग-अलग 32-बिट शब्दों (यानी: दो मेमोरी एक्सेस) से बाइट की आवश्यकता होती है। –