2011-09-18 14 views
7

मैं एमआईपीएस 32 बिट सीख रहा हूं। मैं पूछना चाहता था कि स्टोर वर्ड के मामले में एएलयू को भेजने से पहले हम 16 बिट ऑफसेट (सिंगल साइकिल डेटापाथ में) को क्यों बढ़ाते हैं?हम लोड शब्द निर्देश में विस्तार क्यों करते हैं?

उत्तर

8

16-बिट ऑफसेट की तरह लगता है एक हस्ताक्षर 2's complement नंबर है, यानी यह सकारात्मक या नकारात्मक हो सकता है।

इसे 32 बिट्स में परिवर्तित करते समय, साइन जानकारी रखने के लिए सबसे महत्वपूर्ण बिट को ऊपरी 16 बिट्स में कॉपी करने की आवश्यकता होती है।

+0

मैं मतलब, हम उसे क्यों 32 बिट में बदलने की जरूरत है? एएलयू में जाने वाला दूसरा रजिस्टर (बेस रजिस्टर) 32 बिट्स नहीं बल्कि केवल 5 बिट्स है। 32 बिट्स होने की आवश्यकता क्यों है? –

+2

बेस रजिस्टर की सामग्री 32 बिट्स है, और यही वास्तव में एएलयू में जाती है। – jpa

10

मुझे यकीन नहीं है कि यह आपके लिए सहायक है, लेकिन मैं इसे वैसे भी पोस्ट कर रहा हूं।

हमें एक बहुत ही सामान्य अर्थ में विचार करें, सी ++ यानी ए [0], ए [1], ए [2] ..... में निर्देशों की एक सरणी किसी भी दो निर्देशों के बीच "मूर्तिकला" दूरी 1 यूनिट है

इस एमआईपीएस को इस समानता को लेते हैं। एमआईपीएस में, मूर्तिकलात्मक रूप से प्रत्येक निर्देश "1 यूनिट" से अलग होता है, हालांकि, एमआईपीएस में 1 यूनिट = 4 बाइट्स। प्रत्येक निर्देश 4 बाइट लंबा होता है और यही कारण है कि निर्देश से निर्देश में जाने पर पीसी को 4 यानी पीसी + 4 से बढ़ाया जाता है। इस प्रकार निर्देश I और निर्देश I + 2 के बीच का अंतर "रूपक रूप से" 2 है लेकिन वास्तव में 2 * 4 = 8 यानी पीसी + 4 + 4

शाखा निर्देशों में निर्दिष्ट ऑफसेट पर वापस आ रहा है, ऑफ़सेट का प्रतिनिधित्व करता है अगले अनुदेश (शाखा के बाद निर्देश) से "मूर्तिकला" दूरी। तो "वास्तविक" दूरी प्राप्त करने के लिए, ऑफसेट को 4 से गुणा किया जाना है। यही कारण है कि हमें ऑफसेट को "बाएं 'पर 2 बिट्स द्वारा" साइन-विस्तार "करने का निर्देश दिया गया है, क्योंकि, किसी भी बाइनरी मान को स्थानांतरित करना छोड़ दिया गया है एन बिट्स उस मान को 2^एन द्वारा गुणा करने में परिणाम देता है। हमारे मामले में 2^2 = 4

तो शाखा निर्देश का वास्तविक लक्ष्य पता पीसी + 4 + 4 * ऑफसेट है।

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

0

मेरे ज्ञान का सबसे अच्छा, लोड या स्टोर निर्देशों में ऑफ़सेट मान अस्थायी रजिस्टर में अस्थायी रजिस्टर में मूल्य में जोड़ा जाता है। रजिस्टर 32 बिट है और 16 बिट और 32 बिट के अतिरिक्त ऑपरेशन संभव नहीं है, मान संकेत बढ़ाया गया है।

0

मुझे लगता है कि आप यहां अपनी अवधारणाओं को थोड़ा गलत कर रहे हैं।

5 बिट्स जो आपको लगता है कि एएलयू के अंदर जा रहे हैं, वास्तव में 32 [2^5] रजिस्टरों में से एक का चयन करने के लिए रजिस्टर मेमोरी के अंदर जाते हैं।

प्रत्येक रजिस्टर स्वयं 32 बिट्स का है। इसलिए, ऑफसेट को रजिस्टर मूल्य में जोड़ने के लिए, आपको इसे 32 बिट्स तक विस्तारित करने की आवश्यकता है।

एएलयू ऑपरेशन हमेशा एमआईपीएस के लिए एकल चक्र डेटापथ में एक ही आकार के दो रजिस्टरों के बीच होता है।

0

32-बिट मशीन के हार्डवेयर में अधिकांश एएलयू 32-बिट इनपुट लेते हैं, और सभी रजिस्ट्रार 32-बिट रजिस्ट्रार होते हैं।

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

0

साइन एक्सटेंशन होता है उदा। केवल पता रजिस्टरों को लोड करने के मामले में M68xxx मशीनों के मामले में। डेटा रजिस्टरों के मामले में ऐसा नहीं है।

उदा।डेटा के मामले में

movea.w addr,a0 
move addr,d0 
addr: 
dc.w $FFFF 

सुराग $ 0000FFFF रजिस्टर लोड हो रहा है, पते रजिस्टर लोड हो रहा है $ FFFFFFFF लेकिन के मामले में।

यह समझने के लिए, पर हस्ताक्षर किए नकारात्मक प्रस्तुति, $ FFFF के दो पूरक का निर्माण, 32 बिट के लिए संख्या का विस्तार करने और दो पूरक फिर से करना, 32 बिट में इसी प्रतिनिधित्व पाने के।

चीयर्स और तरह का संबंध, स्टीफ़न एस

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