lw
lyszt.net lw और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
एन्कोडिंग प्रारूप
विवरण
lw मेमोरी से एक मान को रजिस्टर में कॉपी करता है। 32 रजिस्टर प्रोसेसर का छोटा, तेज़ कार्यक्षेत्र बनाते हैं। मेमोरी उनके साथ-साथ बड़े भंडार के रूप में रहती है: क्रमांकित स्लॉट की एक लंबी पंक्ति जो ऐरे, टेक्स्ट और वेरिएबल रखती है। स्लॉट की संख्या उसका एड्रेस है। गणना रजिस्टरों में होती है, और डेटा उपयोगों के बीच मेमोरी में प्रतीक्षा करता है।
RISC-V केवल रजिस्टरों पर अंकगणित करता है, कभी सीधे मेमोरी पर नहीं, इसलिए उपयोग से पहले एक मान को रजिस्टर में लोड करना और बाद में वापस स्टोर करना पड़ता है। lw लोड पूरा करता है। नाम का अर्थ है लोड वर्ड, और एक वर्ड 32-बिट मान है, जो एक रजिस्टर की चौड़ाई है।
lw का रूप नीचे दिखाई देता है। यह rs1 में मौजूद मान लेता है, जो एक रजिस्टर है जिसमें बेस नामक मेमोरी एड्रेस होता है, offset जोड़ता है, जो एक छोटा स्थिरांक है, और परिणामी एड्रेस पर मौजूद मान को गंतव्य रजिस्टर rd में पढ़ता है।
lw rd, offset(rs1)
अगली पंक्ति t0 में मौजूद एड्रेस से 8 बाइट आगे का मान लोड करती है।
lw t1, 8(t0)
RISC-V मैनुअल RISC-V को लोड-स्टोर आर्किटेक्चर कहता है: लोड और स्टोर निर्देश ही केवल ऐसे हैं जो मेमोरी तक पहुँचते हैं, और अंकगणितीय निर्देश अकेले रजिस्टरों पर काम करते हैं। एड्रेस स्पेस 32 बिट है और बाइट-एड्रेस्ड है, और लोड का प्रभावी एड्रेस रजिस्टर rs1 प्लस साइन-एक्सटेंडेड 12-बिट offset है। निष्पादन वातावरण, यानी वह सिस्टम जिसमें प्रोग्राम चलता है, तय करता है कि मेमोरी सबसे कम महत्वपूर्ण बाइट पहले रखती है, जिसे लिटिल-एंडियन कहा जाता है, या सबसे अधिक महत्वपूर्ण बाइट पहले, जिसे बिग-एंडियन कहा जाता है। एक एक्सेस प्राकृतिक रूप से संरेखित होता है जब उसका एड्रेस एक्सेस के आकार से समान रूप से विभाजित होता है, जो एक वर्ड के लिए 4 बाइट है। प्राकृतिक रूप से संरेखित एक्सेस कभी संरेखण त्रुटि नहीं उठाते। एक गलत संरेखित एक्सेस वैसा व्यवहार करता है जैसा वातावरण परिभाषित करता है और बहुत धीमी गति से चल सकता है।
offset इसलिए है क्योंकि मेमोरी में वस्तुएँ नियमित दूरियों पर स्थित होती हैं। एक वर्ड 4 बाइट है, इसलिए एक ऐरे के क्रमागत तत्व 4 बाइट की दूरी पर, offset 0, 4, 8 और इसी तरह पर स्थित होते हैं। la ऐरे का प्रारंभिक एड्रेस एक रजिस्टर में रखता है, और offset बदलने से अलग-अलग तत्व पढ़े जाते हैं। उदाहरण एक ऐरे के दो पड़ोसियों को लोड करता है। Offset 0 पहला मान, 10, देता है, और offset 4 अगला मान, 20, देता है।
उदाहरण
.data arr: .word 10, 20 .text la t0, arr lw t1, 0(t0) # t1 = 10 lw t2, 4(t0) # t2 = 20
