lb
lyszt.net lb और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
एन्कोडिंग प्रारूप
विवरण
lb मेमोरी से एक बाइट पढ़ता है, जो कि सबसे छोटी इकाई है जिसे एक लोड प्राप्त कर सकता है। मेमोरी बाइट्स से बनी होती है, प्रत्येक बाइट 8 बिट की होती है, और एक पता एक बाइट की पहचान करता है। lw 4 बाइट पढ़ता है, lh 2 पढ़ता है, और lb 1 पढ़ता है। यह अन्य लोड्स की तरह ही एड्रेसिंग का उपयोग करता है: एक बेस रजिस्टर प्लस एक ऑफसेट (lw पेज देखें)। इसका रूप नीचे दिखाया गया है।
lb rd, offset(rs1)
एक रजिस्टर 32 बिट रखता है और एक बाइट 8 रखती है, इसलिए शीर्ष 24 बिट्स को एक मान की आवश्यकता होती है। lb साइन-एक्सटेंड करता है: यह बाइट के शीर्ष बिट को सभी ऊपरी बिट्स में कॉपी करता है, मान को एक साइन्ड संख्या के रूप में बनाए रखता है। -5 रखने वाली एक बाइट 32-बिट -5 के रूप में आती है।
साइन्ड/अनसाइन्ड का चुनाव टेक्स्ट के लिए सबसे अधिक मायने रखता है, जो सबसे आम बाइट डेटा है, क्योंकि कैरेक्टर कोड अनसाइन्ड होते हैं। कई कैरेक्टर कोड्स का शीर्ष बिट सेट होता है। साइन-एक्सटेंडिंग lb के साथ एक को लोड करने पर एक ऋणात्मक संख्या उत्पन्न होती है, और सामान्य धनात्मक कैरेक्टर कोड्स के साथ तुलना तब विफल हो जाती है। टेक्स्ट के लिए lbu, लोड बाइट अनसाइन्ड, का उपयोग करें; यह शीर्ष बिट्स को 0s से भर देता है। साइन्ड डेटा के लिए lb का उपयोग करें, जैसे छोटे ऑफसेट जो धनात्मक या ऋणात्मक हो सकते हैं।
RISC-V मैनुअल lb और lbu को हाफवर्ड लोड्स के 8-बिट संस्करणों के रूप में परिभाषित करता है, जिनका प्रभावी पता रजिस्टर rs1 प्लस साइन-एक्सटेंडेड 12-बिट ऑफसेट होता है। मेमोरी बाइट-एड्रेस्ड है, इसलिए एक पता एक बाइट की पहचान करता है।
बाइट्स एक पते की दूरी पर स्थित होती हैं, इसलिए एक लूप बाइट एरे से गुजरते हुए पते में 1 जोड़कर आगे बढ़ता है। एक विशिष्ट लूप एक बाइट पढ़ता है, जाँचता है कि यह शून्य है या नहीं (टेक्स्ट के अंत का मार्कर), उस पर कार्य करता है, और पते को 1 से आगे बढ़ाता है।
उदाहरण
.data val: .byte -5 .text la t0, val lb t1, 0(t0) # t1 = -5 (sign-extended)
