2011-03-09 12 views
5

मैं स्मृति एक्सेसिंग के बारे में पूछना चाहता हूं। जब मैं load word कमांड निष्पादित करता हूं, तो कौन से मेमोरी प्रतिबंध मौजूद हैं? मतलब ऑफसेट या बेस रजिस्टर के रूप में मैं सबसे बड़ी संख्या का उपयोग कर सकता हूं?एमआईपीएस स्मृति प्रतिबंध?

रजिस्टर्स 32 बिट्स हैं और जहां तक ​​मुझे पता है कि "तत्काल" 16 बिट्स है। इस प्रकार, मैं बहुत मैं

array: .word 0:20000 
~ 

la  $s0, array 
lw  $s1, 15000($s0) 
... 

की तरह कुछ नहीं कर सकते तो अगर मैं 15000 उपयोग करना चाहते हैं, मैं la कुछ करने के लिए छोटे की जरूरत है और वहाँ सही से पर जा सकते हैं यकीन है? लेकिन ठीक होने के लिए मुझे किस छोटे मूल्य की आवश्यकता है और क्यों?

उत्तर

2

lw में तत्काल क्षेत्र 16 बिट्स है, हाँ; और यह दो पूरक के लिए हस्ताक्षरित है, इसलिए तत्काल ऑफसेट की संभावित सीमा -32768..32767 है - इसलिए lw $s1, 15000($s0) ठीक होना चाहिए।

यह समझें कि la वास्तविक एमआईपीएस निर्देश नहीं है। इसके बजाय, यह असेंबलर को सबसे इष्टतम निर्देश अनुक्रम उत्पन्न करने के लिए निर्देशित करता है जैसे कि आपके द्वारा निर्दिष्ट तत्काल मूल्य निर्दिष्ट रजिस्टर में रखा गया है। इस प्रकार, मानों की पूरी 32 बिट रेंज la का उपयोग करके सेट की जा सकती है, लेकिन आमतौर पर la का उपयोग करके कुछ रजिस्टर में उपयुक्त मूल्य रखने के लिए अधिक इष्टतम कोड उत्पन्न कर सकते हैं, जैसे कि कई बाद के निर्देश उस मूल्य से तत्काल ऑफसेट का उपयोग करने में सक्षम हैं प्रत्येक बार तत्काल मूल्य की आवश्यकता होने पर la का उपयोग करके।

तो, आप मान ऑफसेट 40000 और अपने सरणी के 50000 से मूल्यों को लोड करने के लिए की जरूरत है, तो आप क्या कर सकते हैं:

array: .word 0:20000 
~ 
la  $s0, array   # get address of array 
la  $s1, 40000   # get offset into a register 
add $s0, $s0, $s1  # add offset to address, i.e. calculate (array+40000) 
lw  $s1, 0($s0)   # fetch data from (array+40000) 
lw  $s2, 10000($s0)  # fetch data from (array+40000+10000) 
+0

तो अगर मैं एक ऑफसेट से बड़े 32767 के साथ एक मूल्य एक्सेस करना चाहते तो मैं की आवश्यकता होगी चाहते हैं 32767 पर 'ला' करने के लिए और एक और ऑफसेट का उपयोग करें? क्योंकि मेरे उदाहरण में मैं उपयुक्त मान (सरणी का पहला शब्द) का उपयोग करता हूं, लेकिन अगर मैं कहता हूं कि मुझे किसी अन्य 'ला' का उपयोग करना है या कोई और तरीका है? – Elias

+0

यदि आप ऑफसेट वाले किसी मान को एक्सेस करना चाहते हैं जो तत्काल ऑफ़सेट फ़ील्ड में फिट नहीं होगा, तो आपको उस ऑफसेट को एक रजिस्टर में प्राप्त करना होगा और इसे स्वयं पते में जोड़ना होगा। 'ला' आपको एक रजिस्टर में मनमाने ढंग से तत्काल मूल्य प्राप्त करने का सबसे इष्टतम तरीका देगा। यदि आप इसे अलगाव में एक बार कर रहे हैं, तो बस अपने इच्छित ऑफसेट के लिए 'la' का उपयोग करें, और 'lw' ऑफसेट फ़ील्ड में' 0'। यदि आप आस-पास की कई चीजों तक पहुंच रहे हैं, तो 'ला' और एक बार अतिरिक्त प्रदर्शन करें, फिर एक्सेस के लिए उचित तत्काल ऑफसेट का उपयोग करें। – moonshadow

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