lbu

lbu

RISC-V असेंबली संदर्भ

lyszt.net lbu और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।

एन्कोडिंग प्रारूप

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

विवरण

lbu मेमोरी से एक बाइट (8 बिट) को एक अहस्ताक्षरित मान के रूप में पढ़ता है। यह lb के साथ जोड़ी बनाता है, और दोनों केवल इस बात में भिन्न हैं कि वे रजिस्टर के शेष भाग को कैसे भरते हैं। दोनों समान एड्रेसिंग का उपयोग करके एक बाइट पढ़ते हैं। lb पृष्ठ बाइट्स और एड्रेसिंग रूप को कवर करता है। lbu का रूप नीचे दिखाया गया है।

lbu rd, offset(rs1)

एक रजिस्टर 32 बिट रखता है, इसलिए 1-बाइट लोड 24 बिट को भरने के लिए छोड़ देता है। lb बाइट के शीर्ष बिट को उन बिट्स में कॉपी करता है, जो साइन एक्सटेंशन है और एक ऋणात्मक संख्या उत्पन्न कर सकता है। lbu उन्हें 0s से भरता है, इसलिए परिणाम हमेशा 0 और 255 के बीच आता है। u अहस्ताक्षरित रीडिंग के लिए खड़ा है।

टेक्स्ट लोड आम तौर पर lbu का उपयोग करते हैं। कैरेक्टर कोड अहस्ताक्षरित होते हैं, और कई में उनका शीर्ष बिट सेट होता है, जिसमें उच्चारण वाले अक्षर और विभिन्न प्रतीक शामिल हैं। साइन-एक्सटेंडिंग lb उन्हें ऋणात्मक बनाता है और तुलनाओं को तोड़ता है। मानक टेक्स्ट लूप lbu का उपयोग करता है। यह एक बाइट लोड करता है, जाँचता है कि यह शून्य है या नहीं, जो टेक्स्ट का अंत दर्शाता है, इसे प्रोसेस करता है और एड्रेस में 1 जोड़ता है।

RISC-V मैनुअल lb और lbu को हाफवर्ड लोड के 8-बिट संस्करणों के रूप में परिभाषित करता है, जिसमें रजिस्टर rs1 प्लस साइन-एक्सटेंडेड 12-बिट ऑफसेट का समान प्रभावी एड्रेस होता है। मेमोरी बाइट-एड्रेस्ड है, इसलिए प्रत्येक एड्रेस एक बाइट को नाम देता है।

lbu अन्य बाइट डेटा के लिए भी उपयुक्त है, जिसमें छवियों में रंग चैनल, रॉ डेटा बफ़र्स और एक इंटरप्रेटर में निर्देश बाइट्स शामिल हैं। इस तरह से लोड किए गए बाइट्स में संभालने के लिए कोई चिह्न नहीं होता है, इसलिए जब एकल बाइट्स से एक बड़ा मान पुनर्निर्मित किया जाता है तो वे सीधे शिफ्ट और ORs के साथ संयोजित होते हैं। lb का उपयोग केवल तब करें जब 8-बिट डेटा हस्ताक्षरित हो।

उदाहरण

.data
val: .byte 0xff
.text
la t0, val
lbu t1, 0(t0)   # t1 = 255 (zero-extended)