Wednesday 15 August 2012

How do I avoid hard coding array index/indices within a loop in MIPS? -


उदाहरण के लिए,

  $ a0 सूचकांक / सूचक $ a1 का पता है सरणी का आधार   

मैं एक लूप के भीतर सरणी के प्रत्येक तत्व को एक्सेस करना चाहता हूं, उस तत्व को अंकगणितीय क्रिया निष्पादित करना चाहता हूं, और इसे अगले पर सहेजें। सूचकांक को प्रत्येक आवृत्ति पर +1 बढ़ाना चाहिए।

एक सरल उदाहरण के लिए, मैं सरणी में प्रत्येक पिछले तत्व को स्कैन करने का प्रयास कर रहा हूं। आरंभिक कठिन कोडित मान इंडेक्स हैं [0] = 0, ARRAY [0] = 2 मैंने चिह्नित किया है कि मैं कहाँ उलझन में हूँ मुझे नहीं पता है कि प्रत्येक पाश के लिए यह चर कैसे करें

  .data INDEX: .space 4। Align 2 arrary: .space 16 .align2 .text la $ a0, इंडेक्स ला $ a1, ARRAY li $ t0, 0 sw $ t0, ( $ A0) # सेट INDEX [0] = 0 li $ t0, 2 sw $ t0, ($ a1) # सेट एआरआरई [0] = 2 लूप: एलडब्ल्यू $ टी0, ($ a0) एसएलएल $ टी0, $ टी0, 2 # $ A0 * 4 तत्व ऑफसेट lw $ t1, $ t0 ($ a1) # यहां रोकें (1) $ t1, $ t1, $ t1 # वर्ग lw $ t0, ($ a0) जोड़ें $ t0, $ t0 जोड़ें , $ 1 $ में शेष स्थान अगर $ 1, $ 1, $ 1, $ 1, $ 1, $ 1, 1 और $ 2 जोड़ते हैं, तो ... 1 / =>  

(1 ) मैं ऑफसेट को बिना किसी हार्डकोडिंग के $ T1 रजिस्टर करने के लिए तत्व ARRAY [INDEX] को कैसे बचा सकता हूँ?

(2) सरणी में एक विशेष तत्व के लिए $ t1 को बदलकर मैं कैसे बचा सकता हूं: ARRAY [INDEX] = $ t1

अप्रत्यक्ष संकेतन प्रत्येक लूप पर बदल जाएगा , मैं 4 ($ a1), 8 ($ a1), आदि का उपयोग करने से बचना चाहता हूं।

धन्यवाद।

आपको बेस एड्रेस और इंडेक्स को एक साथ जोड़ना होगा। इस तरह से कुछ काम करना चाहिए:

  sll $ t2, $ t0, 2 # $ a0 * 4 तत्व ऑफसेट प्राप्त करने के लिए $ t2 जोड़ें, $ t2, $ a1 # को सरणी का आधार पता जोड़ें स्लेड इंडेक्स एलडब्ल्यू $ टी 1, ($ टी 2) # $ टी 1 = एआरआरईई [इंडेक्स] $ टी 1, $ टी 1, $ टी 1 # स्क्वायर जोड़ें $ टी0, $ टी0, 1 एसएफ़ $ टी 1, ($ टी 2)   

ध्यान दें कि आप वास्तव में अंकों की संख्या नहीं है - आप उन्हें दोहरा रहे हैं (टी 1 = टी 1 + टी 1)। एक संख्या को चौरस करने के लिए आप अपने आप से गुणा करें

No comments:

Post a Comment